aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/restricted
diff options
context:
space:
mode:
authorgalaxycrab <UgnineSirdis@ydb.tech>2022-08-10 15:41:57 +0300
committergalaxycrab <UgnineSirdis@ydb.tech>2022-08-10 15:41:57 +0300
commitd305bd814a40254aef0919b960bc9f24a7e9569f (patch)
tree5e7faba10a56448e5e76a9b406e01631ae7440bb /contrib/restricted
parent811b039dffc7d5e35d3b8a34fad80b16c38f570c (diff)
downloadydb-d305bd814a40254aef0919b960bc9f24a7e9569f.tar.gz
Rate limiting runtime in YQ
Diffstat (limited to 'contrib/restricted')
-rw-r--r--contrib/restricted/boost/boost/hana.hpp209
-rw-r--r--contrib/restricted/boost/boost/hana/accessors.hpp56
-rw-r--r--contrib/restricted/boost/boost/hana/adapt_adt.hpp17
-rw-r--r--contrib/restricted/boost/boost/hana/adapt_struct.hpp17
-rw-r--r--contrib/restricted/boost/boost/hana/adjust.hpp55
-rw-r--r--contrib/restricted/boost/boost/hana/adjust_if.hpp78
-rw-r--r--contrib/restricted/boost/boost/hana/all.hpp48
-rw-r--r--contrib/restricted/boost/boost/hana/all_of.hpp51
-rw-r--r--contrib/restricted/boost/boost/hana/and.hpp58
-rw-r--r--contrib/restricted/boost/boost/hana/any.hpp48
-rw-r--r--contrib/restricted/boost/boost/hana/any_of.hpp192
-rw-r--r--contrib/restricted/boost/boost/hana/ap.hpp78
-rw-r--r--contrib/restricted/boost/boost/hana/append.hpp74
-rw-r--r--contrib/restricted/boost/boost/hana/assert.hpp327
-rw-r--r--contrib/restricted/boost/boost/hana/at.hpp57
-rw-r--r--contrib/restricted/boost/boost/hana/at_key.hpp97
-rw-r--r--contrib/restricted/boost/boost/hana/back.hpp53
-rw-r--r--contrib/restricted/boost/boost/hana/basic_tuple.hpp256
-rw-r--r--contrib/restricted/boost/boost/hana/bool.hpp271
-rw-r--r--contrib/restricted/boost/boost/hana/cartesian_product.hpp113
-rw-r--r--contrib/restricted/boost/boost/hana/chain.hpp50
-rw-r--r--contrib/restricted/boost/boost/hana/comparing.hpp44
-rw-r--r--contrib/restricted/boost/boost/hana/concat.hpp80
-rw-r--r--contrib/restricted/boost/boost/hana/concept.hpp36
-rw-r--r--contrib/restricted/boost/boost/hana/concept/applicative.hpp33
-rw-r--r--contrib/restricted/boost/boost/hana/concept/comonad.hpp35
-rw-r--r--contrib/restricted/boost/boost/hana/concept/comparable.hpp32
-rw-r--r--contrib/restricted/boost/boost/hana/concept/constant.hpp31
-rw-r--r--contrib/restricted/boost/boost/hana/concept/euclidean_ring.hpp35
-rw-r--r--contrib/restricted/boost/boost/hana/concept/foldable.hpp33
-rw-r--r--contrib/restricted/boost/boost/hana/concept/functor.hpp33
-rw-r--r--contrib/restricted/boost/boost/hana/concept/group.hpp34
-rw-r--r--contrib/restricted/boost/boost/hana/concept/hashable.hpp32
-rw-r--r--contrib/restricted/boost/boost/hana/concept/integral_constant.hpp43
-rw-r--r--contrib/restricted/boost/boost/hana/concept/iterable.hpp35
-rw-r--r--contrib/restricted/boost/boost/hana/concept/logical.hpp35
-rw-r--r--contrib/restricted/boost/boost/hana/concept/metafunction.hpp41
-rw-r--r--contrib/restricted/boost/boost/hana/concept/monad.hpp33
-rw-r--r--contrib/restricted/boost/boost/hana/concept/monad_plus.hpp33
-rw-r--r--contrib/restricted/boost/boost/hana/concept/monoid.hpp34
-rw-r--r--contrib/restricted/boost/boost/hana/concept/orderable.hpp32
-rw-r--r--contrib/restricted/boost/boost/hana/concept/product.hpp33
-rw-r--r--contrib/restricted/boost/boost/hana/concept/ring.hpp34
-rw-r--r--contrib/restricted/boost/boost/hana/concept/searchable.hpp33
-rw-r--r--contrib/restricted/boost/boost/hana/concept/sequence.hpp44
-rw-r--r--contrib/restricted/boost/boost/hana/concept/struct.hpp31
-rw-r--r--contrib/restricted/boost/boost/hana/config.hpp219
-rw-r--r--contrib/restricted/boost/boost/hana/contains.hpp51
-rw-r--r--contrib/restricted/boost/boost/hana/core.hpp22
-rw-r--r--contrib/restricted/boost/boost/hana/core/common.hpp109
-rw-r--r--contrib/restricted/boost/boost/hana/core/default.hpp32
-rw-r--r--contrib/restricted/boost/boost/hana/core/dispatch.hpp18
-rw-r--r--contrib/restricted/boost/boost/hana/core/is_a.hpp41
-rw-r--r--contrib/restricted/boost/boost/hana/core/make.hpp48
-rw-r--r--contrib/restricted/boost/boost/hana/core/tag_of.hpp49
-rw-r--r--contrib/restricted/boost/boost/hana/core/to.hpp196
-rw-r--r--contrib/restricted/boost/boost/hana/core/when.hpp15
-rw-r--r--contrib/restricted/boost/boost/hana/count.hpp50
-rw-r--r--contrib/restricted/boost/boost/hana/count_if.hpp92
-rw-r--r--contrib/restricted/boost/boost/hana/cycle.hpp127
-rw-r--r--contrib/restricted/boost/boost/hana/define_struct.hpp17
-rw-r--r--contrib/restricted/boost/boost/hana/detail/algorithm.hpp186
-rw-r--r--contrib/restricted/boost/boost/hana/detail/any_of.hpp46
-rw-r--r--contrib/restricted/boost/boost/hana/detail/array.hpp105
-rw-r--r--contrib/restricted/boost/boost/hana/detail/canonical_constant.hpp80
-rw-r--r--contrib/restricted/boost/boost/hana/detail/concepts.hpp78
-rw-r--r--contrib/restricted/boost/boost/hana/detail/create.hpp33
-rw-r--r--contrib/restricted/boost/boost/hana/detail/decay.hpp48
-rw-r--r--contrib/restricted/boost/boost/hana/detail/dispatch_if.hpp56
-rw-r--r--contrib/restricted/boost/boost/hana/detail/ebo.hpp115
-rw-r--r--contrib/restricted/boost/boost/hana/detail/fast_and.hpp29
-rw-r--r--contrib/restricted/boost/boost/hana/detail/first_unsatisfied_index.hpp56
-rw-r--r--contrib/restricted/boost/boost/hana/detail/has_common_embedding.hpp69
-rw-r--r--contrib/restricted/boost/boost/hana/detail/has_duplicates.hpp65
-rw-r--r--contrib/restricted/boost/boost/hana/detail/hash_table.hpp145
-rw-r--r--contrib/restricted/boost/boost/hana/detail/index_if.hpp55
-rw-r--r--contrib/restricted/boost/boost/hana/detail/integral_constant.hpp245
-rw-r--r--contrib/restricted/boost/boost/hana/detail/intrinsics.hpp67
-rw-r--r--contrib/restricted/boost/boost/hana/detail/nested_by.hpp40
-rw-r--r--contrib/restricted/boost/boost/hana/detail/nested_by_fwd.hpp55
-rw-r--r--contrib/restricted/boost/boost/hana/detail/nested_than.hpp29
-rw-r--r--contrib/restricted/boost/boost/hana/detail/nested_than_fwd.hpp47
-rw-r--r--contrib/restricted/boost/boost/hana/detail/nested_to.hpp28
-rw-r--r--contrib/restricted/boost/boost/hana/detail/nested_to_fwd.hpp47
-rw-r--r--contrib/restricted/boost/boost/hana/detail/operators/adl.hpp34
-rw-r--r--contrib/restricted/boost/boost/hana/detail/operators/arithmetic.hpp78
-rw-r--r--contrib/restricted/boost/boost/hana/detail/operators/comparable.hpp44
-rw-r--r--contrib/restricted/boost/boost/hana/detail/operators/iterable.hpp40
-rw-r--r--contrib/restricted/boost/boost/hana/detail/operators/logical.hpp51
-rw-r--r--contrib/restricted/boost/boost/hana/detail/operators/monad.hpp35
-rw-r--r--contrib/restricted/boost/boost/hana/detail/operators/orderable.hpp60
-rw-r--r--contrib/restricted/boost/boost/hana/detail/operators/searchable.hpp40
-rw-r--r--contrib/restricted/boost/boost/hana/detail/preprocessor.hpp34
-rw-r--r--contrib/restricted/boost/boost/hana/detail/std_common_type.hpp36
-rw-r--r--contrib/restricted/boost/boost/hana/detail/struct_macros.hpp2768
-rw-r--r--contrib/restricted/boost/boost/hana/detail/type_at.hpp57
-rw-r--r--contrib/restricted/boost/boost/hana/detail/type_foldl1.hpp145
-rw-r--r--contrib/restricted/boost/boost/hana/detail/type_foldr1.hpp149
-rw-r--r--contrib/restricted/boost/boost/hana/detail/unpack_flatten.hpp70
-rw-r--r--contrib/restricted/boost/boost/hana/detail/variadic/at.hpp40
-rw-r--r--contrib/restricted/boost/boost/hana/detail/variadic/drop_into.hpp47
-rw-r--r--contrib/restricted/boost/boost/hana/detail/variadic/foldl1.hpp214
-rw-r--r--contrib/restricted/boost/boost/hana/detail/variadic/foldr1.hpp210
-rw-r--r--contrib/restricted/boost/boost/hana/detail/variadic/reverse_apply.hpp27
-rw-r--r--contrib/restricted/boost/boost/hana/detail/variadic/reverse_apply/flat.hpp41
-rw-r--r--contrib/restricted/boost/boost/hana/detail/variadic/reverse_apply/unrolled.hpp87
-rw-r--r--contrib/restricted/boost/boost/hana/detail/variadic/split_at.hpp153
-rw-r--r--contrib/restricted/boost/boost/hana/detail/variadic/take.hpp51
-rw-r--r--contrib/restricted/boost/boost/hana/detail/void_t.hpp21
-rw-r--r--contrib/restricted/boost/boost/hana/detail/wrong.hpp33
-rw-r--r--contrib/restricted/boost/boost/hana/difference.hpp40
-rw-r--r--contrib/restricted/boost/boost/hana/div.hpp107
-rw-r--r--contrib/restricted/boost/boost/hana/drop_back.hpp75
-rw-r--r--contrib/restricted/boost/boost/hana/drop_front.hpp57
-rw-r--r--contrib/restricted/boost/boost/hana/drop_front_exactly.hpp85
-rw-r--r--contrib/restricted/boost/boost/hana/drop_while.hpp93
-rw-r--r--contrib/restricted/boost/boost/hana/duplicate.hpp48
-rw-r--r--contrib/restricted/boost/boost/hana/empty.hpp53
-rw-r--r--contrib/restricted/boost/boost/hana/equal.hpp203
-rw-r--r--contrib/restricted/boost/boost/hana/erase_key.hpp37
-rw-r--r--contrib/restricted/boost/boost/hana/eval.hpp57
-rw-r--r--contrib/restricted/boost/boost/hana/eval_if.hpp93
-rw-r--r--contrib/restricted/boost/boost/hana/experimental/printable.hpp257
-rw-r--r--contrib/restricted/boost/boost/hana/experimental/type_name.hpp64
-rw-r--r--contrib/restricted/boost/boost/hana/experimental/types.hpp158
-rw-r--r--contrib/restricted/boost/boost/hana/experimental/view.hpp515
-rw-r--r--contrib/restricted/boost/boost/hana/ext/boost.hpp21
-rw-r--r--contrib/restricted/boost/boost/hana/ext/boost/fusion.hpp22
-rw-r--r--contrib/restricted/boost/boost/hana/ext/boost/fusion/deque.hpp108
-rw-r--r--contrib/restricted/boost/boost/hana/ext/boost/fusion/detail/common.hpp79
-rw-r--r--contrib/restricted/boost/boost/hana/ext/boost/fusion/list.hpp111
-rw-r--r--contrib/restricted/boost/boost/hana/ext/boost/fusion/tuple.hpp49
-rw-r--r--contrib/restricted/boost/boost/hana/ext/boost/fusion/vector.hpp110
-rw-r--r--contrib/restricted/boost/boost/hana/ext/boost/mpl.hpp21
-rw-r--r--contrib/restricted/boost/boost/hana/ext/boost/mpl/integral_c.hpp81
-rw-r--r--contrib/restricted/boost/boost/hana/ext/boost/mpl/list.hpp186
-rw-r--r--contrib/restricted/boost/boost/hana/ext/boost/mpl/vector.hpp185
-rw-r--r--contrib/restricted/boost/boost/hana/ext/boost/tuple.hpp138
-rw-r--r--contrib/restricted/boost/boost/hana/ext/std.hpp25
-rw-r--r--contrib/restricted/boost/boost/hana/ext/std/array.hpp171
-rw-r--r--contrib/restricted/boost/boost/hana/ext/std/integer_sequence.hpp140
-rw-r--r--contrib/restricted/boost/boost/hana/ext/std/integral_constant.hpp96
-rw-r--r--contrib/restricted/boost/boost/hana/ext/std/pair.hpp91
-rw-r--r--contrib/restricted/boost/boost/hana/ext/std/ratio.hpp164
-rw-r--r--contrib/restricted/boost/boost/hana/ext/std/tuple.hpp184
-rw-r--r--contrib/restricted/boost/boost/hana/ext/std/vector.hpp110
-rw-r--r--contrib/restricted/boost/boost/hana/extend.hpp50
-rw-r--r--contrib/restricted/boost/boost/hana/extract.hpp45
-rw-r--r--contrib/restricted/boost/boost/hana/fill.hpp74
-rw-r--r--contrib/restricted/boost/boost/hana/filter.hpp135
-rw-r--r--contrib/restricted/boost/boost/hana/find.hpp61
-rw-r--r--contrib/restricted/boost/boost/hana/find_if.hpp129
-rw-r--r--contrib/restricted/boost/boost/hana/first.hpp45
-rw-r--r--contrib/restricted/boost/boost/hana/flatten.hpp62
-rw-r--r--contrib/restricted/boost/boost/hana/fold.hpp17
-rw-r--r--contrib/restricted/boost/boost/hana/fold_left.hpp97
-rw-r--r--contrib/restricted/boost/boost/hana/fold_right.hpp97
-rw-r--r--contrib/restricted/boost/boost/hana/for_each.hpp62
-rw-r--r--contrib/restricted/boost/boost/hana/front.hpp47
-rw-r--r--contrib/restricted/boost/boost/hana/functional.hpp33
-rw-r--r--contrib/restricted/boost/boost/hana/functional/always.hpp64
-rw-r--r--contrib/restricted/boost/boost/hana/functional/apply.hpp85
-rw-r--r--contrib/restricted/boost/boost/hana/functional/arg.hpp141
-rw-r--r--contrib/restricted/boost/boost/hana/functional/capture.hpp112
-rw-r--r--contrib/restricted/boost/boost/hana/functional/compose.hpp108
-rw-r--r--contrib/restricted/boost/boost/hana/functional/curry.hpp170
-rw-r--r--contrib/restricted/boost/boost/hana/functional/demux.hpp269
-rw-r--r--contrib/restricted/boost/boost/hana/functional/fix.hpp83
-rw-r--r--contrib/restricted/boost/boost/hana/functional/flip.hpp73
-rw-r--r--contrib/restricted/boost/boost/hana/functional/id.hpp38
-rw-r--r--contrib/restricted/boost/boost/hana/functional/infix.hpp185
-rw-r--r--contrib/restricted/boost/boost/hana/functional/iterate.hpp201
-rw-r--r--contrib/restricted/boost/boost/hana/functional/lockstep.hpp114
-rw-r--r--contrib/restricted/boost/boost/hana/functional/on.hpp83
-rw-r--r--contrib/restricted/boost/boost/hana/functional/overload.hpp88
-rw-r--r--contrib/restricted/boost/boost/hana/functional/overload_linearly.hpp110
-rw-r--r--contrib/restricted/boost/boost/hana/functional/partial.hpp105
-rw-r--r--contrib/restricted/boost/boost/hana/functional/placeholder.hpp263
-rw-r--r--contrib/restricted/boost/boost/hana/functional/reverse_partial.hpp103
-rw-r--r--contrib/restricted/boost/boost/hana/fuse.hpp47
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/accessors.hpp50
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/adapt_adt.hpp48
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/adapt_struct.hpp48
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/adjust.hpp64
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/adjust_if.hpp69
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/all.hpp46
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/all_of.hpp54
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/and.hpp53
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/any.hpp46
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/any_of.hpp53
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/ap.hpp82
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/append.hpp68
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/at.hpp89
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/at_key.hpp67
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/back.hpp48
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/basic_tuple.hpp65
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/bool.hpp15
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/cartesian_product.hpp62
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/chain.hpp67
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/comparing.hpp65
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concat.hpp63
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/applicative.hpp117
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/comonad.hpp111
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/comparable.hpp160
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/constant.hpp210
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/euclidean_ring.hpp117
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/foldable.hpp141
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/functor.hpp139
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/group.hpp111
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/hashable.hpp68
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/integral_constant.hpp73
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/iterable.hpp149
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/logical.hpp166
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/metafunction.hpp99
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/monad.hpp198
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/monad_plus.hpp89
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/monoid.hpp101
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/orderable.hpp187
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/product.hpp103
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/ring.hpp106
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/searchable.hpp143
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/sequence.hpp165
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/concept/struct.hpp156
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/contains.hpp73
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/core.hpp21
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/core/common.hpp103
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/core/default.hpp56
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/core/is_a.hpp61
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/core/make.hpp70
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/core/tag_of.hpp120
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/core/to.hpp174
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/core/when.hpp74
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/count.hpp57
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/count_if.hpp56
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/cycle.hpp76
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/define_struct.hpp48
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/difference.hpp32
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/div.hpp59
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/drop_back.hpp63
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/drop_front.hpp66
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/drop_front_exactly.hpp67
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/drop_while.hpp60
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/duplicate.hpp57
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/empty.hpp51
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/equal.hpp80
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/erase_key.hpp32
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/eval.hpp58
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/eval_if.hpp155
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/extend.hpp62
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/extract.hpp58
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/fill.hpp57
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/filter.hpp81
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/find.hpp60
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/find_if.hpp57
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/first.hpp49
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/flatten.hpp63
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/fold.hpp38
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/fold_left.hpp88
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/fold_right.hpp92
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/for_each.hpp55
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/front.hpp48
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/fuse.hpp55
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/greater.hpp53
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/greater_equal.hpp54
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/group.hpp103
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/hash.hpp68
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/if.hpp57
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/index_if.hpp60
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/insert.hpp60
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/insert_range.hpp57
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/integral_constant.hpp175
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/intersection.hpp32
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/intersperse.hpp57
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/is_disjoint.hpp50
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/is_empty.hpp49
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/is_subset.hpp79
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/keys.hpp50
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/lazy.hpp124
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/length.hpp50
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/less.hpp53
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/less_equal.hpp54
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/lexicographical_compare.hpp93
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/lift.hpp59
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/map.hpp380
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/max.hpp44
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/maximum.hpp116
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/members.hpp46
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/min.hpp51
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/minimum.hpp116
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/minus.hpp67
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/mod.hpp62
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/monadic_compose.hpp75
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/monadic_fold_left.hpp104
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/monadic_fold_right.hpp106
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/mult.hpp63
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/negate.hpp42
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/none.hpp46
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/none_of.hpp55
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/not.hpp47
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/not_equal.hpp70
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/one.hpp45
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/optional.hpp510
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/or.hpp53
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/ordering.hpp65
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/pair.hpp153
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/partition.hpp81
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/permutations.hpp50
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/plus.hpp63
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/power.hpp56
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/prefix.hpp72
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/prepend.hpp73
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/product.hpp70
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/range.hpp149
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/remove.hpp70
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/remove_at.hpp82
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/remove_if.hpp69
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/remove_range.hpp85
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/repeat.hpp58
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/replace.hpp64
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/replace_if.hpp63
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/replicate.hpp75
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/reverse.hpp49
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/reverse_fold.hpp84
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/scan_left.hpp105
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/scan_right.hpp105
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/second.hpp48
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/set.hpp297
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/size.hpp33
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/slice.hpp105
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/sort.hpp103
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/span.hpp85
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/string.hpp271
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/suffix.hpp72
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/sum.hpp79
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/symmetric_difference.hpp32
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/take_back.hpp78
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/take_front.hpp78
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/take_while.hpp56
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/tap.hpp65
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/then.hpp52
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/transform.hpp57
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/tuple.hpp224
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/type.hpp535
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/unfold_left.hpp85
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/unfold_right.hpp85
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/union.hpp32
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/unique.hpp91
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/unpack.hpp95
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/value.hpp100
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/while.hpp71
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/zero.hpp45
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/zip.hpp61
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/zip_shortest.hpp61
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/zip_shortest_with.hpp62
-rw-r--r--contrib/restricted/boost/boost/hana/fwd/zip_with.hpp62
-rw-r--r--contrib/restricted/boost/boost/hana/greater.hpp71
-rw-r--r--contrib/restricted/boost/boost/hana/greater_equal.hpp74
-rw-r--r--contrib/restricted/boost/boost/hana/group.hpp158
-rw-r--r--contrib/restricted/boost/boost/hana/hash.hpp114
-rw-r--r--contrib/restricted/boost/boost/hana/if.hpp61
-rw-r--r--contrib/restricted/boost/boost/hana/index_if.hpp105
-rw-r--r--contrib/restricted/boost/boost/hana/insert.hpp52
-rw-r--r--contrib/restricted/boost/boost/hana/insert_range.hpp64
-rw-r--r--contrib/restricted/boost/boost/hana/integral_constant.hpp15
-rw-r--r--contrib/restricted/boost/boost/hana/intersection.hpp39
-rw-r--r--contrib/restricted/boost/boost/hana/intersperse.hpp76
-rw-r--r--contrib/restricted/boost/boost/hana/is_disjoint.hpp65
-rw-r--r--contrib/restricted/boost/boost/hana/is_empty.hpp45
-rw-r--r--contrib/restricted/boost/boost/hana/is_subset.hpp84
-rw-r--r--contrib/restricted/boost/boost/hana/keys.hpp48
-rw-r--r--contrib/restricted/boost/boost/hana/lazy.hpp229
-rw-r--r--contrib/restricted/boost/boost/hana/length.hpp57
-rw-r--r--contrib/restricted/boost/boost/hana/less.hpp142
-rw-r--r--contrib/restricted/boost/boost/hana/less_equal.hpp75
-rw-r--r--contrib/restricted/boost/boost/hana/lexicographical_compare.hpp110
-rw-r--r--contrib/restricted/boost/boost/hana/lift.hpp54
-rw-r--r--contrib/restricted/boost/boost/hana/map.hpp577
-rw-r--r--contrib/restricted/boost/boost/hana/max.hpp58
-rw-r--r--contrib/restricted/boost/boost/hana/maximum.hpp97
-rw-r--r--contrib/restricted/boost/boost/hana/members.hpp65
-rw-r--r--contrib/restricted/boost/boost/hana/min.hpp58
-rw-r--r--contrib/restricted/boost/boost/hana/minimum.hpp97
-rw-r--r--contrib/restricted/boost/boost/hana/minus.hpp114
-rw-r--r--contrib/restricted/boost/boost/hana/mod.hpp107
-rw-r--r--contrib/restricted/boost/boost/hana/monadic_compose.hpp51
-rw-r--r--contrib/restricted/boost/boost/hana/monadic_fold_left.hpp132
-rw-r--r--contrib/restricted/boost/boost/hana/monadic_fold_right.hpp131
-rw-r--r--contrib/restricted/boost/boost/hana/mult.hpp107
-rw-r--r--contrib/restricted/boost/boost/hana/negate.hpp61
-rw-r--r--contrib/restricted/boost/boost/hana/none.hpp48
-rw-r--r--contrib/restricted/boost/boost/hana/none_of.hpp50
-rw-r--r--contrib/restricted/boost/boost/hana/not.hpp75
-rw-r--r--contrib/restricted/boost/boost/hana/not_equal.hpp59
-rw-r--r--contrib/restricted/boost/boost/hana/one.hpp79
-rw-r--r--contrib/restricted/boost/boost/hana/optional.hpp417
-rw-r--r--contrib/restricted/boost/boost/hana/or.hpp61
-rw-r--r--contrib/restricted/boost/boost/hana/ordering.hpp44
-rw-r--r--contrib/restricted/boost/boost/hana/pair.hpp207
-rw-r--r--contrib/restricted/boost/boost/hana/partition.hpp116
-rw-r--r--contrib/restricted/boost/boost/hana/permutations.hpp78
-rw-r--r--contrib/restricted/boost/boost/hana/plus.hpp109
-rw-r--r--contrib/restricted/boost/boost/hana/power.hpp65
-rw-r--r--contrib/restricted/boost/boost/hana/prefix.hpp52
-rw-r--r--contrib/restricted/boost/boost/hana/prepend.hpp74
-rw-r--r--contrib/restricted/boost/boost/hana/product.hpp58
-rw-r--r--contrib/restricted/boost/boost/hana/range.hpp294
-rw-r--r--contrib/restricted/boost/boost/hana/remove.hpp54
-rw-r--r--contrib/restricted/boost/boost/hana/remove_at.hpp86
-rw-r--r--contrib/restricted/boost/boost/hana/remove_if.hpp52
-rw-r--r--contrib/restricted/boost/boost/hana/remove_range.hpp100
-rw-r--r--contrib/restricted/boost/boost/hana/repeat.hpp58
-rw-r--r--contrib/restricted/boost/boost/hana/replace.hpp56
-rw-r--r--contrib/restricted/boost/boost/hana/replace_if.hpp54
-rw-r--r--contrib/restricted/boost/boost/hana/replicate.hpp74
-rw-r--r--contrib/restricted/boost/boost/hana/reverse.hpp61
-rw-r--r--contrib/restricted/boost/boost/hana/reverse_fold.hpp37
-rw-r--r--contrib/restricted/boost/boost/hana/scan_left.hpp133
-rw-r--r--contrib/restricted/boost/boost/hana/scan_right.hpp130
-rw-r--r--contrib/restricted/boost/boost/hana/second.hpp45
-rw-r--r--contrib/restricted/boost/boost/hana/set.hpp323
-rw-r--r--contrib/restricted/boost/boost/hana/size.hpp17
-rw-r--r--contrib/restricted/boost/boost/hana/slice.hpp99
-rw-r--r--contrib/restricted/boost/boost/hana/sort.hpp173
-rw-r--r--contrib/restricted/boost/boost/hana/span.hpp75
-rw-r--r--contrib/restricted/boost/boost/hana/string.hpp349
-rw-r--r--contrib/restricted/boost/boost/hana/suffix.hpp52
-rw-r--r--contrib/restricted/boost/boost/hana/sum.hpp58
-rw-r--r--contrib/restricted/boost/boost/hana/symmetric_difference.hpp46
-rw-r--r--contrib/restricted/boost/boost/hana/take_back.hpp76
-rw-r--r--contrib/restricted/boost/boost/hana/take_front.hpp75
-rw-r--r--contrib/restricted/boost/boost/hana/take_while.hpp55
-rw-r--r--contrib/restricted/boost/boost/hana/tap.hpp59
-rw-r--r--contrib/restricted/boost/boost/hana/then.hpp55
-rw-r--r--contrib/restricted/boost/boost/hana/traits.hpp213
-rw-r--r--contrib/restricted/boost/boost/hana/transform.hpp76
-rw-r--r--contrib/restricted/boost/boost/hana/tuple.hpp312
-rw-r--r--contrib/restricted/boost/boost/hana/type.hpp245
-rw-r--r--contrib/restricted/boost/boost/hana/unfold_left.hpp71
-rw-r--r--contrib/restricted/boost/boost/hana/unfold_right.hpp71
-rw-r--r--contrib/restricted/boost/boost/hana/union.hpp39
-rw-r--r--contrib/restricted/boost/boost/hana/unique.hpp75
-rw-r--r--contrib/restricted/boost/boost/hana/unpack.hpp141
-rw-r--r--contrib/restricted/boost/boost/hana/value.hpp56
-rw-r--r--contrib/restricted/boost/boost/hana/version.hpp53
-rw-r--r--contrib/restricted/boost/boost/hana/while.hpp117
-rw-r--r--contrib/restricted/boost/boost/hana/zero.hpp81
-rw-r--r--contrib/restricted/boost/boost/hana/zip.hpp50
-rw-r--r--contrib/restricted/boost/boost/hana/zip_shortest.hpp51
-rw-r--r--contrib/restricted/boost/boost/hana/zip_shortest_with.hpp64
-rw-r--r--contrib/restricted/boost/boost/hana/zip_with.hpp70
-rw-r--r--contrib/restricted/boost/hana/CONTRIBUTING.md60
-rw-r--r--contrib/restricted/boost/hana/LICENSE.md25
-rw-r--r--contrib/restricted/boost/hana/README.md202
453 files changed, 287 insertions, 42604 deletions
diff --git a/contrib/restricted/boost/boost/hana.hpp b/contrib/restricted/boost/boost/hana.hpp
deleted file mode 100644
index a8ad0413f1..0000000000
--- a/contrib/restricted/boost/boost/hana.hpp
+++ /dev/null
@@ -1,209 +0,0 @@
-/*!
-@file
-Includes all the library components except the adapters for external
-libraries.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_HPP
-#define BOOST_HANA_HPP
-
-//! @defgroup group-concepts Concepts
-//! Concepts provided by the library.
-
-//! @defgroup group-datatypes Data types
-//! General purpose data types provided by the library.
-
-//! @defgroup group-functional Functional
-//! General purpose function objects.
-
-//! @defgroup group-core Core
-//! Core utilities of the library.
-
-//! @defgroup group-experimental Experimental features
-//! Experimental features that may or may not make it into the library.
-//! These features should not expected to be stable.
-
-//! @defgroup group-ext External adapters
-//! Adapters for external libraries.
-
-//! @defgroup group-config Configuration options
-//! Configurable options to tweak the global behavior of the library.
-
-//! @defgroup group-assertions Assertions
-//! Macros to perform different kinds of assertions.
-
-//! @defgroup group-details Details
-//! Implementation details. Do not rely on anything here, even if it is
-//! documented.
-
-// Include config.hpp first, so that warning messages about compiler support
-// appear as soon as possible.
-#include <boost/hana/config.hpp>
-
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-namespace boost {
- //! Namespace containing everything in the library.
- namespace hana {
- //! Namespace containing C++14 user-defined literals provided by Hana.
- namespace literals {}
- }
-}
-#endif
-
-#include <boost/hana/accessors.hpp>
-#include <boost/hana/adapt_adt.hpp>
-#include <boost/hana/adapt_struct.hpp>
-#include <boost/hana/adjust.hpp>
-#include <boost/hana/adjust_if.hpp>
-#include <boost/hana/all.hpp>
-#include <boost/hana/all_of.hpp>
-#include <boost/hana/and.hpp>
-#include <boost/hana/any.hpp>
-#include <boost/hana/any_of.hpp>
-#include <boost/hana/ap.hpp>
-#include <boost/hana/append.hpp>
-#include <boost/hana/assert.hpp>
-#include <boost/hana/at.hpp>
-#include <boost/hana/at_key.hpp>
-#include <boost/hana/back.hpp>
-#include <boost/hana/basic_tuple.hpp>
-#include <boost/hana/bool.hpp>
-#include <boost/hana/cartesian_product.hpp>
-#include <boost/hana/chain.hpp>
-#include <boost/hana/comparing.hpp>
-#include <boost/hana/concat.hpp>
-#include <boost/hana/concept.hpp>
-#include <boost/hana/contains.hpp>
-#include <boost/hana/core.hpp>
-#include <boost/hana/count.hpp>
-#include <boost/hana/count_if.hpp>
-#include <boost/hana/cycle.hpp>
-#include <boost/hana/define_struct.hpp>
-#include <boost/hana/difference.hpp>
-#include <boost/hana/div.hpp>
-#include <boost/hana/drop_back.hpp>
-#include <boost/hana/drop_front.hpp>
-#include <boost/hana/drop_front_exactly.hpp>
-#include <boost/hana/drop_while.hpp>
-#include <boost/hana/duplicate.hpp>
-#include <boost/hana/empty.hpp>
-#include <boost/hana/equal.hpp>
-#include <boost/hana/erase_key.hpp>
-#include <boost/hana/eval.hpp>
-#include <boost/hana/eval_if.hpp>
-#include <boost/hana/extend.hpp>
-#include <boost/hana/extract.hpp>
-#include <boost/hana/fill.hpp>
-#include <boost/hana/filter.hpp>
-#include <boost/hana/find.hpp>
-#include <boost/hana/find_if.hpp>
-#include <boost/hana/first.hpp>
-#include <boost/hana/flatten.hpp>
-#include <boost/hana/fold.hpp>
-#include <boost/hana/fold_left.hpp>
-#include <boost/hana/fold_right.hpp>
-#include <boost/hana/for_each.hpp>
-#include <boost/hana/front.hpp>
-#include <boost/hana/functional.hpp>
-#include <boost/hana/fuse.hpp>
-#include <boost/hana/greater.hpp>
-#include <boost/hana/greater_equal.hpp>
-#include <boost/hana/group.hpp>
-#include <boost/hana/index_if.hpp>
-#include <boost/hana/if.hpp>
-#include <boost/hana/insert.hpp>
-#include <boost/hana/insert_range.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/intersection.hpp>
-#include <boost/hana/intersperse.hpp>
-#include <boost/hana/is_disjoint.hpp>
-#include <boost/hana/is_empty.hpp>
-#include <boost/hana/is_subset.hpp>
-#include <boost/hana/keys.hpp>
-#include <boost/hana/lazy.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/less.hpp>
-#include <boost/hana/less_equal.hpp>
-#include <boost/hana/lexicographical_compare.hpp>
-#include <boost/hana/lift.hpp>
-#include <boost/hana/map.hpp>
-#include <boost/hana/max.hpp>
-#include <boost/hana/maximum.hpp>
-#include <boost/hana/members.hpp>
-#include <boost/hana/min.hpp>
-#include <boost/hana/minimum.hpp>
-#include <boost/hana/minus.hpp>
-#include <boost/hana/mod.hpp>
-#include <boost/hana/monadic_compose.hpp>
-#include <boost/hana/monadic_fold_left.hpp>
-#include <boost/hana/monadic_fold_right.hpp>
-#include <boost/hana/mult.hpp>
-#include <boost/hana/negate.hpp>
-#include <boost/hana/none.hpp>
-#include <boost/hana/none_of.hpp>
-#include <boost/hana/not.hpp>
-#include <boost/hana/not_equal.hpp>
-#include <boost/hana/one.hpp>
-#include <boost/hana/optional.hpp>
-#include <boost/hana/or.hpp>
-#include <boost/hana/ordering.hpp>
-#include <boost/hana/pair.hpp>
-#include <boost/hana/partition.hpp>
-#include <boost/hana/permutations.hpp>
-#include <boost/hana/plus.hpp>
-#include <boost/hana/power.hpp>
-#include <boost/hana/prefix.hpp>
-#include <boost/hana/prepend.hpp>
-#include <boost/hana/product.hpp>
-#include <boost/hana/range.hpp>
-#include <boost/hana/remove.hpp>
-#include <boost/hana/remove_at.hpp>
-#include <boost/hana/remove_if.hpp>
-#include <boost/hana/remove_range.hpp>
-#include <boost/hana/repeat.hpp>
-#include <boost/hana/replace.hpp>
-#include <boost/hana/replace_if.hpp>
-#include <boost/hana/replicate.hpp>
-#include <boost/hana/reverse.hpp>
-#include <boost/hana/reverse_fold.hpp>
-#include <boost/hana/scan_left.hpp>
-#include <boost/hana/scan_right.hpp>
-#include <boost/hana/second.hpp>
-#include <boost/hana/set.hpp>
-#include <boost/hana/size.hpp>
-#include <boost/hana/slice.hpp>
-#include <boost/hana/sort.hpp>
-#include <boost/hana/span.hpp>
-#include <boost/hana/string.hpp>
-#include <boost/hana/suffix.hpp>
-#include <boost/hana/sum.hpp>
-#include <boost/hana/symmetric_difference.hpp>
-#include <boost/hana/take_back.hpp>
-#include <boost/hana/take_front.hpp>
-#include <boost/hana/take_while.hpp>
-#include <boost/hana/tap.hpp>
-#include <boost/hana/then.hpp>
-#include <boost/hana/traits.hpp>
-#include <boost/hana/transform.hpp>
-#include <boost/hana/tuple.hpp>
-#include <boost/hana/type.hpp>
-#include <boost/hana/unfold_left.hpp>
-#include <boost/hana/unfold_right.hpp>
-#include <boost/hana/union.hpp>
-#include <boost/hana/unique.hpp>
-#include <boost/hana/unpack.hpp>
-#include <boost/hana/value.hpp>
-#include <boost/hana/version.hpp>
-#include <boost/hana/while.hpp>
-#include <boost/hana/zero.hpp>
-#include <boost/hana/zip.hpp>
-#include <boost/hana/zip_shortest.hpp>
-#include <boost/hana/zip_shortest_with.hpp>
-#include <boost/hana/zip_with.hpp>
-
-#endif // !BOOST_HANA_HPP
diff --git a/contrib/restricted/boost/boost/hana/accessors.hpp b/contrib/restricted/boost/boost/hana/accessors.hpp
deleted file mode 100644
index 28204b6e31..0000000000
--- a/contrib/restricted/boost/boost/hana/accessors.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*!
-@file
-Defines `boost::hana::accessors`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ACCESSORS_HPP
-#define BOOST_HANA_ACCESSORS_HPP
-
-#include <boost/hana/fwd/accessors.hpp>
-
-#include <boost/hana/concept/struct.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename S>
- struct accessors_t {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Struct<S>::value,
- "hana::accessors<S> requires 'S' to be a Struct");
- #endif
-
- constexpr decltype(auto) operator()() const {
- using Accessors = BOOST_HANA_DISPATCH_IF(accessors_impl<S>,
- hana::Struct<S>::value
- );
-
- return Accessors::apply();
- }
- };
-
- template <typename S, bool condition>
- struct accessors_impl<S, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- namespace struct_detail {
- template <typename ...>
- struct is_valid { static constexpr bool value = true; };
- }
-
- template <typename S>
- struct accessors_impl<S, when<
- struct_detail::is_valid<typename S::hana_accessors_impl>::value
- >>
- : S::hana_accessors_impl
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_ACCESSORS_HPP
diff --git a/contrib/restricted/boost/boost/hana/adapt_adt.hpp b/contrib/restricted/boost/boost/hana/adapt_adt.hpp
deleted file mode 100644
index 0bf73467ac..0000000000
--- a/contrib/restricted/boost/boost/hana/adapt_adt.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-/*!
-@file
-Defines the `BOOST_HANA_ADAPT_ADT` macro.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ADAPT_ADT_HPP
-#define BOOST_HANA_ADAPT_ADT_HPP
-
-#include <boost/hana/fwd/adapt_adt.hpp>
-
-#include <boost/hana/detail/struct_macros.hpp>
-
-#endif // !BOOST_HANA_ADAPT_ADT_HPP
diff --git a/contrib/restricted/boost/boost/hana/adapt_struct.hpp b/contrib/restricted/boost/boost/hana/adapt_struct.hpp
deleted file mode 100644
index c156f44d40..0000000000
--- a/contrib/restricted/boost/boost/hana/adapt_struct.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-/*!
-@file
-Defines the `BOOST_HANA_ADAPT_STRUCT` macro.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ADAPT_STRUCT_HPP
-#define BOOST_HANA_ADAPT_STRUCT_HPP
-
-#include <boost/hana/fwd/adapt_struct.hpp>
-
-#include <boost/hana/detail/struct_macros.hpp>
-
-#endif // !BOOST_HANA_ADAPT_STRUCT_HPP
diff --git a/contrib/restricted/boost/boost/hana/adjust.hpp b/contrib/restricted/boost/boost/hana/adjust.hpp
deleted file mode 100644
index e8bab2cac3..0000000000
--- a/contrib/restricted/boost/boost/hana/adjust.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*!
-@file
-Defines `boost::hana::adjust`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ADJUST_HPP
-#define BOOST_HANA_ADJUST_HPP
-
-#include <boost/hana/fwd/adjust.hpp>
-
-#include <boost/hana/adjust_if.hpp>
-#include <boost/hana/concept/functor.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/equal.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Value, typename F>
- constexpr auto adjust_t::operator()(Xs&& xs, Value&& value, F&& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using Adjust = BOOST_HANA_DISPATCH_IF(adjust_impl<S>,
- hana::Functor<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Functor<S>::value,
- "hana::adjust(xs, value, f) requires 'xs' to be a Functor");
- #endif
-
- return Adjust::apply(static_cast<Xs&&>(xs),
- static_cast<Value&&>(value),
- static_cast<F&&>(f));
- }
- //! @endcond
-
- template <typename Fun, bool condition>
- struct adjust_impl<Fun, when<condition>> : default_ {
- template <typename Xs, typename Value, typename F>
- static constexpr auto apply(Xs&& xs, Value&& value, F&& f) {
- return hana::adjust_if(
- static_cast<Xs&&>(xs),
- hana::equal.to(static_cast<Value&&>(value)),
- static_cast<F&&>(f)
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_ADJUST_HPP
diff --git a/contrib/restricted/boost/boost/hana/adjust_if.hpp b/contrib/restricted/boost/boost/hana/adjust_if.hpp
deleted file mode 100644
index 8669009a9a..0000000000
--- a/contrib/restricted/boost/boost/hana/adjust_if.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*!
-@file
-Defines `boost::hana::adjust_if`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ADJUST_IF_HPP
-#define BOOST_HANA_ADJUST_IF_HPP
-
-#include <boost/hana/fwd/adjust_if.hpp>
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/functor.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/if.hpp>
-#include <boost/hana/transform.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Pred, typename F>
- constexpr auto adjust_if_t::operator()(Xs&& xs, Pred const& pred, F const& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using AdjustIf = BOOST_HANA_DISPATCH_IF(adjust_if_impl<S>,
- hana::Functor<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Functor<S>::value,
- "hana::adjust_if(xs, pred, f) requires 'xs' to be a Functor");
- #endif
-
- return AdjustIf::apply(static_cast<Xs&&>(xs), pred, f);
- }
- //! @endcond
-
- namespace detail {
- template <typename Pred, typename F>
- struct apply_if {
- Pred const& pred;
- F const& f;
-
- template <typename X>
- constexpr decltype(auto) helper(bool cond, X&& x) const
- { return cond ? f(static_cast<X&&>(x)) : static_cast<X&&>(x); }
-
- template <typename X>
- constexpr decltype(auto) helper(hana::true_, X&& x) const
- { return f(static_cast<X&&>(x)); }
-
- template <typename X>
- constexpr decltype(auto) helper(hana::false_, X&& x) const
- { return static_cast<X&&>(x); }
-
-
- template <typename X>
- constexpr decltype(auto) operator()(X&& x) const {
- auto cond = hana::if_(pred(x), hana::true_c, hana::false_c);
- return this->helper(cond, static_cast<X&&>(x));
- }
- };
- }
-
- template <typename Fun, bool condition>
- struct adjust_if_impl<Fun, when<condition>> : default_ {
- template <typename Xs, typename Pred, typename F>
- static constexpr auto apply(Xs&& xs, Pred const& pred, F const& f) {
- return hana::transform(static_cast<Xs&&>(xs),
- detail::apply_if<Pred, F>{pred, f});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_ADJUST_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/all.hpp b/contrib/restricted/boost/boost/hana/all.hpp
deleted file mode 100644
index bc952c986f..0000000000
--- a/contrib/restricted/boost/boost/hana/all.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*!
-@file
-Defines `boost::hana::all`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ALL_HPP
-#define BOOST_HANA_ALL_HPP
-
-#include <boost/hana/fwd/all.hpp>
-
-#include <boost/hana/all_of.hpp>
-#include <boost/hana/concept/searchable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/functional/id.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs>
- constexpr auto all_t::operator()(Xs&& xs) const {
- using S = typename hana::tag_of<Xs>::type;
- using All = BOOST_HANA_DISPATCH_IF(all_impl<S>,
- hana::Searchable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Searchable<S>::value,
- "hana::all(xs) requires 'xs' to be a Searchable");
- #endif
-
- return All::apply(static_cast<Xs&&>(xs));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct all_impl<S, when<condition>> : default_ {
- template <typename Xs>
- static constexpr auto apply(Xs&& xs)
- { return hana::all_of(static_cast<Xs&&>(xs), hana::id); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_ALL_HPP
diff --git a/contrib/restricted/boost/boost/hana/all_of.hpp b/contrib/restricted/boost/boost/hana/all_of.hpp
deleted file mode 100644
index 5aff4a01e7..0000000000
--- a/contrib/restricted/boost/boost/hana/all_of.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*!
-@file
-Defines `boost::hana::all_of`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ALL_OF_HPP
-#define BOOST_HANA_ALL_OF_HPP
-
-#include <boost/hana/fwd/all_of.hpp>
-
-#include <boost/hana/any_of.hpp>
-#include <boost/hana/concept/searchable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/functional/compose.hpp>
-#include <boost/hana/not.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Pred>
- constexpr auto all_of_t::operator()(Xs&& xs, Pred&& pred) const {
- using S = typename hana::tag_of<Xs>::type;
- using AllOf = BOOST_HANA_DISPATCH_IF(all_of_impl<S>,
- hana::Searchable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Searchable<S>::value,
- "hana::all_of(xs, pred) requires 'xs' to be a Searchable");
- #endif
-
- return AllOf::apply(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct all_of_impl<S, when<condition>> : default_ {
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&& pred) {
- return hana::not_(hana::any_of(static_cast<Xs&&>(xs),
- hana::compose(hana::not_, static_cast<Pred&&>(pred))));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_ALL_OF_HPP
diff --git a/contrib/restricted/boost/boost/hana/and.hpp b/contrib/restricted/boost/boost/hana/and.hpp
deleted file mode 100644
index df460d32a6..0000000000
--- a/contrib/restricted/boost/boost/hana/and.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*!
-@file
-Defines `boost::hana::and_`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_AND_HPP
-#define BOOST_HANA_AND_HPP
-
-#include <boost/hana/fwd/and.hpp>
-
-#include <boost/hana/concept/logical.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/variadic/foldl1.hpp>
-#include <boost/hana/if.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X, typename Y>
- constexpr decltype(auto) and_t::operator()(X&& x, Y&& y) const {
- using Bool = typename hana::tag_of<X>::type;
- using And = BOOST_HANA_DISPATCH_IF(and_impl<Bool>,
- hana::Logical<Bool>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Logical<Bool>::value,
- "hana::and_(x, y) requires 'x' to be a Logical");
- #endif
-
- return And::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
-
- template <typename X, typename ...Y>
- constexpr decltype(auto) and_t::operator()(X&& x, Y&& ...y) const {
- return detail::variadic::foldl1(
- *this,
- static_cast<X&&>(x),
- static_cast<Y&&>(y)...
- );
- }
- //! @endcond
-
- template <typename L, bool condition>
- struct and_impl<L, when<condition>> : default_ {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- return hana::if_(x, static_cast<Y&&>(y), x);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_AND_HPP
diff --git a/contrib/restricted/boost/boost/hana/any.hpp b/contrib/restricted/boost/boost/hana/any.hpp
deleted file mode 100644
index 9141a758df..0000000000
--- a/contrib/restricted/boost/boost/hana/any.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*!
-@file
-Defines `boost::hana::any`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ANY_HPP
-#define BOOST_HANA_ANY_HPP
-
-#include <boost/hana/fwd/any.hpp>
-
-#include <boost/hana/any_of.hpp>
-#include <boost/hana/concept/searchable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/functional/id.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs>
- constexpr auto any_t::operator()(Xs&& xs) const {
- using S = typename hana::tag_of<Xs>::type;
- using Any = BOOST_HANA_DISPATCH_IF(any_impl<S>,
- hana::Searchable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Searchable<S>::value,
- "hana::any(xs) requires 'xs' to be a Searchable");
- #endif
-
- return Any::apply(static_cast<Xs&&>(xs));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct any_impl<S, when<condition>> : default_ {
- template <typename Xs>
- static constexpr auto apply(Xs&& xs)
- { return hana::any_of(static_cast<Xs&&>(xs), hana::id); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_ANY_HPP
diff --git a/contrib/restricted/boost/boost/hana/any_of.hpp b/contrib/restricted/boost/boost/hana/any_of.hpp
deleted file mode 100644
index 59c130e54d..0000000000
--- a/contrib/restricted/boost/boost/hana/any_of.hpp
+++ /dev/null
@@ -1,192 +0,0 @@
-/*!
-@file
-Defines `boost::hana::any_of`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ANY_OF_HPP
-#define BOOST_HANA_ANY_OF_HPP
-
-#include <boost/hana/fwd/any_of.hpp>
-
-#include <boost/hana/accessors.hpp>
-#include <boost/hana/at.hpp>
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/searchable.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/concept/struct.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/drop_front.hpp>
-#include <boost/hana/first.hpp>
-#include <boost/hana/front.hpp>
-#include <boost/hana/functional/compose.hpp>
-#include <boost/hana/if.hpp>
-#include <boost/hana/is_empty.hpp>
-#include <boost/hana/length.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Pred>
- constexpr auto any_of_t::operator()(Xs&& xs, Pred&& pred) const {
- using S = typename hana::tag_of<Xs>::type;
- using AnyOf = BOOST_HANA_DISPATCH_IF(any_of_impl<S>,
- hana::Searchable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Searchable<S>::value,
- "hana::any_of(xs, pred) requires 'xs' to be a Searchable");
- #endif
-
- return AnyOf::apply(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct any_of_impl<S, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- template <typename S>
- struct any_of_impl<S, when<Sequence<S>::value>> {
- //! @cond
- template <std::size_t k, std::size_t Len>
- struct any_of_helper {
- template <typename Xs, typename Pred>
- static constexpr auto apply(bool prev_cond, Xs&& xs, Pred&& pred) {
- return prev_cond ? hana::true_c
- : any_of_impl::any_of_helper<k + 1, Len>::apply(
- hana::if_(pred(hana::at_c<k>(xs)), hana::true_c, hana::false_c),
- static_cast<Xs&&>(xs),
- static_cast<Pred&&>(pred)
- );
- }
-
- template <typename Xs, typename Pred>
- static constexpr auto apply(hana::true_, Xs&&, Pred&&)
- { return hana::true_c; }
-
- template <typename Xs, typename Pred>
- static constexpr auto apply(hana::false_, Xs&& xs, Pred&& pred) {
- auto cond = hana::if_(pred(hana::at_c<k>(xs)), hana::true_c,
- hana::false_c);
- return any_of_impl::any_of_helper<k + 1, Len>::apply(cond,
- static_cast<Xs&&>(xs),
- static_cast<Pred&&>(pred));
- }
- };
-
- template <std::size_t Len>
- struct any_of_helper<Len, Len> {
- template <typename Cond, typename Xs, typename Pred>
- static constexpr auto apply(Cond cond, Xs&&, Pred&&)
- { return cond; }
- };
-
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&& pred) {
- constexpr std::size_t len = decltype(hana::length(xs))::value;
- return any_of_impl::any_of_helper<0, len>::apply(hana::false_c,
- static_cast<Xs&&>(xs),
- static_cast<Pred&&>(pred));
- }
- //! @endcond
- };
-
- template <typename It>
- struct any_of_impl<It, when<
- hana::Iterable<It>::value &&
- !Sequence<It>::value
- >> {
- template <typename Xs, typename Pred>
- static constexpr auto lazy_any_of_helper(hana::false_, bool prev_cond, Xs&& xs, Pred&& pred) {
- decltype(auto) tail = hana::drop_front(static_cast<Xs&&>(xs));
- constexpr bool done = decltype(hana::is_empty(tail))::value;
- return prev_cond ? hana::true_c
- : lazy_any_of_helper(hana::bool_<done>{},
- hana::if_(pred(hana::front(xs)), hana::true_{}, hana::false_{}),
- static_cast<decltype(tail)&&>(tail),
- static_cast<Pred&&>(pred)
- );
- }
-
- template <typename Xs, typename Pred>
- static constexpr auto lazy_any_of_helper(hana::false_, hana::true_, Xs&&, Pred&&)
- { return hana::true_c; }
-
- template <typename Xs, typename Pred>
- static constexpr auto lazy_any_of_helper(hana::false_, hana::false_, Xs&& xs, Pred&& pred) {
- constexpr bool done = decltype(hana::is_empty(hana::drop_front(xs)))::value;
- return lazy_any_of_helper(hana::bool_c<done>,
- hana::if_(pred(hana::front(xs)), hana::true_c, hana::false_c),
- hana::drop_front(static_cast<Xs&&>(xs)),
- static_cast<Pred&&>(pred)
- );
- }
-
- template <typename Cond, typename Xs, typename Pred>
- static constexpr auto lazy_any_of_helper(hana::true_, Cond cond, Xs&&, Pred&&)
- { return cond; }
-
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&& pred) {
- constexpr bool done = decltype(hana::is_empty(xs))::value;
- return lazy_any_of_helper(hana::bool_c<done>, hana::false_c,
- static_cast<Xs&&>(xs),
- static_cast<Pred&&>(pred));
- }
- };
-
- template <typename T, std::size_t N>
- struct any_of_impl<T[N]> {
- template <typename Xs, typename Pred>
- static constexpr bool any_of_helper(bool cond, Xs&& xs, Pred&& pred) {
- if (cond) return true;
- for (std::size_t i = 1; i < N; ++i)
- if (pred(static_cast<Xs&&>(xs)[i]))
- return true;
- return false;
- }
-
- // Since an array contains homogeneous data, if the predicate returns
- // a compile-time logical at any index, it must do so at every index
- // (because the type of the elements won't change)! In this case, we
- // then only need to evaluate the predicate on the first element.
- template <typename Xs, typename Pred>
- static constexpr auto
- any_of_helper(hana::true_, Xs&& /*xs*/, Pred&&)
- { return hana::true_c; }
-
- template <typename Xs, typename Pred>
- static constexpr auto
- any_of_helper(hana::false_, Xs&&, Pred&&)
- { return hana::false_c; }
-
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&& pred) {
- auto cond = hana::if_(pred(static_cast<Xs&&>(xs)[0]), hana::true_c,
- hana::false_c);
- return any_of_helper(cond, static_cast<Xs&&>(xs),
- static_cast<Pred&&>(pred));
- }
- };
-
- template <typename S>
- struct any_of_impl<S, when<hana::Struct<S>::value>> {
- template <typename X, typename Pred>
- static constexpr decltype(auto) apply(X const&, Pred&& pred) {
- return hana::any_of(hana::accessors<S>(),
- hana::compose(static_cast<Pred&&>(pred), hana::first));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_ANY_OF_HPP
diff --git a/contrib/restricted/boost/boost/hana/ap.hpp b/contrib/restricted/boost/boost/hana/ap.hpp
deleted file mode 100644
index a96f7d1aa7..0000000000
--- a/contrib/restricted/boost/boost/hana/ap.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*!
-@file
-Defines `boost::hana::ap`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_AP_HPP
-#define BOOST_HANA_AP_HPP
-
-#include <boost/hana/fwd/ap.hpp>
-
-#include <boost/hana/chain.hpp>
-#include <boost/hana/concept/applicative.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/variadic/foldl1.hpp>
-#include <boost/hana/functional/curry.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/transform.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename A, bool condition>
- struct ap_impl<A, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...args) = delete;
- };
-
- //! @cond
- template <typename F, typename X>
- constexpr decltype(auto) ap_t::operator()(F&& f, X&& x) const {
- using Function = typename hana::tag_of<F>::type;
- using Value = typename hana::tag_of<X>::type;
- using Ap = BOOST_HANA_DISPATCH_IF(ap_impl<Function>,
- hana::Applicative<Function>::value && hana::Applicative<Value>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Applicative<Function>::value,
- "hana::ap(f, x) requires 'f' to be an Applicative");
-
- static_assert(hana::Applicative<Value>::value,
- "hana::ap(f, x) requires 'x' to be an Applicative");
- #endif
-
- return Ap::apply(static_cast<F&&>(f), static_cast<X&&>(x));
- }
-
- template <typename F, typename ...Xs>
- constexpr decltype(auto) ap_t::operator()(F&& f, Xs&& ...xs) const {
- static_assert(sizeof...(xs) >= 1,
- "hana::ap must be called with at least two arguments");
-
- return detail::variadic::foldl1(
- *this,
- hana::transform(static_cast<F&&>(f), hana::curry<sizeof...(xs)>),
- static_cast<Xs&&>(xs)...
- );
- }
- //! @endcond
-
- template <typename S>
- struct ap_impl<S, when<Sequence<S>::value>> {
- template <typename F, typename X>
- static constexpr decltype(auto) apply(F&& f, X&& x) {
- return hana::chain(
- static_cast<F&&>(f),
- hana::partial(hana::transform, static_cast<X&&>(x))
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_AP_HPP
diff --git a/contrib/restricted/boost/boost/hana/append.hpp b/contrib/restricted/boost/boost/hana/append.hpp
deleted file mode 100644
index 951f24d35e..0000000000
--- a/contrib/restricted/boost/boost/hana/append.hpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/*!
-@file
-Defines `boost::hana::append`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_APPEND_HPP
-#define BOOST_HANA_APPEND_HPP
-
-#include <boost/hana/fwd/append.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concat.hpp>
-#include <boost/hana/concept/monad_plus.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/lift.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename X>
- constexpr auto append_t::operator()(Xs&& xs, X&& x) const {
- using M = typename hana::tag_of<Xs>::type;
- using Append = BOOST_HANA_DISPATCH_IF(append_impl<M>,
- hana::MonadPlus<M>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::MonadPlus<M>::value,
- "hana::append(xs, x) requires 'xs' to be a MonadPlus");
- #endif
-
- return Append::apply(static_cast<Xs&&>(xs), static_cast<X&&>(x));
- }
- //! @endcond
-
- template <typename M, bool condition>
- struct append_impl<M, when<condition>> : default_ {
- template <typename Xs, typename X>
- static constexpr auto apply(Xs&& xs, X&& x) {
- return hana::concat(static_cast<Xs&&>(xs),
- hana::lift<M>(static_cast<X&&>(x)));
- }
- };
-
- template <typename S>
- struct append_impl<S, when<Sequence<S>::value>> {
- template <typename Xs, typename X, std::size_t ...i>
- static constexpr auto append_helper(Xs&& xs, X&& x, std::index_sequence<i...>) {
- return hana::make<S>(
- hana::at_c<i>(static_cast<Xs&&>(xs))..., static_cast<X&&>(x)
- );
- }
-
- template <typename Xs, typename X>
- static constexpr auto apply(Xs&& xs, X&& x) {
- constexpr std::size_t N = decltype(hana::length(xs))::value;
- return append_helper(static_cast<Xs&&>(xs), static_cast<X&&>(x),
- std::make_index_sequence<N>{});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_APPEND_HPP
diff --git a/contrib/restricted/boost/boost/hana/assert.hpp b/contrib/restricted/boost/boost/hana/assert.hpp
deleted file mode 100644
index 9603107699..0000000000
--- a/contrib/restricted/boost/boost/hana/assert.hpp
+++ /dev/null
@@ -1,327 +0,0 @@
-/*!
-@file
-Defines macros to perform different kinds of assertions.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ASSERT_HPP
-#define BOOST_HANA_ASSERT_HPP
-
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/preprocessor.hpp>
-#include <boost/hana/if.hpp>
-#include <boost/hana/value.hpp>
-
-#include <cstdio>
-#include <cstdlib>
-
-
-#if defined(BOOST_HANA_DOXYGEN_INVOKED)
- //! @ingroup group-assertions
- //! Expands to a runtime assertion.
- //!
- //! Given a condition known at runtime, this macro expands to a runtime
- //! assertion similar to the `assert` macro. The provided condition must
- //! be explicitly convertible to a `bool`, and it must not be a model of
- //! the `Constant` concept. If the condition is a `Constant`, a static
- //! assertion will be triggered, asking you to use the
- //! `BOOST_HANA_CONSTANT_ASSERT` macro instead.
- //!
- //! @note
- //! This macro may only be used at function scope.
-# define BOOST_HANA_RUNTIME_ASSERT(condition) unspecified
-
- //! @ingroup group-assertions
- //! Equivalent to `BOOST_HANA_RUNTIME_ASSERT`, but allows providing a
- //! custom failure message.
- //!
- //! @warning
- //! Conditions that contain multiple comma-separated elements should be
- //! parenthesized.
-# define BOOST_HANA_RUNTIME_ASSERT_MSG(condition, message) unspecified
-
- //! @ingroup group-assertions
- //! Compile-time assertion for `Constant`s.
- //!
- //! Given a condition known at compile-time in the form of a `Constant`,
- //! this macro expands to a compile-time assertion similar to a `static_assert`.
- //! The provided condition must be a model of the `Constant` concept, in
- //! which case its value is retrieved using `hana::value` and then converted
- //! to a `bool`. If the condition is not a `Constant`, a static assertion
- //! will be triggered, asking you to use the `BOOST_HANA_RUNTIME_ASSERT`
- //! macro instead.
- //!
- //! This macro may be used at global/namespace scope and function scope
- //! only; it may not be used at class scope. Note that the condition may
- //! never be evaluated at runtime. Hence, any side effect may not take
- //! place (but you shouldn't rely on side effects inside assertions anyway).
-# define BOOST_HANA_CONSTANT_ASSERT(condition) unspecified
-
- //! @ingroup group-assertions
- //! Equivalent to `BOOST_HANA_CONSTANT_ASSERT`, but allows providing a
- //! custom failure message.
- //!
- //! @warning
- //! Conditions that contain multiple comma-separated elements should be
- //! parenthesized.
-# define BOOST_HANA_CONSTANT_ASSERT_MSG(condition, message) unspecified
-
- //! @ingroup group-assertions
- //! Expands to the strongest form of assertion possible for the given
- //! condition.
- //!
- //! Given a condition, `BOOST_HANA_ASSERT` expands either to a compile-time
- //! or to a runtime assertion, depending on whether the value of the
- //! condition is known at compile-time or at runtime. Compile-time
- //! assertions are always preferred over runtime assertions. If the
- //! condition is a model of the `Constant` concept, its value (retrievable
- //! with `hana::value`) is assumed to be explicitly convertible to `bool`,
- //! and a compile-time assertion is performed on it. Otherwise, the
- //! condition itself is assumed to be explicitly convertible to `bool`,
- //! and a runtime assertion is performed on it.
- //!
- //! If the assertion can be carried out at compile-time, the condition
- //! is not guaranteed to be evaluated at runtime at all (but it may).
- //! Hence, in general, you shouldn't rely on side effects that take place
- //! inside an assertion.
- //!
- //! @note
- //! This macro may only be used at function scope.
-# define BOOST_HANA_ASSERT(condition) unspecified
-
- //! @ingroup group-assertions
- //! Equivalent to `BOOST_HANA_ASSERT`, but allows providing a custom
- //! failure message.
- //!
- //! @warning
- //! Conditions that contain multiple comma-separated elements should be
- //! parenthesized.
-# define BOOST_HANA_ASSERT_MSG(condition, message) unspecified
-
- //! @ingroup group-assertions
- //! Expands to a static assertion or a runtime assertion, depending on
- //! whether `constexpr` lambdas are supported.
- //!
- //! This macro is used to assert on a condition that would be a constant
- //! expression if constexpr lambdas were supported. Right now, constexpr
- //! lambdas are not supported, and this is always a runtime assertion.
- //! Specifically, this is equivalent to `BOOST_HANA_RUNTIME_ASSERT`.
-# define BOOST_HANA_CONSTEXPR_ASSERT(condition) unspecified
-
- //! @ingroup group-assertions
- //! Equivalent to `BOOST_HANA_CONSTEXPR_ASSERT`, but allows providing a
- //! custom failure message.
-# define BOOST_HANA_CONSTEXPR_ASSERT_MSG(condition, message) unspecified
-
-#elif defined(BOOST_HANA_CONFIG_DISABLE_ASSERTIONS)
-
-# define BOOST_HANA_CONSTANT_ASSERT(...) /* nothing */
-# define BOOST_HANA_CONSTANT_ASSERT_MSG(condition, message) /* nothing */
-
-# define BOOST_HANA_RUNTIME_ASSERT(...) /* nothing */
-# define BOOST_HANA_RUNTIME_ASSERT_MSG(condition, message) /* nothing */
-
-# define BOOST_HANA_ASSERT(...) /* nothing */
-# define BOOST_HANA_ASSERT_MSG(condition, message) /* nothing */
-
-# define BOOST_HANA_CONSTEXPR_ASSERT(...) /* nothing */
-# define BOOST_HANA_CONSTEXPR_ASSERT_MSG(condition, message) /* nothing */
-
-#else
-
-//////////////////////////////////////////////////////////////////////////////
-// BOOST_HANA_RUNTIME_ASSERT and BOOST_HANA_RUNTIME_ASSERT_MSG
-//////////////////////////////////////////////////////////////////////////////
-# define BOOST_HANA_RUNTIME_ASSERT_MSG(condition, message) \
- BOOST_HANA_RUNTIME_CHECK_MSG(condition, message) \
-/**/
-
-# define BOOST_HANA_RUNTIME_ASSERT(...) \
- BOOST_HANA_RUNTIME_CHECK(__VA_ARGS__) \
-/**/
-
-//////////////////////////////////////////////////////////////////////////////
-// BOOST_HANA_CONSTANT_ASSERT and BOOST_HANA_CONSTANT_ASSERT_MSG
-//////////////////////////////////////////////////////////////////////////////
-# define BOOST_HANA_CONSTANT_ASSERT_MSG(condition, message) \
- BOOST_HANA_CONSTANT_CHECK_MSG(condition, message) \
-/**/
-
-# define BOOST_HANA_CONSTANT_ASSERT(...) \
- BOOST_HANA_CONSTANT_CHECK(__VA_ARGS__) \
-/**/
-
-//////////////////////////////////////////////////////////////////////////////
-// BOOST_HANA_ASSERT and BOOST_HANA_ASSERT_MSG
-//////////////////////////////////////////////////////////////////////////////
-# define BOOST_HANA_ASSERT_MSG(condition, message) \
- BOOST_HANA_CHECK_MSG(condition, message) \
-/**/
-
-# define BOOST_HANA_ASSERT(...) \
- BOOST_HANA_CHECK(__VA_ARGS__) \
-/**/
-
-//////////////////////////////////////////////////////////////////////////////
-// BOOST_HANA_CONSTEXPR_ASSERT and BOOST_HANA_CONSTEXPR_ASSERT_MSG
-//////////////////////////////////////////////////////////////////////////////
-# define BOOST_HANA_CONSTEXPR_ASSERT_MSG(condition, message) \
- BOOST_HANA_CONSTEXPR_CHECK_MSG(condition, message) \
-/**/
-
-# define BOOST_HANA_CONSTEXPR_ASSERT(...) \
- BOOST_HANA_CONSTEXPR_CHECK(__VA_ARGS__) \
-/**/
-
-#endif
-
-//////////////////////////////////////////////////////////////////////////////
-// BOOST_HANA_RUNTIME_CHECK and BOOST_HANA_RUNTIME_CHECK_MSG
-//////////////////////////////////////////////////////////////////////////////
-
-//! @ingroup group-assertions
-//! Equivalent to `BOOST_HANA_RUNTIME_ASSERT_MSG`, but not influenced by the
-//! `BOOST_HANA_CONFIG_DISABLE_ASSERTIONS` config macro. For internal use only.
-# define BOOST_HANA_RUNTIME_CHECK_MSG(condition, message) \
- do { \
- auto __hana_tmp = condition; \
- static_assert(!::boost::hana::Constant<decltype(__hana_tmp)>::value,\
- "the expression (" # condition ") yields a Constant; " \
- "use BOOST_HANA_CONSTANT_ASSERT instead"); \
- \
- if (!static_cast<bool>(__hana_tmp)) { \
- ::std::fprintf(stderr, "Assertion failed: " \
- "(%s), function %s, file %s, line %i.\n", \
- message, __func__, __FILE__, __LINE__); \
- ::std::abort(); \
- } \
- } while (false); \
- static_assert(true, "force trailing semicolon") \
-/**/
-
-//! @ingroup group-assertions
-//! Equivalent to `BOOST_HANA_RUNTIME_ASSERT`, but not influenced by the
-//! `BOOST_HANA_CONFIG_DISABLE_ASSERTIONS` config macro. For internal use only.
-# define BOOST_HANA_RUNTIME_CHECK(...) \
- BOOST_HANA_RUNTIME_CHECK_MSG( \
- (__VA_ARGS__), \
- BOOST_HANA_PP_STRINGIZE(__VA_ARGS__) \
- ) \
-/**/
-
-//////////////////////////////////////////////////////////////////////////////
-// BOOST_HANA_CONSTANT_CHECK and BOOST_HANA_CONSTANT_CHECK_MSG
-//////////////////////////////////////////////////////////////////////////////
-
-//! @ingroup group-assertions
-//! Equivalent to `BOOST_HANA_CONSTANT_ASSERT_MSG`, but not influenced by the
-//! `BOOST_HANA_CONFIG_DISABLE_ASSERTIONS` config macro. For internal use only.
-# define BOOST_HANA_CONSTANT_CHECK_MSG(condition, message) \
- auto BOOST_HANA_PP_CONCAT(__hana_tmp_, __LINE__) = condition; \
- static_assert(::boost::hana::Constant< \
- decltype(BOOST_HANA_PP_CONCAT(__hana_tmp_, __LINE__)) \
- >::value, \
- "the expression " # condition " does not yield a Constant; " \
- "use BOOST_HANA_RUNTIME_ASSERT instead"); \
- static_assert(::boost::hana::value< \
- decltype(BOOST_HANA_PP_CONCAT(__hana_tmp_, __LINE__)) \
- >(), message); \
- static_assert(true, "force trailing semicolon") \
-/**/
-
-//! @ingroup group-assertions
-//! Equivalent to `BOOST_HANA_CONSTANT_ASSERT`, but not influenced by the
-//! `BOOST_HANA_CONFIG_DISABLE_ASSERTIONS` config macro. For internal use only.
-# define BOOST_HANA_CONSTANT_CHECK(...) \
- BOOST_HANA_CONSTANT_CHECK_MSG( \
- (__VA_ARGS__), \
- BOOST_HANA_PP_STRINGIZE(__VA_ARGS__) \
- ) \
-/**/
-
-//////////////////////////////////////////////////////////////////////////////
-// BOOST_HANA_CHECK and BOOST_HANA_CHECK_MSG
-//////////////////////////////////////////////////////////////////////////////
-
-//! @ingroup group-assertions
-//! Equivalent to `BOOST_HANA_ASSERT_MSG`, but not influenced by the
-//! `BOOST_HANA_CONFIG_DISABLE_ASSERTIONS` config macro. For internal use only.
-# define BOOST_HANA_CHECK_MSG(condition, message) \
- do { \
- auto __hana_tmp = condition; \
- ::boost::hana::if_(::boost::hana::bool_c< \
- ::boost::hana::Constant<decltype(__hana_tmp)>::value>, \
- [](auto expr) { \
- static_assert(::boost::hana::value<decltype(expr)>(), \
- message); \
- }, \
- [](auto expr) { \
- if (!static_cast<bool>(expr)) { \
- ::std::fprintf(stderr, "Assertion failed: " \
- "(%s), function %s, file %s, line %i.\n", \
- message, __func__, __FILE__, __LINE__); \
- ::std::abort(); \
- } \
- } \
- )(__hana_tmp); \
- } while (false); \
- static_assert(true, "force trailing semicolon") \
-/**/
-
-//! @ingroup group-assertions
-//! Equivalent to `BOOST_HANA__ASSERT`, but not influenced by the
-//! `BOOST_HANA_CONFIG_DISABLE_ASSERTIONS` config macro. For internal use only.
-# define BOOST_HANA_CHECK(...) \
- BOOST_HANA_CHECK_MSG( \
- (__VA_ARGS__), \
- BOOST_HANA_PP_STRINGIZE(__VA_ARGS__) \
- ) \
-/**/
-
-//////////////////////////////////////////////////////////////////////////////
-// BOOST_HANA_CONSTEXPR_CHECK and BOOST_HANA_CONSTEXPR_CHECK_MSG
-//////////////////////////////////////////////////////////////////////////////
-
-#if defined(BOOST_HANA_DOXYGEN_INVOKED)
- //! @ingroup group-assertions
- //! Equivalent to `BOOST_HANA_CONSTEXPR_ASSERT_MSG`, but not influenced by
- //! the `BOOST_HANA_CONFIG_DISABLE_ASSERTIONS` config macro.
- //! For internal use only.
-# define BOOST_HANA_CONSTEXPR_CHECK_MSG(condition, message) implementation-defined
-
- //! @ingroup group-assertions
- //! Equivalent to `BOOST_HANA_CONSTEXPR_ASSERT`, but not influenced by the
- //! `BOOST_HANA_CONFIG_DISABLE_ASSERTIONS` config macro.
- //! For internal use only.
-# define BOOST_HANA_CONSTEXPR_CHECK(...) implementation-defined
-
-#elif defined(BOOST_HANA_CONFIG_HAS_CONSTEXPR_LAMBDA)
-
-# define BOOST_HANA_CONSTEXPR_CHECK_MSG(condition, message) \
- static_assert(condition, message) \
-/**/
-
-# define BOOST_HANA_CONSTEXPR_CHECK(...) \
- static_assert((__VA_ARGS__), BOOST_HANA_PP_STRINGIZE(__VA_ARGS__)) \
-/**/
-
-#else
-
-# define BOOST_HANA_CONSTEXPR_CHECK_MSG(condition, message) \
- BOOST_HANA_RUNTIME_CHECK_MSG(condition, message) \
-/**/
-
-# define BOOST_HANA_CONSTEXPR_CHECK(...) \
- BOOST_HANA_CONSTEXPR_CHECK_MSG( \
- (__VA_ARGS__), \
- BOOST_HANA_PP_STRINGIZE(__VA_ARGS__) \
- ) \
-/**/
-
-#endif
-
-#endif // !BOOST_HANA_ASSERT_HPP
diff --git a/contrib/restricted/boost/boost/hana/at.hpp b/contrib/restricted/boost/boost/hana/at.hpp
deleted file mode 100644
index c3f158b0ff..0000000000
--- a/contrib/restricted/boost/boost/hana/at.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
-@file
-Defines `boost::hana::at` and `boost::hana::at_c`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_AT_HPP
-#define BOOST_HANA_AT_HPP
-
-#include <boost/hana/fwd/at.hpp>
-
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/concept/iterable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/integral_constant.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename N>
- constexpr decltype(auto) at_t::operator()(Xs&& xs, N const& n) const {
- using It = typename hana::tag_of<Xs>::type;
- using At = BOOST_HANA_DISPATCH_IF(at_impl<It>,
- hana::Iterable<It>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Iterable<It>::value,
- "hana::at(xs, n) requires 'xs' to be an Iterable");
-
- static_assert(hana::IntegralConstant<N>::value,
- "hana::at(xs, n) requires 'n' to be an IntegralConstant");
- #endif
-
- return At::apply(static_cast<Xs&&>(xs), n);
- }
- //! @endcond
-
- template <typename It, bool condition>
- struct at_impl<It, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- template <std::size_t n, typename Xs>
- constexpr decltype(auto) at_c(Xs&& xs) {
- return hana::at(static_cast<Xs&&>(xs), hana::size_t<n>{});
- }
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_AT_HPP
diff --git a/contrib/restricted/boost/boost/hana/at_key.hpp b/contrib/restricted/boost/boost/hana/at_key.hpp
deleted file mode 100644
index e4f2e11255..0000000000
--- a/contrib/restricted/boost/boost/hana/at_key.hpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/*!
-@file
-Defines `boost::hana::at_key`.
-
-@copyright Louis Dionne 2013-2017
-@copyright Jason Rice 2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_AT_KEY_HPP
-#define BOOST_HANA_AT_KEY_HPP
-
-#include <boost/hana/fwd/at_key.hpp>
-
-#include <boost/hana/accessors.hpp>
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/searchable.hpp>
-#include <boost/hana/concept/struct.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/equal.hpp>
-#include <boost/hana/find.hpp>
-#include <boost/hana/find_if.hpp>
-#include <boost/hana/first.hpp>
-#include <boost/hana/functional/on.hpp>
-#include <boost/hana/index_if.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/optional.hpp>
-#include <boost/hana/second.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Key>
- constexpr decltype(auto) at_key_t::operator()(Xs&& xs, Key const& key) const {
- using S = typename hana::tag_of<Xs>::type;
- using AtKey = BOOST_HANA_DISPATCH_IF(at_key_impl<S>,
- hana::Searchable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Searchable<S>::value,
- "hana::at_key(xs, key) requires 'xs' to be Searchable");
- #endif
-
- return AtKey::apply(static_cast<Xs&&>(xs), key);
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct at_key_impl<S, when<condition>> : default_ {
- template <typename Xs, typename Key>
- static constexpr auto apply(Xs&& xs, Key const& key) {
- return hana::find(static_cast<Xs&&>(xs), key).value();
- }
- };
-
- namespace at_key_detail {
- template <typename T>
- struct equal_to {
- T const& t;
- template <typename U>
- constexpr auto operator()(U const& u) const {
- return hana::equal(t, u);
- }
- };
- }
-
- template <typename S>
- struct at_key_impl<S, when<hana::Sequence<S>::value>> {
- template <typename Xs, typename Key>
- static constexpr decltype(auto) apply(Xs&& xs, Key const& key) {
- using Result = decltype(hana::index_if(
- static_cast<Xs&&>(xs), at_key_detail::equal_to<Key>{key}));
-
- return hana::at(static_cast<Xs&&>(xs), Result{}.value());
- }
- };
-
- template <typename S>
- struct at_key_impl<S, when<hana::Struct<S>::value>> {
- template <typename X, typename Key>
- static constexpr decltype(auto) apply(X&& x, Key const& key) {
- auto accessor = hana::second(*hana::find_if(hana::accessors<S>(),
- hana::equal.to(key) ^hana::on^ hana::first
- ));
- return accessor(static_cast<X&&>(x));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_AT_KEY_HPP
diff --git a/contrib/restricted/boost/boost/hana/back.hpp b/contrib/restricted/boost/boost/hana/back.hpp
deleted file mode 100644
index 4fed83f032..0000000000
--- a/contrib/restricted/boost/boost/hana/back.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/*!
-@file
-Defines `boost::hana::back`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_BACK_HPP
-#define BOOST_HANA_BACK_HPP
-
-#include <boost/hana/fwd/back.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/iterable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/length.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs>
- constexpr decltype(auto) back_t::operator()(Xs&& xs) const {
- using It = typename hana::tag_of<Xs>::type;
- using Back = BOOST_HANA_DISPATCH_IF(back_impl<It>,
- hana::Iterable<It>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Iterable<It>::value,
- "hana::back(xs) requires 'xs' to be an Iterable");
- #endif
-
- return Back::apply(static_cast<Xs&&>(xs));
- }
- //! @endcond
-
- template <typename It, bool condition>
- struct back_impl<It, when<condition>> : default_ {
- template <typename Xs>
- static constexpr decltype(auto) apply(Xs&& xs) {
- constexpr std::size_t len = decltype(hana::length(xs))::value;
- static_assert(len > 0, "hana::back(xs) requires 'xs' to be non-empty");
- return hana::at_c<len - 1>(static_cast<Xs&&>(xs));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_BACK_HPP
diff --git a/contrib/restricted/boost/boost/hana/basic_tuple.hpp b/contrib/restricted/boost/boost/hana/basic_tuple.hpp
deleted file mode 100644
index 3e624694e0..0000000000
--- a/contrib/restricted/boost/boost/hana/basic_tuple.hpp
+++ /dev/null
@@ -1,256 +0,0 @@
-/*!
-@file
-Defines `boost::hana::basic_tuple`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_BASIC_TUPLE_HPP
-#define BOOST_HANA_BASIC_TUPLE_HPP
-
-#include <boost/hana/fwd/basic_tuple.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/detail/ebo.hpp>
-#include <boost/hana/fwd/at.hpp>
-#include <boost/hana/fwd/bool.hpp>
-#include <boost/hana/fwd/concept/sequence.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/drop_front.hpp>
-#include <boost/hana/fwd/integral_constant.hpp>
-#include <boost/hana/fwd/is_empty.hpp>
-#include <boost/hana/fwd/length.hpp>
-#include <boost/hana/fwd/transform.hpp>
-#include <boost/hana/fwd/unpack.hpp>
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace detail {
- //////////////////////////////////////////////////////////////////////
- // basic_tuple_impl<n, Xn>
- //////////////////////////////////////////////////////////////////////
- template <std::size_t> struct bti; // basic_tuple_index
-
- struct from_other { };
-
- template <typename Indices, typename ...Xn>
- struct basic_tuple_impl;
-
- template <std::size_t ...n, typename ...Xn>
- struct basic_tuple_impl<std::index_sequence<n...>, Xn...>
- : detail::ebo<bti<n>, Xn>...
- {
- static constexpr std::size_t size_ = sizeof...(Xn);
-
- constexpr basic_tuple_impl() = default;
-
- template <typename Other>
- explicit constexpr basic_tuple_impl(detail::from_other, Other&& other)
- : detail::ebo<bti<n>, Xn>(detail::ebo_get<bti<n>>(static_cast<Other&&>(other)))...
- { }
-
- template <typename ...Yn>
- explicit constexpr basic_tuple_impl(Yn&& ...yn)
- : detail::ebo<bti<n>, Xn>(static_cast<Yn&&>(yn))...
- { }
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // basic_tuple
- //////////////////////////////////////////////////////////////////////////
- //! @cond
- template <typename ...Xn>
- struct basic_tuple final
- : detail::basic_tuple_impl<std::make_index_sequence<sizeof...(Xn)>, Xn...>
- {
- using Base = detail::basic_tuple_impl<std::make_index_sequence<sizeof...(Xn)>, Xn...>;
-
- constexpr basic_tuple() = default;
-
- // copy constructor
- template <typename Other, typename = typename std::enable_if<
- std::is_same<typename detail::decay<Other>::type, basic_tuple>::value
- >::type>
- constexpr basic_tuple(Other&& other)
- : Base(detail::from_other{}, static_cast<Other&&>(other))
- { }
-
- template <typename ...Yn>
- explicit constexpr basic_tuple(Yn&& ...yn)
- : Base(static_cast<Yn&&>(yn)...)
- { }
- };
- //! @endcond
-
- template <typename ...Xn>
- struct tag_of<basic_tuple<Xn...>> {
- using type = basic_tuple_tag;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Foldable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct unpack_impl<basic_tuple_tag> {
- template <std::size_t ...i, typename ...Xn, typename F>
- static constexpr decltype(auto)
- apply(detail::basic_tuple_impl<std::index_sequence<i...>, Xn...> const& xs, F&& f) {
- return static_cast<F&&>(f)(
- detail::ebo_get<detail::bti<i>>(
- static_cast<detail::ebo<detail::bti<i>, Xn> const&>(xs)
- )...
- );
- }
-
- template <std::size_t ...i, typename ...Xn, typename F>
- static constexpr decltype(auto)
- apply(detail::basic_tuple_impl<std::index_sequence<i...>, Xn...>& xs, F&& f) {
- return static_cast<F&&>(f)(
- detail::ebo_get<detail::bti<i>>(
- static_cast<detail::ebo<detail::bti<i>, Xn>&>(xs)
- )...
- );
- }
-
- template <std::size_t ...i, typename ...Xn, typename F>
- static constexpr decltype(auto)
- apply(detail::basic_tuple_impl<std::index_sequence<i...>, Xn...>&& xs, F&& f) {
- return static_cast<F&&>(f)(
- detail::ebo_get<detail::bti<i>>(
- static_cast<detail::ebo<detail::bti<i>, Xn>&&>(xs)
- )...
- );
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Functor
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct transform_impl<basic_tuple_tag> {
- template <std::size_t ...i, typename ...Xn, typename F>
- static constexpr auto
- apply(detail::basic_tuple_impl<std::index_sequence<i...>, Xn...> const& xs, F const& f) {
- return hana::make_basic_tuple(
- f(detail::ebo_get<detail::bti<i>>(
- static_cast<detail::ebo<detail::bti<i>, Xn> const&>(xs)
- ))...
- );
- }
-
- template <std::size_t ...i, typename ...Xn, typename F>
- static constexpr auto
- apply(detail::basic_tuple_impl<std::index_sequence<i...>, Xn...>& xs, F const& f) {
- return hana::make_basic_tuple(
- f(detail::ebo_get<detail::bti<i>>(
- static_cast<detail::ebo<detail::bti<i>, Xn>&>(xs)
- ))...
- );
- }
-
- template <std::size_t ...i, typename ...Xn, typename F>
- static constexpr auto
- apply(detail::basic_tuple_impl<std::index_sequence<i...>, Xn...>&& xs, F const& f) {
- return hana::make_basic_tuple(
- f(detail::ebo_get<detail::bti<i>>(
- static_cast<detail::ebo<detail::bti<i>, Xn>&&>(xs)
- ))...
- );
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Iterable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct at_impl<basic_tuple_tag> {
- template <typename Xs, typename N>
- static constexpr decltype(auto) apply(Xs&& xs, N const&) {
- constexpr std::size_t index = N::value;
- return detail::ebo_get<detail::bti<index>>(static_cast<Xs&&>(xs));
- }
- };
-
- template <>
- struct drop_front_impl<basic_tuple_tag> {
- template <std::size_t N, typename Xs, std::size_t ...i>
- static constexpr auto drop_front_helper(Xs&& xs, std::index_sequence<i...>) {
- return hana::make_basic_tuple(
- detail::ebo_get<detail::bti<i+N>>(static_cast<Xs&&>(xs))...
- );
- }
-
- template <typename Xs, typename N>
- static constexpr auto apply(Xs&& xs, N const&) {
- constexpr std::size_t len = detail::decay<Xs>::type::size_;
- return drop_front_helper<N::value>(static_cast<Xs&&>(xs), std::make_index_sequence<
- N::value < len ? len - N::value : 0
- >{});
- }
- };
-
- template <>
- struct is_empty_impl<basic_tuple_tag> {
- template <typename ...Xs>
- static constexpr hana::bool_<sizeof...(Xs) == 0>
- apply(basic_tuple<Xs...> const&)
- { return {}; }
- };
-
- // compile-time optimizations (to reduce the # of function instantiations)
- template <std::size_t n, typename ...Xs>
- constexpr decltype(auto) at_c(basic_tuple<Xs...> const& xs) {
- return detail::ebo_get<detail::bti<n>>(xs);
- }
-
- template <std::size_t n, typename ...Xs>
- constexpr decltype(auto) at_c(basic_tuple<Xs...>& xs) {
- return detail::ebo_get<detail::bti<n>>(xs);
- }
-
- template <std::size_t n, typename ...Xs>
- constexpr decltype(auto) at_c(basic_tuple<Xs...>&& xs) {
- return detail::ebo_get<detail::bti<n>>(static_cast<basic_tuple<Xs...>&&>(xs));
- }
-
- //////////////////////////////////////////////////////////////////////////
- // Sequence
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct Sequence<basic_tuple_tag> {
- static constexpr bool value = true;
- };
-
- template <>
- struct make_impl<basic_tuple_tag> {
- template <typename ...Xn>
- static constexpr basic_tuple<typename detail::decay<Xn>::type...>
- apply(Xn&& ...xn) {
- return basic_tuple<typename detail::decay<Xn>::type...>{
- static_cast<Xn&&>(xn)...
- };
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // length
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct length_impl<basic_tuple_tag> {
- template <typename ...Xn>
- static constexpr auto apply(basic_tuple<Xn...> const&) {
- return hana::size_t<sizeof...(Xn)>{};
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_BASIC_TUPLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/bool.hpp b/contrib/restricted/boost/boost/hana/bool.hpp
deleted file mode 100644
index 5774ccb78c..0000000000
--- a/contrib/restricted/boost/boost/hana/bool.hpp
+++ /dev/null
@@ -1,271 +0,0 @@
-/*!
-@file
-Defines the `Logical` and `Comparable` models of `boost::hana::integral_constant`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_BOOL_HPP
-#define BOOST_HANA_BOOL_HPP
-
-#include <boost/hana/fwd/bool.hpp>
-
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/operators/arithmetic.hpp>
-#include <boost/hana/detail/operators/comparable.hpp>
-#include <boost/hana/detail/operators/logical.hpp>
-#include <boost/hana/detail/operators/orderable.hpp>
-#include <boost/hana/eval.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/eval_if.hpp>
-#include <boost/hana/fwd/if.hpp>
-#include <boost/hana/fwd/value.hpp>
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //////////////////////////////////////////////////////////////////////////
- // integral_constant
- //////////////////////////////////////////////////////////////////////////
- //! @cond
- namespace ic_detail {
- template <typename T, T N, typename = std::make_integer_sequence<T, N>>
- struct go;
-
- template <typename T, T N, T ...i>
- struct go<T, N, std::integer_sequence<T, i...>> {
- using swallow = T[];
-
- template <typename F>
- static constexpr void with_index(F&& f)
- { (void)swallow{T{}, ((void)f(integral_constant<T, i>{}), i)...}; }
-
- template <typename F>
- static constexpr void without_index(F&& f)
- { (void)swallow{T{}, ((void)f(), i)...}; }
- };
-
- template <typename T, T v>
- template <typename F>
- constexpr void with_index_t<T, v>::operator()(F&& f) const
- { go<T, ((void)sizeof(&f), v)>::with_index(static_cast<F&&>(f)); }
-
- template <typename T, T v>
- template <typename F>
- constexpr void times_t<T, v>::operator()(F&& f) const
- { go<T, ((void)sizeof(&f), v)>::without_index(static_cast<F&&>(f)); }
-
- // avoid link-time error
- template <typename T, T v>
- constexpr with_index_t<T, v> times_t<T, v>::with_index;
- }
-
- // avoid link-time error
- template <typename T, T v>
- constexpr ic_detail::times_t<T, v> integral_constant<T, v>::times;
-
- template <typename T, T v>
- struct tag_of<integral_constant<T, v>> {
- using type = integral_constant_tag<T>;
- };
- //! @endcond
-
- //////////////////////////////////////////////////////////////////////////
- // Operators
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <typename T>
- struct comparable_operators<integral_constant_tag<T>> {
- static constexpr bool value = true;
- };
- template <typename T>
- struct orderable_operators<integral_constant_tag<T>> {
- static constexpr bool value = true;
- };
- template <typename T>
- struct arithmetic_operators<integral_constant_tag<T>> {
- static constexpr bool value = true;
- };
- template <typename T>
- struct logical_operators<integral_constant_tag<T>> {
- static constexpr bool value = true;
- };
- }
-
-#define BOOST_HANA_INTEGRAL_CONSTANT_BINARY_OP(op) \
- template <typename U, U u, typename V, V v> \
- constexpr integral_constant<decltype(u op v), (u op v)> \
- operator op(integral_constant<U, u>, integral_constant<V, v>) \
- { return {}; } \
- /**/
-
-#define BOOST_HANA_INTEGRAL_CONSTANT_UNARY_OP(op) \
- template <typename U, U u> \
- constexpr integral_constant<decltype(op u), (op u)> \
- operator op(integral_constant<U, u>) \
- { return {}; } \
- /**/
-
- // Arithmetic
- BOOST_HANA_INTEGRAL_CONSTANT_UNARY_OP(+)
-
- // Bitwise
- BOOST_HANA_INTEGRAL_CONSTANT_UNARY_OP(~)
- BOOST_HANA_INTEGRAL_CONSTANT_BINARY_OP(&)
- BOOST_HANA_INTEGRAL_CONSTANT_BINARY_OP(|)
- BOOST_HANA_INTEGRAL_CONSTANT_BINARY_OP(^)
- BOOST_HANA_INTEGRAL_CONSTANT_BINARY_OP(<<)
- BOOST_HANA_INTEGRAL_CONSTANT_BINARY_OP(>>)
-
-#undef BOOST_HANA_INTEGRAL_CONSTANT_UNARY_OP
-#undef BOOST_HANA_INTEGRAL_CONSTANT_BINARY_OP
-
-
- //////////////////////////////////////////////////////////////////////////
- // User-defined literal
- //////////////////////////////////////////////////////////////////////////
- namespace ic_detail {
-
- constexpr int to_int(char c) {
- int result = 0;
-
- if (c >= 'A' && c <= 'F') {
- result = static_cast<int>(c) - static_cast<int>('A') + 10;
- }
- else if (c >= 'a' && c <= 'f') {
- result = static_cast<int>(c) - static_cast<int>('a') + 10;
- }
- else {
- result = static_cast<int>(c) - static_cast<int>('0');
- }
-
- return result;
- }
-
- template<std::size_t N>
- constexpr long long parse(const char (&arr)[N]) {
- long long base = 10;
- std::size_t offset = 0;
-
- if (N > 2) {
- bool starts_with_zero = arr[0] == '0';
- bool is_hex = starts_with_zero && arr[1] == 'x';
- bool is_binary = starts_with_zero && arr[1] == 'b';
-
- if (is_hex) {
- //0xDEADBEEF (hexadecimal)
- base = 16;
- offset = 2;
- }
- else if (is_binary) {
- //0b101011101 (binary)
- base = 2;
- offset = 2;
- }
- else if (starts_with_zero) {
- //012345 (octal)
- base = 8;
- offset = 1;
- }
- }
-
- long long number = 0;
- long long multiplier = 1;
-
- for (std::size_t i = 0; i < N - offset; ++i) {
- char c = arr[N - 1 - i];
- if (c != '\'') { // skip digit separators
- number += to_int(c) * multiplier;
- multiplier *= base;
- }
- }
-
- return number;
- }
- }
-
- namespace literals {
- template <char ...c>
- constexpr auto operator"" _c() {
- return hana::llong<ic_detail::parse<sizeof...(c)>({c...})>{};
- }
- }
-
- //////////////////////////////////////////////////////////////////////////
- // Model of Constant/IntegralConstant
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct IntegralConstant<integral_constant_tag<T>> {
- static constexpr bool value = true;
- };
-
- template <typename T, typename C>
- struct to_impl<integral_constant_tag<T>, C, when<hana::IntegralConstant<C>::value>>
- : embedding<is_embedded<typename C::value_type, T>::value>
- {
- template <typename N>
- static constexpr auto apply(N const&)
- { return integral_constant<T, N::value>{}; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Optimizations
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct eval_if_impl<integral_constant_tag<T>> {
- template <typename Cond, typename Then, typename Else>
- static constexpr decltype(auto)
- apply(Cond const&, Then&& t, Else&& e) {
- constexpr bool cond = static_cast<bool>(Cond::value);
- return eval_if_impl::apply(hana::bool_<cond>{},
- static_cast<Then&&>(t),
- static_cast<Else&&>(e));
- }
-
- template <typename Then, typename Else>
- static constexpr decltype(auto)
- apply(hana::true_ const&, Then&& t, Else&&)
- { return hana::eval(static_cast<Then&&>(t)); }
-
- template <typename Then, typename Else>
- static constexpr decltype(auto)
- apply(hana::false_ const&, Then&&, Else&& e)
- { return hana::eval(static_cast<Else&&>(e)); }
- };
-
- template <typename T>
- struct if_impl<integral_constant_tag<T>> {
- template <typename Cond, typename Then, typename Else>
- static constexpr decltype(auto)
- apply(Cond const&, Then&& t, Else&& e) {
- constexpr bool cond = static_cast<bool>(Cond::value);
- return if_impl::apply(hana::bool_<cond>{},
- static_cast<Then&&>(t),
- static_cast<Else&&>(e));
- }
-
- //! @todo We could return `Then` instead of `auto` to sometimes save
- //! a copy, but that would break some code that would return a
- //! reference to a `type` object. I think the code that would be
- //! broken should be changed, but more thought needs to be given.
- template <typename Then, typename Else>
- static constexpr auto
- apply(hana::true_ const&, Then&& t, Else&&)
- { return static_cast<Then&&>(t); }
-
- template <typename Then, typename Else>
- static constexpr auto
- apply(hana::false_ const&, Then&&, Else&& e)
- { return static_cast<Else&&>(e); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_BOOL_HPP
diff --git a/contrib/restricted/boost/boost/hana/cartesian_product.hpp b/contrib/restricted/boost/boost/hana/cartesian_product.hpp
deleted file mode 100644
index 556c3b5237..0000000000
--- a/contrib/restricted/boost/boost/hana/cartesian_product.hpp
+++ /dev/null
@@ -1,113 +0,0 @@
-/*!
-@file
-Defines `boost::hana::cartesian_product`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CARTESIAN_PRODUCT_HPP
-#define BOOST_HANA_CARTESIAN_PRODUCT_HPP
-
-#include <boost/hana/fwd/cartesian_product.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/detail/array.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/unpack.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs>
- constexpr auto cartesian_product_t::operator()(Xs&& xs) const {
- using S = typename hana::tag_of<Xs>::type;
- using CartesianProduct = BOOST_HANA_DISPATCH_IF(
- cartesian_product_impl<S>,
- hana::Sequence<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::cartesian_product(xs) requires 'xs' to be a Sequence");
- #endif
-
- return CartesianProduct::apply(static_cast<Xs&&>(xs));
- }
- //! @endcond
-
- namespace detail {
- template <std::size_t ...Lengths>
- struct cartesian_product_indices {
- static constexpr std::size_t total_length() {
- std::size_t lengths[sizeof...(Lengths)] = {Lengths...};
- std::size_t r = 1;
- for (std::size_t len: lengths)
- r *= len;
- return r;
- }
-
- static constexpr std::size_t length = total_length();
-
- static constexpr auto indices_of(std::size_t i) {
- constexpr std::size_t lengths[sizeof...(Lengths)] = {Lengths...};
- constexpr std::size_t n = sizeof...(Lengths);
- detail::array<std::size_t, n> result{};
- for (std::size_t j = n; j--;) {
- result[j] = i % lengths[j];
- i /= lengths[j];
- }
- return result;
- }
-
- template <typename S, std::size_t n, std::size_t ...k, typename ...Xs>
- static constexpr auto
- product_element(std::index_sequence<k...>, Xs&& ...xs) {
- constexpr auto indices = indices_of(n);
- return hana::make<S>(hana::at_c<indices[k]>(xs)...);
- }
-
- template <typename S, std::size_t ...n, typename ...Xs>
- static constexpr auto
- create_product(std::index_sequence<n...>, Xs&& ...xs) {
- return hana::make<S>(product_element<S, n>(
- std::make_index_sequence<sizeof...(Xs)>{}, xs...
- )...);
- }
- };
- }
-
- // Credits: implementation adapted from http://github.com/alexk7/hel.
- template <typename S, bool condition>
- struct cartesian_product_impl<S, when<condition>> : default_ {
- template <typename Xs>
- static constexpr auto apply(Xs&& xs) {
- return hana::unpack(static_cast<Xs&&>(xs), cartesian_product_impl{});
- }
-
- template <typename ...Xs>
- constexpr auto operator()(Xs&& ...xs) const {
- using indices = detail::cartesian_product_indices<
- decltype(hana::length(xs))::value...
- >;
- return indices::template create_product<S>(
- std::make_index_sequence<indices::length>{},
- static_cast<Xs&&>(xs)...);
- }
-
- constexpr auto operator()() const {
- return hana::make<S>();
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CARTESIAN_PRODUCT_HPP
diff --git a/contrib/restricted/boost/boost/hana/chain.hpp b/contrib/restricted/boost/boost/hana/chain.hpp
deleted file mode 100644
index ab889d186a..0000000000
--- a/contrib/restricted/boost/boost/hana/chain.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*!
-@file
-Defines `boost::hana::chain`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CHAIN_HPP
-#define BOOST_HANA_CHAIN_HPP
-
-#include <boost/hana/fwd/chain.hpp>
-
-#include <boost/hana/concept/monad.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/flatten.hpp>
-#include <boost/hana/transform.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename F>
- constexpr decltype(auto) chain_t::operator()(Xs&& xs, F&& f) const {
- using M = typename hana::tag_of<Xs>::type;
- using Chain = BOOST_HANA_DISPATCH_IF(chain_impl<M>,
- hana::Monad<M>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Monad<M>::value,
- "hana::chain(xs, f) requires 'xs' to be a Monad");
- #endif
-
- return Chain::apply(static_cast<Xs&&>(xs), static_cast<F&&>(f));
- }
- //! @endcond
-
- template <typename M, bool condition>
- struct chain_impl<M, when<condition>> : default_ {
- template <typename Xs, typename F>
- static constexpr auto apply(Xs&& xs, F&& f) {
- return hana::flatten(hana::transform(static_cast<Xs&&>(xs),
- static_cast<F&&>(f)));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CHAIN_HPP
diff --git a/contrib/restricted/boost/boost/hana/comparing.hpp b/contrib/restricted/boost/boost/hana/comparing.hpp
deleted file mode 100644
index 4aaa546d4c..0000000000
--- a/contrib/restricted/boost/boost/hana/comparing.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*!
-@file
-Defines `boost::hana::comparing`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_COMPARING_HPP
-#define BOOST_HANA_COMPARING_HPP
-
-#include <boost/hana/fwd/comparing.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/equal.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace detail {
- template <typename F>
- struct equal_by {
- F f;
-
- template <typename X, typename Y>
- constexpr auto operator()(X&& x, Y&& y) const&
- { return hana::equal(f(static_cast<X&&>(x)), f(static_cast<Y&&>(y))); }
-
- template <typename X, typename Y>
- constexpr auto operator()(X&& x, Y&& y) &
- { return hana::equal(f(static_cast<X&&>(x)), f(static_cast<Y&&>(y))); }
- };
- }
-
- //! @cond
- template <typename F>
- constexpr auto comparing_t::operator()(F&& f) const {
- return detail::equal_by<typename detail::decay<F>::type>{static_cast<F&&>(f)};
- }
- //! @endcond
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_COMPARING_HPP
diff --git a/contrib/restricted/boost/boost/hana/concat.hpp b/contrib/restricted/boost/boost/hana/concat.hpp
deleted file mode 100644
index 27f2ad0bf2..0000000000
--- a/contrib/restricted/boost/boost/hana/concat.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*!
-@file
-Defines `boost::hana::concat`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCAT_HPP
-#define BOOST_HANA_CONCAT_HPP
-
-#include <boost/hana/fwd/concat.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/monad_plus.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/length.hpp>
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Ys>
- constexpr auto concat_t::operator()(Xs&& xs, Ys&& ys) const {
- using M = typename hana::tag_of<Xs>::type;
- using Concat = BOOST_HANA_DISPATCH_IF(concat_impl<M>,
- hana::MonadPlus<M>::value &&
- std::is_same<typename hana::tag_of<Ys>::type, M>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(std::is_same<typename hana::tag_of<Ys>::type, M>::value,
- "hana::concat(xs, ys) requires 'xs' and 'ys' to have the same tag");
-
- static_assert(hana::MonadPlus<M>::value,
- "hana::concat(xs, ys) requires 'xs' and 'ys' to be MonadPlus");
- #endif
-
- return Concat::apply(static_cast<Xs&&>(xs), static_cast<Ys&&>(ys));
- }
- //! @endcond
-
- template <typename M, bool condition>
- struct concat_impl<M, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- template <typename S>
- struct concat_impl<S, when<Sequence<S>::value>> {
- template <typename Xs, typename Ys, std::size_t ...xi, std::size_t ...yi>
- static constexpr auto
- concat_helper(Xs&& xs, Ys&& ys, std::index_sequence<xi...>,
- std::index_sequence<yi...>)
- {
- return hana::make<S>(
- hana::at_c<xi>(static_cast<Xs&&>(xs))...,
- hana::at_c<yi>(static_cast<Ys&&>(ys))...
- );
- }
-
- template <typename Xs, typename Ys>
- static constexpr auto apply(Xs&& xs, Ys&& ys) {
- constexpr std::size_t xi = decltype(hana::length(xs))::value;
- constexpr std::size_t yi = decltype(hana::length(ys))::value;
- return concat_helper(static_cast<Xs&&>(xs), static_cast<Ys&&>(ys),
- std::make_index_sequence<xi>{},
- std::make_index_sequence<yi>{});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCAT_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept.hpp b/contrib/restricted/boost/boost/hana/concept.hpp
deleted file mode 100644
index 6046b0a4ef..0000000000
--- a/contrib/restricted/boost/boost/hana/concept.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/*!
-@file
-Master header for the `boost/hana/concept/` subdirectory.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_HPP
-#define BOOST_HANA_CONCEPT_HPP
-
-#include <boost/hana/concept/applicative.hpp>
-#include <boost/hana/concept/comonad.hpp>
-#include <boost/hana/concept/comparable.hpp>
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/euclidean_ring.hpp>
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/concept/functor.hpp>
-#include <boost/hana/concept/group.hpp>
-#include <boost/hana/concept/hashable.hpp>
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/concept/iterable.hpp>
-#include <boost/hana/concept/logical.hpp>
-#include <boost/hana/concept/metafunction.hpp>
-#include <boost/hana/concept/monad.hpp>
-#include <boost/hana/concept/monad_plus.hpp>
-#include <boost/hana/concept/monoid.hpp>
-#include <boost/hana/concept/orderable.hpp>
-#include <boost/hana/concept/product.hpp>
-#include <boost/hana/concept/ring.hpp>
-#include <boost/hana/concept/searchable.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/concept/struct.hpp>
-
-#endif // !BOOST_HANA_CONCEPT_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/applicative.hpp b/contrib/restricted/boost/boost/hana/concept/applicative.hpp
deleted file mode 100644
index 84b92927eb..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/applicative.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Applicative`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_APPLICATIVE_HPP
-#define BOOST_HANA_CONCEPT_APPLICATIVE_HPP
-
-#include <boost/hana/fwd/concept/applicative.hpp>
-
-#include <boost/hana/ap.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/lift.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename A>
- struct Applicative
- : hana::integral_constant<bool,
- !is_default<ap_impl<typename tag_of<A>::type>>::value &&
- !is_default<lift_impl<typename tag_of<A>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_APPLICATIVE_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/comonad.hpp b/contrib/restricted/boost/boost/hana/concept/comonad.hpp
deleted file mode 100644
index 6cf950590f..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/comonad.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Comonad`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_COMONAD_HPP
-#define BOOST_HANA_CONCEPT_COMONAD_HPP
-
-#include <boost/hana/fwd/concept/comonad.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/duplicate.hpp>
-#include <boost/hana/extend.hpp>
-#include <boost/hana/extract.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename W>
- struct Comonad
- : hana::integral_constant<bool,
- !is_default<extract_impl<typename tag_of<W>::type>>::value &&
- (!is_default<duplicate_impl<typename tag_of<W>::type>>::value ||
- !is_default<extend_impl<typename tag_of<W>::type>>::value)
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_COMONAD_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/comparable.hpp b/contrib/restricted/boost/boost/hana/concept/comparable.hpp
deleted file mode 100644
index bcecfcd0ab..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/comparable.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Comparable`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_COMPARABLE_HPP
-#define BOOST_HANA_CONCEPT_COMPARABLE_HPP
-
-#include <boost/hana/fwd/concept/comparable.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/equal.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename T>
- struct Comparable
- : hana::integral_constant<bool,
- !is_default<equal_impl<typename tag_of<T>::type,
- typename tag_of<T>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_COMPARABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/constant.hpp b/contrib/restricted/boost/boost/hana/concept/constant.hpp
deleted file mode 100644
index 5e549ddf76..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/constant.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Constant`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_CONSTANT_HPP
-#define BOOST_HANA_CONCEPT_CONSTANT_HPP
-
-#include <boost/hana/fwd/concept/constant.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/value.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename C>
- struct Constant
- : hana::integral_constant<bool,
- !is_default<value_impl<typename tag_of<C>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_CONSTANT_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/euclidean_ring.hpp b/contrib/restricted/boost/boost/hana/concept/euclidean_ring.hpp
deleted file mode 100644
index e0de0477b0..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/euclidean_ring.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
-@file
-Defines `boost::hana::EuclideanRing`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_EUCLIDEAN_RING_HPP
-#define BOOST_HANA_CONCEPT_EUCLIDEAN_RING_HPP
-
-#include <boost/hana/fwd/concept/euclidean_ring.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/div.hpp>
-#include <boost/hana/mod.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename R>
- struct EuclideanRing
- : hana::integral_constant<bool,
- !is_default<mod_impl<typename tag_of<R>::type,
- typename tag_of<R>::type>>::value &&
- !is_default<div_impl<typename tag_of<R>::type,
- typename tag_of<R>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_EUCLIDEAN_RING_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/foldable.hpp b/contrib/restricted/boost/boost/hana/concept/foldable.hpp
deleted file mode 100644
index 6d88b58285..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/foldable.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Foldable`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_FOLDABLE_HPP
-#define BOOST_HANA_CONCEPT_FOLDABLE_HPP
-
-#include <boost/hana/fwd/concept/foldable.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/fold_left.hpp>
-#include <boost/hana/unpack.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename T>
- struct Foldable
- : hana::integral_constant<bool,
- !is_default<fold_left_impl<typename tag_of<T>::type>>::value ||
- !is_default<unpack_impl<typename tag_of<T>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_FOLDABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/functor.hpp b/contrib/restricted/boost/boost/hana/concept/functor.hpp
deleted file mode 100644
index 4fe7428b32..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/functor.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Functor`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_FUNCTOR_HPP
-#define BOOST_HANA_CONCEPT_FUNCTOR_HPP
-
-#include <boost/hana/fwd/concept/functor.hpp>
-
-#include <boost/hana/adjust_if.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/transform.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename F>
- struct Functor
- : hana::integral_constant<bool,
- !is_default<transform_impl<typename tag_of<F>::type>>::value ||
- !is_default<adjust_if_impl<typename tag_of<F>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_FUNCTOR_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/group.hpp b/contrib/restricted/boost/boost/hana/concept/group.hpp
deleted file mode 100644
index 2b16728b4f..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/group.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Group`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_GROUP_HPP
-#define BOOST_HANA_CONCEPT_GROUP_HPP
-
-#include <boost/hana/fwd/concept/group.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/minus.hpp>
-#include <boost/hana/negate.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename G>
- struct Group
- : hana::integral_constant<bool,
- !is_default<negate_impl<typename tag_of<G>::type>>::value ||
- !is_default<minus_impl<typename tag_of<G>::type,
- typename tag_of<G>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_GROUP_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/hashable.hpp b/contrib/restricted/boost/boost/hana/concept/hashable.hpp
deleted file mode 100644
index b5a0ca0feb..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/hashable.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Hashable`.
-
-@copyright Louis Dionne 2016
-@copyright Jason Rice 2016
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_HASHABLE_HPP
-#define BOOST_HANA_CONCEPT_HASHABLE_HPP
-
-#include <boost/hana/fwd/concept/hashable.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/hash.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename T>
- struct Hashable
- : hana::integral_constant<bool,
- !is_default<hash_impl<typename tag_of<T>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_HASHABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/integral_constant.hpp b/contrib/restricted/boost/boost/hana/concept/integral_constant.hpp
deleted file mode 100644
index cfb761da9b..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/integral_constant.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*!
-@file
-Defines `boost::hana::IntegralConstant`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_INTEGRAL_CONSTANT_HPP
-#define BOOST_HANA_CONCEPT_INTEGRAL_CONSTANT_HPP
-
-#include <boost/hana/fwd/concept/integral_constant.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace detail {
- template <typename C, typename Tag = typename tag_of<C>::type>
- struct integral_constant_dispatch
- : hana::integral_constant<bool,
- hana::IntegralConstant<Tag>::value
- >
- { };
-
- template <typename C>
- struct integral_constant_dispatch<C, C>
- : hana::integral_constant<bool, false>
- { };
- }
-
- //! @cond
- template <typename C>
- struct IntegralConstant
- : detail::integral_constant_dispatch<C>
- { };
- //! @endcond
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_INTEGRAL_CONSTANT_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/iterable.hpp b/contrib/restricted/boost/boost/hana/concept/iterable.hpp
deleted file mode 100644
index 2949f70b2b..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/iterable.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Iterable`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_ITERABLE_HPP
-#define BOOST_HANA_CONCEPT_ITERABLE_HPP
-
-#include <boost/hana/fwd/concept/iterable.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/drop_front.hpp>
-#include <boost/hana/is_empty.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename It>
- struct Iterable
- : hana::integral_constant<bool,
- !is_default<at_impl<typename tag_of<It>::type>>::value &&
- !is_default<drop_front_impl<typename tag_of<It>::type>>::value &&
- !is_default<is_empty_impl<typename tag_of<It>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_ITERABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/logical.hpp b/contrib/restricted/boost/boost/hana/concept/logical.hpp
deleted file mode 100644
index 69e3079065..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/logical.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Logical`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_LOGICAL_HPP
-#define BOOST_HANA_CONCEPT_LOGICAL_HPP
-
-#include <boost/hana/fwd/concept/logical.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/eval_if.hpp>
-#include <boost/hana/not.hpp>
-#include <boost/hana/while.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename L>
- struct Logical
- : hana::integral_constant<bool,
- !is_default<eval_if_impl<typename tag_of<L>::type>>::value &&
- !is_default<not_impl<typename tag_of<L>::type>>::value &&
- !is_default<while_impl<typename tag_of<L>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_LOGICAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/metafunction.hpp b/contrib/restricted/boost/boost/hana/concept/metafunction.hpp
deleted file mode 100644
index 70a9b0092a..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/metafunction.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Metafunction`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_METAFUNCTION_HPP
-#define BOOST_HANA_CONCEPT_METAFUNCTION_HPP
-
-#include <boost/hana/fwd/concept/metafunction.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace detail {
- template <typename F, typename Tag = typename tag_of<F>::type>
- struct metafunction_dispatch
- : hana::integral_constant<bool,
- Metafunction<Tag>::value
- >
- { };
-
- template <typename F>
- struct metafunction_dispatch<F, F>
- : hana::integral_constant<bool, false>
- { };
- }
-
- template <typename F>
- struct Metafunction
- : detail::metafunction_dispatch<F>
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_METAFUNCTION_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/monad.hpp b/contrib/restricted/boost/boost/hana/concept/monad.hpp
deleted file mode 100644
index 85fa06f9c3..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/monad.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Monad`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_MONAD_HPP
-#define BOOST_HANA_CONCEPT_MONAD_HPP
-
-#include <boost/hana/fwd/concept/monad.hpp>
-
-#include <boost/hana/chain.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/flatten.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename M>
- struct Monad
- : hana::integral_constant<bool,
- !is_default<flatten_impl<typename tag_of<M>::type>>::value ||
- !is_default<chain_impl<typename tag_of<M>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_MONAD_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/monad_plus.hpp b/contrib/restricted/boost/boost/hana/concept/monad_plus.hpp
deleted file mode 100644
index e9f2f1bf09..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/monad_plus.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
-@file
-Defines `boost::hana::MonadPlus`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_MONAD_PLUS_HPP
-#define BOOST_HANA_CONCEPT_MONAD_PLUS_HPP
-
-#include <boost/hana/fwd/concept/monad_plus.hpp>
-
-#include <boost/hana/concat.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/empty.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename M>
- struct MonadPlus
- : hana::integral_constant<bool,
- !is_default<concat_impl<typename tag_of<M>::type>>::value &&
- !is_default<empty_impl<typename tag_of<M>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_MONAD_PLUS_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/monoid.hpp b/contrib/restricted/boost/boost/hana/concept/monoid.hpp
deleted file mode 100644
index adda475a26..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/monoid.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Monoid`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_MONOID_HPP
-#define BOOST_HANA_CONCEPT_MONOID_HPP
-
-#include <boost/hana/fwd/concept/monoid.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/plus.hpp>
-#include <boost/hana/zero.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename M>
- struct Monoid
- : hana::integral_constant<bool,
- !is_default<zero_impl<typename tag_of<M>::type>>::value &&
- !is_default<plus_impl<typename tag_of<M>::type,
- typename tag_of<M>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_MONOID_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/orderable.hpp b/contrib/restricted/boost/boost/hana/concept/orderable.hpp
deleted file mode 100644
index dfa82655fc..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/orderable.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Orderable`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_ORDERABLE_HPP
-#define BOOST_HANA_CONCEPT_ORDERABLE_HPP
-
-#include <boost/hana/fwd/concept/orderable.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/less.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename Ord>
- struct Orderable
- : hana::integral_constant<bool,
- !is_default<less_impl<typename tag_of<Ord>::type,
- typename tag_of<Ord>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_ORDERABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/product.hpp b/contrib/restricted/boost/boost/hana/concept/product.hpp
deleted file mode 100644
index b1292ba156..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/product.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Product`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_PRODUCT_HPP
-#define BOOST_HANA_CONCEPT_PRODUCT_HPP
-
-#include <boost/hana/fwd/concept/product.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/first.hpp>
-#include <boost/hana/second.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename P>
- struct Product
- : hana::integral_constant<bool,
- !is_default<first_impl<typename tag_of<P>::type>>::value &&
- !is_default<second_impl<typename tag_of<P>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_PRODUCT_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/ring.hpp b/contrib/restricted/boost/boost/hana/concept/ring.hpp
deleted file mode 100644
index a9598e8fb3..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/ring.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Ring`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_RING_HPP
-#define BOOST_HANA_CONCEPT_RING_HPP
-
-#include <boost/hana/fwd/concept/ring.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/mult.hpp>
-#include <boost/hana/one.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename R>
- struct Ring
- : hana::integral_constant<bool,
- !is_default<one_impl<typename tag_of<R>::type>>::value &&
- !is_default<mult_impl<typename tag_of<R>::type,
- typename tag_of<R>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_RING_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/searchable.hpp b/contrib/restricted/boost/boost/hana/concept/searchable.hpp
deleted file mode 100644
index 65b161de73..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/searchable.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Searchable`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_SEARCHABLE_HPP
-#define BOOST_HANA_CONCEPT_SEARCHABLE_HPP
-
-#include <boost/hana/fwd/concept/searchable.hpp>
-
-#include <boost/hana/any_of.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-#include <boost/hana/find_if.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename S>
- struct Searchable
- : hana::integral_constant<bool,
- !is_default<any_of_impl<typename tag_of<S>::type>>::value &&
- !is_default<find_if_impl<typename tag_of<S>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_SEARCHABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/sequence.hpp b/contrib/restricted/boost/boost/hana/concept/sequence.hpp
deleted file mode 100644
index 83e4b42d3d..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/sequence.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Sequence`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_SEQUENCE_HPP
-#define BOOST_HANA_CONCEPT_SEQUENCE_HPP
-
-#include <boost/hana/fwd/concept/sequence.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace detail {
- template <typename S, typename Tag = typename hana::tag_of<S>::type>
- struct sequence_dispatch
- : hana::integral_constant<bool,
- hana::Sequence<Tag>::value
- >
- { };
-
- template <typename S>
- struct sequence_dispatch<S, S>
- : hana::integral_constant<bool, false>
- { };
- }
-
- //! @cond
- template <typename S, bool condition>
- struct Sequence<S, when<condition>>
- : detail::sequence_dispatch<S>
- { };
- //! @endcond
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_SEQUENCE_HPP
diff --git a/contrib/restricted/boost/boost/hana/concept/struct.hpp b/contrib/restricted/boost/boost/hana/concept/struct.hpp
deleted file mode 100644
index 49ac53b59c..0000000000
--- a/contrib/restricted/boost/boost/hana/concept/struct.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-/*!
-@file
-Defines `boost::hana::Struct`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONCEPT_STRUCT_HPP
-#define BOOST_HANA_CONCEPT_STRUCT_HPP
-
-#include <boost/hana/fwd/concept/struct.hpp>
-
-#include <boost/hana/accessors.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename S>
- struct Struct
- : hana::integral_constant<bool,
- !is_default<accessors_impl<typename tag_of<S>::type>>::value
- >
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONCEPT_STRUCT_HPP
diff --git a/contrib/restricted/boost/boost/hana/config.hpp b/contrib/restricted/boost/boost/hana/config.hpp
deleted file mode 100644
index f47cf739a1..0000000000
--- a/contrib/restricted/boost/boost/hana/config.hpp
+++ /dev/null
@@ -1,219 +0,0 @@
-/*!
-@file
-Defines configuration macros used throughout the library.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONFIG_HPP
-#define BOOST_HANA_CONFIG_HPP
-
-#include <boost/hana/version.hpp>
-
-
-//////////////////////////////////////////////////////////////////////////////
-// Detect the compiler
-//////////////////////////////////////////////////////////////////////////////
-
-#if defined(_MSC_VER) && !defined(__clang__) // MSVC
- // This must be checked first, because otherwise it produces a fatal
- // error due to unrecognized #warning directives used below.
-# pragma message("Warning: the native Microsoft compiler is not supported due to lack of proper C++14 support.")
-
-#elif defined(__clang__) && defined(_MSC_VER) // Clang-cl (Clang for Windows)
-
-# define BOOST_HANA_CONFIG_CLANG BOOST_HANA_CONFIG_VERSION( \
- __clang_major__, __clang_minor__, __clang_patchlevel__)
-
-# if BOOST_HANA_CONFIG_CLANG < BOOST_HANA_CONFIG_VERSION(3, 5, 0)
-# warning "Versions of Clang prior to 3.5.0 are not supported by Hana."
-# endif
-
-# if _MSC_VER < 1900
-# warning "Clang-cl is only supported with the -fms-compatibility-version parameter set to 19 and above."
-# endif
-
-#elif defined(__clang__) && defined(__apple_build_version__) // Apple's Clang
-
-# if __apple_build_version__ >= 6020049
-# define BOOST_HANA_CONFIG_CLANG BOOST_HANA_CONFIG_VERSION(3, 6, 0)
-# else
-# warning "Versions of Apple's Clang prior to the one shipped with Xcode 6.3 are not supported by Hana."
-# endif
-
-#elif defined(__clang__) // genuine Clang
-
-# define BOOST_HANA_CONFIG_CLANG BOOST_HANA_CONFIG_VERSION( \
- __clang_major__, __clang_minor__, __clang_patchlevel__)
-
-# if BOOST_HANA_CONFIG_CLANG < BOOST_HANA_CONFIG_VERSION(3, 5, 0)
-# warning "Versions of Clang prior to 3.5.0 are not supported by Hana."
-# endif
-
-#elif defined(__GNUC__) // GCC
-
-# define BOOST_HANA_CONFIG_GCC BOOST_HANA_CONFIG_VERSION( \
- __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
-
-# if BOOST_HANA_CONFIG_GCC < BOOST_HANA_CONFIG_VERSION(6, 0, 0)
-# warning "Versions of GCC prior to 6.0.0 are not supported by Hana."
-# endif
-
-#else
-
-# warning "Your compiler is not officially supported by Hana or it was not detected properly."
-
-#endif
-
-//////////////////////////////////////////////////////////////////////////////
-// Check the compiler for general C++14 capabilities
-//////////////////////////////////////////////////////////////////////////////
-#if (__cplusplus < 201400)
-# if defined(_MSC_VER)
-# pragma message("Warning: Your compiler doesn't provide C++14 or higher capabilities. Try adding the compiler flag '-std=c++14' or '-std=c++1y'.")
-# else
-# warning "Your compiler doesn't provide C++14 or higher capabilities. Try adding the compiler flag '-std=c++14' or '-std=c++1y'."
-# endif
-#endif
-
-//////////////////////////////////////////////////////////////////////////////
-// Detect the standard library
-//////////////////////////////////////////////////////////////////////////////
-
-// We include this header, which normally defines the proper detection macros.
-// At least, libc++ and libstdc++ do.
-#include <cstddef>
-
-#if defined(_LIBCPP_VERSION)
-
-# define BOOST_HANA_CONFIG_LIBCPP BOOST_HANA_CONFIG_VERSION( \
- (_LIBCPP_VERSION) / 1000, 0, (_LIBCPP_VERSION) % 1000)
-
-# if BOOST_HANA_CONFIG_LIBCPP < BOOST_HANA_CONFIG_VERSION(1, 0, 101)
-# warning "Versions of libc++ prior to the one shipped with Clang 3.5.0 are not supported by Hana."
-# endif
-
-#elif defined(__GLIBCXX__)
-
-// We do not define a macro to keep track of libstdc++'s version, because
-// we have no scalable way of associating a value of __GLIBCXX__ to the
-// corresponding GCC release. Instead, we just check that the release date
-// of the libstdc++ in use is recent enough, which should indicate that it
-// was released with a GCC >= 5.1, which in turn indicates good enough C++14
-// support.
-# if __GLIBCXX__ < 20150422 // --> the libstdc++ shipped with GCC 5.1.0
-# warning "Versions of libstdc++ prior to the one shipped with GCC 5.1.0 are not supported by Hana for lack of full C++14 support."
-# endif
-
-# define BOOST_HANA_CONFIG_LIBSTDCXX
-
-#elif defined(_MSC_VER)
-
-# define BOOST_HANA_CONFIG_LIBMSVCCXX
-
-#else
-
-# warning "Your standard library is not officially supported by Hana or it was not detected properly."
-
-#endif
-
-
-//////////////////////////////////////////////////////////////////////////////
-// Caveats and other compiler-dependent options
-//////////////////////////////////////////////////////////////////////////////
-
-// `BOOST_HANA_CONFIG_HAS_CONSTEXPR_LAMBDA` enables some constructs requiring
-// `constexpr` lambdas, which are in the language starting with C++17.
-//
-// Always disabled for now because Clang only has partial support for them
-// (captureless lambdas only).
-#if defined(__cplusplus) && __cplusplus > 201402L
-# define BOOST_HANA_CONSTEXPR_STATELESS_LAMBDA constexpr
-// # define BOOST_HANA_CONFIG_HAS_CONSTEXPR_LAMBDA
-#else
-# define BOOST_HANA_CONSTEXPR_STATELESS_LAMBDA /* nothing */
-#endif
-
-// `BOOST_HANA_CONSTEXPR_LAMBDA` expands to `constexpr` if constexpr lambdas
-// are supported and to nothing otherwise.
-#if defined(BOOST_HANA_CONFIG_HAS_CONSTEXPR_LAMBDA)
-# define BOOST_HANA_CONSTEXPR_LAMBDA constexpr
-#else
-# define BOOST_HANA_CONSTEXPR_LAMBDA /* nothing */
-#endif
-
-// There's a bug in std::tuple_cat in libc++ right now.
-// See http://llvm.org/bugs/show_bug.cgi?id=22806.
-#if defined(BOOST_HANA_CONFIG_LIBCPP)
-# define BOOST_HANA_CONFIG_LIBCPP_HAS_BUG_22806
-#endif
-
-//////////////////////////////////////////////////////////////////////////////
-// Namespace macros
-//////////////////////////////////////////////////////////////////////////////
-#define BOOST_HANA_NAMESPACE_BEGIN namespace boost { namespace hana {
-
-#define BOOST_HANA_NAMESPACE_END }}
-
-//////////////////////////////////////////////////////////////////////////////
-// Library features and options that can be tweaked by users
-//////////////////////////////////////////////////////////////////////////////
-
-#if defined(BOOST_HANA_DOXYGEN_INVOKED) || \
- (defined(NDEBUG) && !defined(BOOST_HANA_CONFIG_DISABLE_ASSERTIONS))
- //! @ingroup group-config
- //! Disables the `BOOST_HANA_*_ASSERT` macro & friends.
- //!
- //! When this macro is defined, the `BOOST_HANA_*_ASSERT` macro & friends
- //! are disabled, i.e. they expand to nothing.
- //!
- //! This macro is defined automatically when `NDEBUG` is defined. It can
- //! also be defined by users before including this header or defined on
- //! the command line.
-# define BOOST_HANA_CONFIG_DISABLE_ASSERTIONS
-#endif
-
-#if defined(BOOST_HANA_DOXYGEN_INVOKED)
- //! @ingroup group-config
- //! Disables concept checks in interface methods.
- //!
- //! When this macro is not defined (the default), tag-dispatched methods
- //! will make sure the arguments they are passed are models of the proper
- //! concept(s). This can be very helpful in catching programming errors,
- //! but it is also slightly less compile-time efficient. You should
- //! probably always leave the checks enabled (and hence never define this
- //! macro), except perhaps in translation units that are compiled very
- //! often but whose code using Hana is modified very rarely.
-# define BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
-#endif
-
-#if defined(BOOST_HANA_DOXYGEN_INVOKED)
- //! @ingroup group-config
- //! Enables usage of the "string literal operator template" GNU extension.
- //!
- //! That operator is not part of the language yet, but it is supported by
- //! both Clang and GCC. This operator allows Hana to provide the nice `_s`
- //! user-defined literal for creating compile-time strings.
- //!
- //! When this macro is not defined, the GNU extension will be not used
- //! by Hana. Because this is a non-standard extension, the macro is not
- //! defined by default.
-# define BOOST_HANA_CONFIG_ENABLE_STRING_UDL
-#endif
-
-#if defined(BOOST_HANA_DOXYGEN_INVOKED)
- //! @ingroup group-config
- //! Enables additional assertions and sanity checks to be done by Hana.
- //!
- //! When this macro is defined (it is __not defined__ by default),
- //! additional sanity checks may be done by Hana. These checks may
- //! be costly to perform, either in terms of compilation time or in
- //! terms of execution time. These checks may help debugging an
- //! application during its initial development, but they should not
- //! be enabled as part of the normal configuration.
-# define BOOST_HANA_CONFIG_ENABLE_DEBUG_MODE
-#endif
-
-#endif // !BOOST_HANA_CONFIG_HPP
diff --git a/contrib/restricted/boost/boost/hana/contains.hpp b/contrib/restricted/boost/boost/hana/contains.hpp
deleted file mode 100644
index 5e18a388dc..0000000000
--- a/contrib/restricted/boost/boost/hana/contains.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*!
-@file
-Defines `boost::hana::contains` and `boost::hana::in`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CONTAINS_HPP
-#define BOOST_HANA_CONTAINS_HPP
-
-#include <boost/hana/fwd/contains.hpp>
-
-#include <boost/hana/any_of.hpp>
-#include <boost/hana/concept/searchable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/equal.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Key>
- constexpr auto contains_t::operator()(Xs&& xs, Key&& key) const {
- using S = typename hana::tag_of<Xs>::type;
- using Contains = BOOST_HANA_DISPATCH_IF(contains_impl<S>,
- hana::Searchable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Searchable<S>::value,
- "hana::contains(xs, key) requires 'xs' to be a Searchable");
- #endif
-
- return Contains::apply(static_cast<Xs&&>(xs),
- static_cast<Key&&>(key));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct contains_impl<S, when<condition>> : default_ {
- template <typename Xs, typename X>
- static constexpr auto apply(Xs&& xs, X&& x) {
- return hana::any_of(static_cast<Xs&&>(xs),
- hana::equal.to(static_cast<X&&>(x)));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CONTAINS_HPP
diff --git a/contrib/restricted/boost/boost/hana/core.hpp b/contrib/restricted/boost/boost/hana/core.hpp
deleted file mode 100644
index fa280f3336..0000000000
--- a/contrib/restricted/boost/boost/hana/core.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/*!
-@file
-Defines the @ref group-core module.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CORE_HPP
-#define BOOST_HANA_CORE_HPP
-
-#include <boost/hana/core/common.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/is_a.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/core/when.hpp>
-
-#endif // !BOOST_HANA_CORE_HPP
diff --git a/contrib/restricted/boost/boost/hana/core/common.hpp b/contrib/restricted/boost/boost/hana/core/common.hpp
deleted file mode 100644
index c32de77feb..0000000000
--- a/contrib/restricted/boost/boost/hana/core/common.hpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/*!
-@file
-Defines `boost::hana::common` and `boost::hana::common_t`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CORE_COMMON_HPP
-#define BOOST_HANA_CORE_COMMON_HPP
-
-#include <boost/hana/fwd/core/common.hpp>
-
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/canonical_constant.hpp>
-#include <boost/hana/detail/std_common_type.hpp>
-#include <boost/hana/detail/void_t.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //////////////////////////////////////////////////////////////////////////
- // common
- //////////////////////////////////////////////////////////////////////////
- //! @cond
- template <typename T, typename U, typename>
- struct common : common<T, U, when<true>> { };
- //! @endcond
-
- template <typename T, typename U, bool condition>
- struct common<T, U, when<condition>>
- : detail::std_common_type<T, U>
- { };
-
- template <typename T>
- struct common<T, T> {
- using type = T;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // has_common
- //////////////////////////////////////////////////////////////////////////
- template <typename T, typename U, typename>
- struct has_common : std::false_type { };
-
- template <typename T, typename U>
- struct has_common<T, U, detail::void_t<typename common<T, U>::type>>
- : std::true_type
- { };
-
- //////////////////////////////////////////////////////////////////////////
- // Provided common data types for Constants
- //////////////////////////////////////////////////////////////////////////
- namespace constant_detail {
- //! @todo
- //! This is an awful hack to avoid having
- //! @code
- //! common<integral_constant_tag<int>, integral_constant_tag<long>>
- //! ==
- //! CanonicalConstant<long>
- //! @endcode
- template <typename A, typename B, typename C>
- struct which {
- using type = detail::CanonicalConstant<C>;
- };
-
- template <template <typename ...> class A, typename T, typename U, typename C>
- struct which<A<T>, A<U>, C> {
- using type = A<C>;
- };
- }
-
- template <typename A, typename B>
- struct common<A, B, when<
- hana::Constant<A>::value &&
- hana::Constant<B>::value &&
- has_common<typename A::value_type, typename B::value_type>::value
- >> {
- using type = typename constant_detail::which<
- A, B,
- typename common<typename A::value_type,
- typename B::value_type>::type
- >::type;
- };
-
- template <typename A, typename B>
- struct common<A, B, when<
- hana::Constant<A>::value &&
- !hana::Constant<B>::value &&
- has_common<typename A::value_type, B>::value
- >> {
- using type = typename common<typename A::value_type, B>::type;
- };
-
- template <typename A, typename B>
- struct common<A, B, when<
- !hana::Constant<A>::value &&
- hana::Constant<B>::value &&
- has_common<A, typename B::value_type>::value
- >> {
- using type = typename common<A, typename B::value_type>::type;
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CORE_COMMON_HPP
diff --git a/contrib/restricted/boost/boost/hana/core/default.hpp b/contrib/restricted/boost/boost/hana/core/default.hpp
deleted file mode 100644
index 45c70503c1..0000000000
--- a/contrib/restricted/boost/boost/hana/core/default.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*!
-@file
-Defines `boost::hana::default_` and `boost::hana::is_default`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CORE_DEFAULT_HPP
-#define BOOST_HANA_CORE_DEFAULT_HPP
-
-#include <boost/hana/fwd/core/default.hpp>
-
-#include <boost/hana/config.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename Method, typename>
- struct is_default : std::false_type { };
-
- template <typename Method>
- struct is_default<Method, decltype((void)
- static_cast<default_>(*(Method*)0)
- )>
- : std::true_type
- { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CORE_DEFAULT_HPP
diff --git a/contrib/restricted/boost/boost/hana/core/dispatch.hpp b/contrib/restricted/boost/boost/hana/core/dispatch.hpp
deleted file mode 100644
index 27a2fb493b..0000000000
--- a/contrib/restricted/boost/boost/hana/core/dispatch.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/*!
-@file
-Includes all the headers needed to setup tag-dispatching.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CORE_DISPATCH_HPP
-#define BOOST_HANA_CORE_DISPATCH_HPP
-
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/dispatch_if.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/when.hpp>
-
-#endif // !BOOST_HANA_CORE_DISPATCH_HPP
diff --git a/contrib/restricted/boost/boost/hana/core/is_a.hpp b/contrib/restricted/boost/boost/hana/core/is_a.hpp
deleted file mode 100644
index 019476ff0a..0000000000
--- a/contrib/restricted/boost/boost/hana/core/is_a.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*!
-@file
-Defines `boost::hana::is_a` and `boost::hana::is_an`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CORE_IS_A_HPP
-#define BOOST_HANA_CORE_IS_A_HPP
-
-#include <boost/hana/fwd/core/is_a.hpp>
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/tag_of.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //////////////////////////////////////////////////////////////////////////
- // is_a
- //////////////////////////////////////////////////////////////////////////
- template <typename DataType, typename T>
- struct is_a_t<DataType, T>
- : integral_constant<bool,
- std::is_same<DataType, typename hana::tag_of<T>::type>::value
- >
- { };
-
- template <typename DataType>
- struct is_a_t<DataType> {
- template <typename T>
- constexpr auto operator()(T const&) const
- { return hana::is_a<DataType, T>; }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CORE_IS_A_HPP
diff --git a/contrib/restricted/boost/boost/hana/core/make.hpp b/contrib/restricted/boost/boost/hana/core/make.hpp
deleted file mode 100644
index 30d21e337e..0000000000
--- a/contrib/restricted/boost/boost/hana/core/make.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*!
-@file
-Defines `boost::hana::make`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CORE_MAKE_HPP
-#define BOOST_HANA_CORE_MAKE_HPP
-
-#include <boost/hana/fwd/core/make.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/default.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Datatype, typename>
- struct make_impl : make_impl<Datatype, when<true>> { };
- //! @endcond
-
- template <typename Datatype, bool condition>
- struct make_impl<Datatype, when<condition>> : default_ {
- template <typename ...X>
- static constexpr auto make_helper(int, X&& ...x)
- -> decltype(Datatype(static_cast<X&&>(x)...))
- { return Datatype(static_cast<X&&>(x)...); }
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wunused-value"
- template <typename ...X>
- static constexpr auto make_helper(long, X&& ...) {
- static_assert((sizeof...(X), false),
- "there exists no constructor for the given data type");
- }
-#pragma clang diagnostic pop
-
- template <typename ...X>
- static constexpr decltype(auto) apply(X&& ...x)
- { return make_helper(int{}, static_cast<X&&>(x)...); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CORE_MAKE_HPP
diff --git a/contrib/restricted/boost/boost/hana/core/tag_of.hpp b/contrib/restricted/boost/boost/hana/core/tag_of.hpp
deleted file mode 100644
index 87406521cd..0000000000
--- a/contrib/restricted/boost/boost/hana/core/tag_of.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/*!
-@file
-Defines `boost::hana::tag_of` and `boost::hana::tag_of_t`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CORE_TAG_OF_HPP
-#define BOOST_HANA_CORE_TAG_OF_HPP
-
-#include <boost/hana/fwd/core/tag_of.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename T, typename>
- struct tag_of : tag_of<T, when<true>> { };
- //! @endcond
-
- namespace core_detail {
- template <typename ...>
- struct is_valid { static constexpr bool value = true; };
- }
-
- template <typename T, bool condition>
- struct tag_of<T, when<condition>> {
- using type = T;
- };
-
- template <typename T>
- struct tag_of<T, when<
- core_detail::is_valid<typename T::hana_tag>::value
- >> {
- using type = typename T::hana_tag;
- };
-
- template <typename T> struct tag_of<T const> : tag_of<T> { };
- template <typename T> struct tag_of<T volatile> : tag_of<T> { };
- template <typename T> struct tag_of<T const volatile> : tag_of<T> { };
- template <typename T> struct tag_of<T&> : tag_of<T> { };
- template <typename T> struct tag_of<T&&> : tag_of<T> { };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CORE_TAG_OF_HPP
diff --git a/contrib/restricted/boost/boost/hana/core/to.hpp b/contrib/restricted/boost/boost/hana/core/to.hpp
deleted file mode 100644
index 1b54115162..0000000000
--- a/contrib/restricted/boost/boost/hana/core/to.hpp
+++ /dev/null
@@ -1,196 +0,0 @@
-/*!
-@file
-Defines `boost::hana::to` and related utilities.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CORE_TO_HPP
-#define BOOST_HANA_CORE_TO_HPP
-
-#include <boost/hana/fwd/core/to.hpp>
-
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/common.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/detail/wrong.hpp>
-#include <boost/hana/unpack.hpp>
-#include <boost/hana/value.hpp>
-
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //////////////////////////////////////////////////////////////////////////
- // to
- //////////////////////////////////////////////////////////////////////////
- //! @cond
- template <typename To, typename From, typename>
- struct to_impl : to_impl<To, From, when<true>> { };
- //! @endcond
-
- namespace convert_detail {
- struct no_conversion { };
-
- template <typename To, typename From, typename = void>
- struct maybe_static_cast : no_conversion {
- template <typename X>
- static constexpr auto apply(X const&) {
- static_assert(detail::wrong<to_impl<To, From>, X>{},
- "no conversion is available between the provided types");
- }
- };
-
- template <typename To, typename From>
- struct maybe_static_cast<To, From, decltype((void)
- static_cast<To>(std::declval<From>())
- )> {
- template <typename X>
- static constexpr To apply(X&& x)
- { return static_cast<To>(static_cast<X&&>(x)); }
- };
- } // end namespace convert_detail
-
- template <typename To, typename From, bool condition>
- struct to_impl<To, From, when<condition>>
- : convert_detail::maybe_static_cast<To, From>
- { };
-
- template <typename To>
- struct to_impl<To, To> : embedding<> {
- template <typename X>
- static constexpr X apply(X&& x)
- { return static_cast<X&&>(x); }
- };
-
- //! @cond
- template <typename To>
- template <typename X>
- constexpr decltype(auto) to_t<To>::operator()(X&& x) const {
- using From = typename hana::tag_of<X>::type;
- return to_impl<To, From>::apply(static_cast<X&&>(x));
- }
- //! @endcond
-
-#define BOOST_HANA_DEFINE_EMBEDDING_IMPL(TO, FROM) \
- template <> \
- struct to_impl<TO, FROM> : embedding<> \
- { static constexpr TO apply(FROM x) { return x; } } \
-/**/
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(long double, double);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(long double, float);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(double , float);
-
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(signed long long, signed long);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(signed long long, signed int);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(signed long long, signed short);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(signed long long, signed char);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(signed long , signed int);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(signed long , signed short);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(signed long , signed char);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(signed int , signed short);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(signed int , signed char);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(signed short , signed char);
-
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(unsigned long long, unsigned long);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(unsigned long long, unsigned int);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(unsigned long long, unsigned short);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(unsigned long long, unsigned char);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(unsigned long , unsigned int);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(unsigned long , unsigned short);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(unsigned long , unsigned char);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(unsigned int , unsigned short);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(unsigned int , unsigned char);
- BOOST_HANA_DEFINE_EMBEDDING_IMPL(unsigned short , unsigned char);
-#undef BOOST_HANA_DEFINE_EMBEDDING_IMPL
-
- namespace detail {
- template <typename T>
- struct copy_char_signedness {
- using type = typename std::conditional<std::is_signed<char>::value,
- std::make_signed<T>, std::make_unsigned<T>
- >::type::type;
- };
- }
-
- // If `char` is signed, we define an embedding from `char` to any signed
- // integral type. Otherwise, we define one from `char` to any unsigned
- // integral type.
-#define BOOST_HANA_DEFINE_CHAR_EMBEDDING_IMPL(TO) \
- template <> \
- struct to_impl<detail::copy_char_signedness<TO>::type, char> \
- : embedding<> \
- { \
- static constexpr detail::copy_char_signedness<TO>::type \
- apply(char x) \
- { return x; } \
- } \
-/**/
- BOOST_HANA_DEFINE_CHAR_EMBEDDING_IMPL(long long);
- BOOST_HANA_DEFINE_CHAR_EMBEDDING_IMPL(long);
- BOOST_HANA_DEFINE_CHAR_EMBEDDING_IMPL(int);
- BOOST_HANA_DEFINE_CHAR_EMBEDDING_IMPL(short);
-#undef BOOST_HANA_DEFINE_CHAR_EMBEDDING_IMPL
-
- template <typename T>
- struct to_impl<T*, decltype(nullptr)> : embedding<> {
- static constexpr T* apply(decltype(nullptr)) { return nullptr; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // is_convertible
- //////////////////////////////////////////////////////////////////////////
- template <typename From, typename To, typename>
- struct is_convertible : std::true_type { };
-
- template <typename From, typename To>
- struct is_convertible<From, To, decltype((void)
- static_cast<convert_detail::no_conversion>(*(to_impl<To, From>*)0)
- )> : std::false_type { };
-
- //////////////////////////////////////////////////////////////////////////
- // is_embedded
- //////////////////////////////////////////////////////////////////////////
- template <typename From, typename To, typename>
- struct is_embedded : std::false_type { };
-
- template <typename From, typename To>
- struct is_embedded<From, To, decltype((void)
- static_cast<embedding<true>>(*(to_impl<To, From>*)0)
- )> : std::true_type { };
-
- //////////////////////////////////////////////////////////////////////////
- // Conversion for Constants
- //////////////////////////////////////////////////////////////////////////
- template <typename To, typename From>
- struct to_impl<To, From, when<
- hana::Constant<From>::value &&
- is_convertible<typename From::value_type, To>::value
- >> : embedding<is_embedded<typename From::value_type, To>::value> {
- template <typename X>
- static constexpr decltype(auto) apply(X const&)
- { return hana::to<To>(hana::value<X>()); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Foldable -> Sequence
- //////////////////////////////////////////////////////////////////////////
- template <typename S, typename F>
- struct to_impl<S, F, when<
- hana::Sequence<S>::value &&
- hana::Foldable<F>::value
- >> : embedding<Sequence<F>::value> {
- template <typename Xs>
- static constexpr decltype(auto) apply(Xs&& xs)
- { return hana::unpack(static_cast<Xs&&>(xs), hana::make<S>); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CORE_TO_HPP
diff --git a/contrib/restricted/boost/boost/hana/core/when.hpp b/contrib/restricted/boost/boost/hana/core/when.hpp
deleted file mode 100644
index 0e5ee8e4e0..0000000000
--- a/contrib/restricted/boost/boost/hana/core/when.hpp
+++ /dev/null
@@ -1,15 +0,0 @@
-/*!
-@file
-Defines `boost::hana::when` and `boost::hana::when_valid`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CORE_WHEN_HPP
-#define BOOST_HANA_CORE_WHEN_HPP
-
-#include <boost/hana/fwd/core/when.hpp>
-
-#endif // !BOOST_HANA_CORE_WHEN_HPP
diff --git a/contrib/restricted/boost/boost/hana/count.hpp b/contrib/restricted/boost/boost/hana/count.hpp
deleted file mode 100644
index b912c342db..0000000000
--- a/contrib/restricted/boost/boost/hana/count.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*!
-@file
-Defines `boost::hana::count`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_COUNT_HPP
-#define BOOST_HANA_COUNT_HPP
-
-#include <boost/hana/fwd/count.hpp>
-
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/count_if.hpp>
-#include <boost/hana/equal.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Value>
- constexpr auto count_t::operator()(Xs&& xs, Value&& value) const {
- using S = typename hana::tag_of<Xs>::type;
- using Count = BOOST_HANA_DISPATCH_IF(count_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::count(xs, value) requires 'xs' to be Foldable");
- #endif
-
- return Count::apply(static_cast<Xs&&>(xs), static_cast<Value&&>(value));
- }
- //! @endcond
-
- template <typename T, bool condition>
- struct count_impl<T, when<condition>> : default_ {
- template <typename Xs, typename Value>
- static constexpr auto apply(Xs&& xs, Value&& value) {
- return hana::count_if(static_cast<Xs&&>(xs),
- hana::equal.to(static_cast<Value&&>(value)));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_COUNT_HPP
diff --git a/contrib/restricted/boost/boost/hana/count_if.hpp b/contrib/restricted/boost/boost/hana/count_if.hpp
deleted file mode 100644
index e9ea4bc9c8..0000000000
--- a/contrib/restricted/boost/boost/hana/count_if.hpp
+++ /dev/null
@@ -1,92 +0,0 @@
-/*!
-@file
-Defines `boost::hana::count_if`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_COUNT_IF_HPP
-#define BOOST_HANA_COUNT_IF_HPP
-
-#include <boost/hana/fwd/count_if.hpp>
-
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/algorithm.hpp>
-#include <boost/hana/detail/fast_and.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/unpack.hpp>
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Pred>
- constexpr auto count_if_t::operator()(Xs&& xs, Pred&& pred) const {
- using S = typename hana::tag_of<Xs>::type;
- using CountIf = BOOST_HANA_DISPATCH_IF(count_if_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::count_if(xs, pred) requires 'xs' to be Foldable");
- #endif
-
- return CountIf::apply(static_cast<Xs&&>(xs),
- static_cast<Pred&&>(pred));
- }
- //! @endcond
-
- namespace detail {
- template <typename Pred>
- struct count_pred {
- Pred pred;
- template <typename ...Xs, typename = typename std::enable_if<
- detail::fast_and<
- Constant<decltype((*pred)(std::declval<Xs&&>()))>::value...
- >::value
- >::type>
- constexpr auto operator()(Xs&& ...xs) const {
- constexpr bool results[] = {false, // <-- avoid empty array
- static_cast<bool>(hana::value<decltype((*pred)(static_cast<Xs&&>(xs)))>())...
- };
- constexpr std::size_t total = detail::count(
- results, results + sizeof(results), true
- );
- return hana::size_c<total>;
- }
-
- template <typename ...Xs, typename = void, typename = typename std::enable_if<
- !detail::fast_and<
- Constant<decltype((*pred)(std::declval<Xs&&>()))>::value...
- >::value
- >::type>
- constexpr auto operator()(Xs&& ...xs) const {
- std::size_t total = 0;
- using Swallow = std::size_t[];
- (void)Swallow{0, ((*pred)(static_cast<Xs&&>(xs)) ? ++total : 0)...};
- return total;
- }
- };
- }
-
- template <typename T, bool condition>
- struct count_if_impl<T, when<condition>> : default_ {
- template <typename Xs, typename Pred>
- static constexpr decltype(auto) apply(Xs&& xs, Pred&& pred) {
- // We use a pointer instead of a reference to avoid a Clang ICE.
- return hana::unpack(static_cast<Xs&&>(xs),
- detail::count_pred<decltype(&pred)>{&pred}
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_COUNT_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/cycle.hpp b/contrib/restricted/boost/boost/hana/cycle.hpp
deleted file mode 100644
index c7b7a9ee32..0000000000
--- a/contrib/restricted/boost/boost/hana/cycle.hpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/*!
-@file
-Defines `boost::hana::cycle`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_CYCLE_HPP
-#define BOOST_HANA_CYCLE_HPP
-
-#include <boost/hana/fwd/cycle.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concat.hpp>
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/concept/monad_plus.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/detail/array.hpp>
-#include <boost/hana/empty.hpp>
-#include <boost/hana/length.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename N>
- constexpr auto cycle_t::operator()(Xs&& xs, N const& n) const {
- using M = typename hana::tag_of<Xs>::type;
- using Cycle = BOOST_HANA_DISPATCH_IF(cycle_impl<M>,
- hana::MonadPlus<M>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::MonadPlus<M>::value,
- "hana::cycle(xs, n) requires 'xs' to be a MonadPlus");
-
- static_assert(hana::IntegralConstant<N>::value,
- "hana::cycle(xs, n) requires 'n' to be an IntegralConstant");
- #endif
-
- static_assert(N::value >= 0,
- "hana::cycle(xs, n) requires 'n' to be non-negative");
-
- return Cycle::apply(static_cast<Xs&&>(xs), n);
- }
- //! @endcond
-
- namespace detail {
- template <typename M, std::size_t n, bool = n % 2 == 0>
- struct cycle_helper;
-
- template <typename M>
- struct cycle_helper<M, 0, true> {
- template <typename Xs>
- static constexpr auto apply(Xs const&)
- { return hana::empty<M>(); }
- };
-
- template <typename M, std::size_t n>
- struct cycle_helper<M, n, true> {
- template <typename Xs>
- static constexpr auto apply(Xs const& xs)
- { return cycle_helper<M, n/2>::apply(hana::concat(xs, xs)); }
- };
-
- template <typename M, std::size_t n>
- struct cycle_helper<M, n, false> {
- template <typename Xs>
- static constexpr auto apply(Xs const& xs)
- { return hana::concat(xs, cycle_helper<M, n-1>::apply(xs)); }
- };
- }
-
- template <typename M, bool condition>
- struct cycle_impl<M, when<condition>> : default_ {
- template <typename Xs, typename N>
- static constexpr auto apply(Xs const& xs, N const&) {
- constexpr std::size_t n = N::value;
- return detail::cycle_helper<M, n>::apply(xs);
- }
- };
-
- namespace detail {
- template <std::size_t N, std::size_t Len>
- struct cycle_indices {
- static constexpr auto compute_value() {
- detail::array<std::size_t, N * Len> indices{};
- // Avoid (incorrect) Clang warning about remainder by zero
- // in the loop below.
- std::size_t len = Len;
- for (std::size_t i = 0; i < N * Len; ++i)
- indices[i] = i % len;
- return indices;
- }
-
- static constexpr auto value = compute_value();
- };
- }
-
- template <typename S>
- struct cycle_impl<S, when<Sequence<S>::value>> {
- template <typename Indices, typename Xs, std::size_t ...i>
- static constexpr auto cycle_helper(Xs&& xs, std::index_sequence<i...>) {
- constexpr auto indices = Indices::value;
- (void)indices; // workaround GCC warning when sizeof...(i) == 0
- return hana::make<S>(hana::at_c<indices[i]>(xs)...);
- }
-
- template <typename Xs, typename N>
- static constexpr auto apply(Xs&& xs, N const&) {
- constexpr std::size_t n = N::value;
- constexpr std::size_t len = decltype(hana::length(xs))::value;
- using Indices = detail::cycle_indices<n, len>;
- return cycle_helper<Indices>(static_cast<Xs&&>(xs),
- std::make_index_sequence<n * len>{});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_CYCLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/define_struct.hpp b/contrib/restricted/boost/boost/hana/define_struct.hpp
deleted file mode 100644
index 04ea728603..0000000000
--- a/contrib/restricted/boost/boost/hana/define_struct.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-/*!
-@file
-Defines the `BOOST_HANA_DEFINE_STRUCT` macro.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DEFINE_STRUCT_HPP
-#define BOOST_HANA_DEFINE_STRUCT_HPP
-
-#include <boost/hana/fwd/define_struct.hpp>
-
-#include <boost/hana/detail/struct_macros.hpp>
-
-#endif // !BOOST_HANA_DEFINE_STRUCT_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/algorithm.hpp b/contrib/restricted/boost/boost/hana/detail/algorithm.hpp
deleted file mode 100644
index 1929847e7a..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/algorithm.hpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/*!
-@file
-Defines several `constexpr` algorithms.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_ALGORITHM_HPP
-#define BOOST_HANA_DETAIL_ALGORITHM_HPP
-
-#include <boost/hana/functional/placeholder.hpp>
-
-#include <boost/hana/config.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- // Do not call this swap, otherwise it can get picked up by ADL and conflict
- // with std::swap (see https://github.com/boostorg/hana/issues/297).
- template <typename T>
- constexpr void constexpr_swap(T& x, T& y) {
- auto tmp = x;
- x = y;
- y = std::move(tmp);
- }
-
- template <typename BidirIter>
- constexpr void reverse(BidirIter first, BidirIter last) {
- while (first != last) {
- if (first == --last)
- break;
- detail::constexpr_swap(*first, *last);
- ++first;
- }
- }
-
- template <typename BidirIter, typename BinaryPred>
- constexpr bool next_permutation(BidirIter first, BidirIter last,
- BinaryPred pred)
- {
- BidirIter i = last;
- if (first == last || first == --i)
- return false;
- while (true) {
- BidirIter ip1 = i;
- if (pred(*--i, *ip1)) {
- BidirIter j = last;
- while (!pred(*i, *--j))
- ;
- detail::constexpr_swap(*i, *j);
- detail::reverse(ip1, last);
- return true;
- }
- if (i == first) {
- detail::reverse(first, last);
- return false;
- }
- }
- }
-
- template <typename BidirIter>
- constexpr bool next_permutation(BidirIter first, BidirIter last)
- { return detail::next_permutation(first, last, hana::_ < hana::_); }
-
-
- template <typename InputIter1, typename InputIter2, typename BinaryPred>
- constexpr bool lexicographical_compare(InputIter1 first1, InputIter1 last1,
- InputIter2 first2, InputIter2 last2,
- BinaryPred pred)
- {
- for (; first2 != last2; ++first1, ++first2) {
- if (first1 == last1 || pred(*first1, *first2))
- return true;
- else if (pred(*first2, *first1))
- return false;
- }
- return false;
- }
-
- template <typename InputIter1, typename InputIter2>
- constexpr bool lexicographical_compare(InputIter1 first1, InputIter1 last1,
- InputIter2 first2, InputIter2 last2)
- { return detail::lexicographical_compare(first1, last1, first2, last2, hana::_ < hana::_); }
-
-
- template <typename InputIter1, typename InputIter2, typename BinaryPred>
- constexpr bool equal(InputIter1 first1, InputIter1 last1,
- InputIter2 first2, InputIter2 last2,
- BinaryPred pred)
- {
- for (; first1 != last1 && first2 != last2; ++first1, ++first2)
- if (!pred(*first1, *first2))
- return false;
- return first1 == last1 && first2 == last2;
- }
-
- template <typename InputIter1, typename InputIter2>
- constexpr bool equal(InputIter1 first1, InputIter1 last1,
- InputIter2 first2, InputIter2 last2)
- { return detail::equal(first1, last1, first2, last2, hana::_ == hana::_); }
-
-
- template <typename BidirIter, typename BinaryPred>
- constexpr void sort(BidirIter first, BidirIter last, BinaryPred pred) {
- if (first == last) return;
-
- BidirIter i = first;
- for (++i; i != last; ++i) {
- BidirIter j = i;
- auto t = *j;
- for (BidirIter k = i; k != first && pred(t, *--k); --j)
- *j = *k;
- *j = t;
- }
- }
-
- template <typename BidirIter>
- constexpr void sort(BidirIter first, BidirIter last)
- { detail::sort(first, last, hana::_ < hana::_); }
-
-
- template <typename InputIter, typename T>
- constexpr InputIter find(InputIter first, InputIter last, T const& value) {
- for (; first != last; ++first)
- if (*first == value)
- return first;
- return last;
- }
-
- template <typename InputIter, typename UnaryPred>
- constexpr InputIter find_if(InputIter first, InputIter last, UnaryPred pred) {
- for (; first != last; ++first)
- if (pred(*first))
- return first;
- return last;
- }
-
- template <typename ForwardIter, typename T>
- constexpr void iota(ForwardIter first, ForwardIter last, T value) {
- while (first != last) {
- *first++ = value;
- ++value;
- }
- }
-
- template <typename InputIt, typename T>
- constexpr std::size_t
- count(InputIt first, InputIt last, T const& value) {
- std::size_t n = 0;
- for (; first != last; ++first)
- if (*first == value)
- ++n;
- return n;
- }
-
- template <typename InputIt, typename T, typename F>
- constexpr T accumulate(InputIt first, InputIt last, T init, F f) {
- for (; first != last; ++first)
- init = f(init, *first);
- return init;
- }
-
- template <typename InputIt, typename T>
- constexpr T accumulate(InputIt first, InputIt last, T init) {
- return detail::accumulate(first, last, init, hana::_ + hana::_);
- }
-
- template <typename ForwardIt>
- constexpr ForwardIt min_element(ForwardIt first, ForwardIt last) {
- if (first == last)
- return last;
-
- ForwardIt smallest = first;
- ++first;
- for (; first != last; ++first)
- if (*first < *smallest)
- smallest = first;
- return smallest;
- }
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_ALGORITHM_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/any_of.hpp b/contrib/restricted/boost/boost/hana/detail/any_of.hpp
deleted file mode 100644
index de6b1c6ad2..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/any_of.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::any_of`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_ANY_OF_HPP
-#define BOOST_HANA_DETAIL_ANY_OF_HPP
-
-#include <boost/hana/config.hpp>
-
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- std::false_type expand(...);
-
- template <template <typename ...> class Predicate, typename ...T>
- decltype(expand(
- typename std::enable_if<!Predicate<T>::value, void*>::type{}...
- )) any_of_impl(int);
-
- template <template <typename ...> class Predicate, typename ...T>
- std::true_type any_of_impl(...);
-
- //! @ingroup group-details
- //! Returns whether the `Predicate` is satisfied by any of the `T...`.
- //!
- //! This metafunction will short-circuit the evaluation at the first
- //! type satisfying the predicate, if such a type exists.
- //!
- //!
- //! @note
- //! The implementation technique used here was originally shown to
- //! me by Eric Fiselier. All credits where due.
- template <template <typename ...> class Predicate, typename ...T>
- struct any_of
- : decltype(any_of_impl<Predicate, T...>(int{}))
- { };
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_ANY_OF_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/array.hpp b/contrib/restricted/boost/boost/hana/detail/array.hpp
deleted file mode 100644
index 8b2c276f5e..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/array.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::array`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_ARRAY_HPP
-#define BOOST_HANA_DETAIL_ARRAY_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/algorithm.hpp>
-#include <boost/hana/functional/placeholder.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <typename N>
- constexpr N factorial(N n) {
- N result = 1;
- while (n != 0)
- result *= n--;
- return result;
- }
-
- //! @ingroup group-details
- //! A minimal `std::array` with better `constexpr` support.
- //!
- //! We also provide some algorithms from the `constexpr/algorithm.hpp`
- //! header as member functions to make them easier to use in constexpr
- //! contexts, since a `constexpr` `array` can't be mutated in place.
- template <typename T, std::size_t Size>
- struct array {
- T elems_[Size > 0 ? Size : 1];
-
- constexpr T& operator[](std::size_t n)
- { return elems_[n]; }
-
- constexpr T const& operator[](std::size_t n) const
- { return elems_[n]; }
-
- constexpr std::size_t size() const noexcept
- { return Size; }
-
- constexpr T* begin() noexcept { return elems_; }
- constexpr T const* begin() const noexcept { return elems_; }
- constexpr T* end() noexcept { return elems_ + Size; }
- constexpr T const* end() const noexcept { return elems_ + Size; }
-
- // Algorithms from constexpr/algorithm.hpp
- constexpr array reverse() const {
- array result = *this;
- detail::reverse(result.begin(), result.end());
- return result;
- }
-
- template <typename BinaryPred>
- constexpr auto permutations(BinaryPred pred) const {
- array<array<T, Size>, detail::factorial(Size)> result{};
- auto out = result.begin();
- array copy = *this;
-
- do *out++ = copy;
- while (detail::next_permutation(copy.begin(), copy.end(), pred));
-
- return result;
- }
-
- constexpr auto permutations() const
- { return this->permutations(hana::_ < hana::_); }
-
-
- template <typename BinaryPred>
- constexpr auto sort(BinaryPred pred) const {
- array result = *this;
- detail::sort(result.begin(), result.end(), pred);
- return result;
- }
-
- constexpr auto sort() const
- { return this->sort(hana::_ < hana::_); }
-
- template <typename U>
- constexpr auto iota(U value) const {
- array result = *this;
- detail::iota(result.begin(), result.end(), value);
- return result;
- }
- };
-
- template <typename T, std::size_t M, typename U, std::size_t N>
- constexpr bool operator==(array<T, M> a, array<U, N> b)
- { return M == N && detail::equal(a.begin(), a.end(), b.begin(), b.end()); }
-
- template <typename T, std::size_t M, typename U, std::size_t N>
- constexpr bool operator<(array<T, M> a, array<U, N> b) {
- return M < N || detail::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end());
- }
-
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_ARRAY_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/canonical_constant.hpp b/contrib/restricted/boost/boost/hana/detail/canonical_constant.hpp
deleted file mode 100644
index 07d636fa17..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/canonical_constant.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::CanonicalConstant`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_CANONICAL_CONSTANT_HPP
-#define BOOST_HANA_DETAIL_CANONICAL_CONSTANT_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- //! @ingroup group-details
- //! Tag representing a canonical `Constant`.
- //!
- //! This is an implementation detail used to provide many models for
- //! stuff like `Monoid`, `Group`, etc. To create a `CanonicalConstant`,
- //! simply create an object with a nested `hana_tag` equal to the proper
- //! specialization of `CanonicalConstant<T>`, and then also provide a
- //! `constexpr` static member `::%value` holding the value of the constant.
- template <typename T>
- struct CanonicalConstant {
- using value_type = T;
- };
-} BOOST_HANA_NAMESPACE_END
-
-
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/when.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //////////////////////////////////////////////////////////////////////////
- // Constant
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct value_impl<detail::CanonicalConstant<T>> {
- template <typename X>
- static constexpr decltype(auto) apply()
- { return X::value; }
- };
-
- namespace detail {
- template <typename T, typename X>
- struct canonical_constant {
- static constexpr auto value = hana::to<T>(hana::value<X>());
- using hana_tag = detail::CanonicalConstant<T>;
- };
- }
-
- template <typename T, typename C>
- struct to_impl<detail::CanonicalConstant<T>, C, when<
- hana::Constant<C>::value &&
- is_convertible<typename C::value_type, T>::value
- >>
- : embedding<is_embedded<typename C::value_type, T>::value>
- {
- template <typename X>
- static constexpr detail::canonical_constant<T, X> apply(X const&)
- { return {}; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // IntegralConstant (when value_type is integral)
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct IntegralConstant<detail::CanonicalConstant<T>> {
- static constexpr bool value = std::is_integral<T>::value;
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_CANONICAL_CONSTANT_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/concepts.hpp b/contrib/restricted/boost/boost/hana/detail/concepts.hpp
deleted file mode 100644
index d7b48bc5ec..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/concepts.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*!
-@file
-Defines concepts from the Standard library.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_CONCEPTS_HPP
-#define BOOST_HANA_DETAIL_CONCEPTS_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/std_common_type.hpp>
-#include <boost/hana/detail/void_t.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- //! @cond
- //////////////////////////////////////////////////////////////////////////
- // EqualityComparable
- //////////////////////////////////////////////////////////////////////////
- template <typename T, typename U = T, typename = void>
- struct EqualityComparable : std::false_type { };
-
- template <typename T>
- struct EqualityComparable<T, T, detail::void_t<
- decltype(static_cast<T&&>(*(T*)0) == static_cast<T&&>(*(T*)0) ? 0:0),
- decltype(static_cast<T&&>(*(T*)0) != static_cast<T&&>(*(T*)0) ? 0:0)
- >> : std::true_type { };
-
- template <typename T, typename U>
- struct EqualityComparable<T, U, typename std::enable_if<
- !std::is_same<T, U>::value, detail::void_t<
- decltype(static_cast<T&&>(*(T*)0) == static_cast<U&&>(*(U*)0) ? 0:0),
- decltype(static_cast<U&&>(*(U*)0) == static_cast<T&&>(*(T*)0) ? 0:0),
- decltype(static_cast<T&&>(*(T*)0) != static_cast<U&&>(*(U*)0) ? 0:0),
- decltype(static_cast<U&&>(*(U*)0) != static_cast<T&&>(*(T*)0) ? 0:0),
- typename detail::std_common_type<T, U>::type
- >>::type> : std::integral_constant<bool,
- EqualityComparable<T>::value &&
- EqualityComparable<U>::value &&
- EqualityComparable<typename detail::std_common_type<T, U>::type>::value
- > { };
-
-
- //////////////////////////////////////////////////////////////////////////
- // LessThanComparable
- //////////////////////////////////////////////////////////////////////////
- template <typename T, typename U = T, typename = void>
- struct LessThanComparable : std::false_type { };
-
- template <typename T>
- struct LessThanComparable<T, T, detail::void_t<
- decltype(static_cast<T&&>(*(T*)0) < static_cast<T&&>(*(T*)0) ? 0:0)
- >> : std::true_type { };
-
- template <typename T, typename U>
- struct LessThanComparable<T, U, std::enable_if_t<
- !std::is_same<T, U>::value,
- detail::void_t<
- decltype(static_cast<T&&>(*(T*)0) < static_cast<U&&>(*(U*)0) ? 0:0),
- decltype(static_cast<U&&>(*(U*)0) < static_cast<T&&>(*(T*)0) ? 0:0),
- typename detail::std_common_type<T, U>::type
- >
- >>
- : std::integral_constant<bool,
- LessThanComparable<T>::value &&
- LessThanComparable<U>::value &&
- LessThanComparable<typename detail::std_common_type<T, U>::type>::value
- >
- { };
- //! @endcond
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_CONCEPTS_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/create.hpp b/contrib/restricted/boost/boost/hana/detail/create.hpp
deleted file mode 100644
index 354e5590ca..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/create.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::create`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_CREATE_HPP
-#define BOOST_HANA_DETAIL_CREATE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- //! @ingroup group-details
- //! Implementation of the generic `std::make_xxx` pattern for arbitrary
- //! `xxx`s.
- template <template <typename ...> class T>
- struct create {
- template <typename ...X>
- constexpr T<typename detail::decay<X>::type...>
- operator()(X&& ...x) const {
- return T<typename detail::decay<X>::type...>{
- static_cast<X&&>(x)...
- };
- }
- };
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_CREATE_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/decay.hpp b/contrib/restricted/boost/boost/hana/detail/decay.hpp
deleted file mode 100644
index 7d8affa0b2..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/decay.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*!
-@file
-Defines a replacement for `std::decay`, which is sometimes too slow at
-compile-time.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_DECAY_HPP
-#define BOOST_HANA_DETAIL_DECAY_HPP
-
-#include <boost/hana/config.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- //! @ingroup group-details
- //! Equivalent to `std::decay`, except faster.
- //!
- //! `std::decay` in libc++ is implemented in a suboptimal way. Since
- //! this is used literally everywhere by the `make<...>` functions, it
- //! is very important to keep this as efficient as possible.
- //!
- //! @note
- //! `std::decay` is still being used in some places in the library.
- //! Indeed, this is a peephole optimization and it would not be wise
- //! to clutter the code with our own implementation of `std::decay`,
- //! except when this actually makes a difference in compile-times.
- template <typename T, typename U = typename std::remove_reference<T>::type>
- struct decay {
- using type = typename std::remove_cv<U>::type;
- };
-
- template <typename T, typename U>
- struct decay<T, U[]> { using type = U*; };
- template <typename T, typename U, std::size_t N>
- struct decay<T, U[N]> { using type = U*; };
-
- template <typename T, typename R, typename ...A>
- struct decay<T, R(A...)> { using type = R(*)(A...); };
- template <typename T, typename R, typename ...A>
- struct decay<T, R(A..., ...)> { using type = R(*)(A..., ...); };
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_DECAY_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/dispatch_if.hpp b/contrib/restricted/boost/boost/hana/detail/dispatch_if.hpp
deleted file mode 100644
index 6e95f58878..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/dispatch_if.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*!
-@file
-Defines `BOOST_HANA_DISPATCH_IF`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_DISPATCH_IF_HPP
-#define BOOST_HANA_DETAIL_DISPATCH_IF_HPP
-
-#include <boost/hana/config.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- struct deleted_implementation {
- template <typename ...T>
- static constexpr auto apply(T&& ...) = delete;
- };
-
- //! @ingroup group-details
- //! Dispatch to the given implementation method only when a condition is
- //! satisfied.
- //!
- //! If the condition is satisfied, this macro is equivalent to the type
- //! `IMPL`. Otherwise, it is equivalent to a type with a deleted static
- //! function named `apply`. When a tag-dispatching error happens, the
- //! condition should be false and the deleted static function `apply`
- //! will prevent the compiler from generating too much garbage.
- //!
- //! @note
- //! When `BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS` is defined, the
- //! condition is always ignored and this macro expands to the
- //! implementation only.
- //!
- //! @remark
- //! This must be implemented as a macro, because we don't want the
- //! condition to be evaluated at all when
- //! `BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS` is defined.
-#ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- #define BOOST_HANA_DISPATCH_IF(IMPL, ...) \
- ::std::conditional_t< \
- (__VA_ARGS__), \
- IMPL, \
- ::boost::hana::deleted_implementation \
- > \
- /**/
-#else
- #define BOOST_HANA_DISPATCH_IF(IMPL, ...) IMPL
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_DISPATCH_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/ebo.hpp b/contrib/restricted/boost/boost/hana/detail/ebo.hpp
deleted file mode 100644
index 01ca009ce2..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/ebo.hpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::ebo`.
-
-@copyright Louis Dionne 2013-2016
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_EBO_HPP
-#define BOOST_HANA_DETAIL_EBO_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/intrinsics.hpp>
-
-
-namespace _hana {
- //////////////////////////////////////////////////////////////////////////
- // ebo<K, V>
- //
- // Building block to implement the Empty Base Optimization (EBO). We
- // use a short name and define it in a short namespace to reduce
- // symbol lengths, since this type is used as a building block for
- // other widely used types such as `hana::pair`.
- //
- // When available, we use compiler intrinsics to reduce the number
- // of instantiations.
- //
- // `ebo` provides a limited set of constructors to reduce instantiations.
- // Also, the constructors are open-ended and they do not check for the
- // validity of their arguments, again to reduce compile-time costs.
- // Users of `ebo` should make sure that they only try to construct an
- // `ebo` from a compatible value.
- //
- // EBOs can be indexed using an arbitrary type. The recommended usage is
- // to define an integrap constant wrapper for the specific container using
- // EBO, and then index using that wrapper:
- //
- // template <int> struct idx; // wrapper for tuple
- // template <typename ...T>
- // struct tuple : ebo<idx<0>, T0>, ebo<idx<1>, T1>, ... { };
- //
- // The reason for defining one wrapper per container is to avoid any issues
- // that can arise when using `ebo_get`, which casts to the base class. If
- // `tuple` and `pair` are inheritting from `ebo`s with the same indexing
- // scheme, trying to use `ebo_get` on a tuple of pairs will trigger an
- // ambiguous base class conversion, since both tuple and pair inherit
- // from `ebo`s with the same keys.
- //////////////////////////////////////////////////////////////////////////
- template <typename K, typename V, bool =
- BOOST_HANA_TT_IS_EMPTY(V) && !BOOST_HANA_TT_IS_FINAL(V)
- >
- struct ebo;
-
- // Specialize storage for empty types
- template <typename K, typename V>
- struct ebo<K, V, true> : V {
- constexpr ebo() { }
-
- template <typename T>
- explicit constexpr ebo(T&& t)
- : V(static_cast<T&&>(t))
- { }
- };
-
- // Specialize storage for non-empty types
- template <typename K, typename V>
- struct ebo<K, V, false> {
- constexpr ebo() : data_() { }
-
- template <typename T>
- explicit constexpr ebo(T&& t)
- : data_(static_cast<T&&>(t))
- { }
-
- V data_;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // ebo_get
- //////////////////////////////////////////////////////////////////////////
- template <typename K, typename V>
- constexpr V const& ebo_get(ebo<K, V, true> const& x)
- { return x; }
-
- template <typename K, typename V>
- constexpr V& ebo_get(ebo<K, V, true>& x)
- { return x; }
-
- template <typename K, typename V>
- constexpr V&& ebo_get(ebo<K, V, true>&& x)
- { return static_cast<V&&>(x); }
-
-
- template <typename K, typename V>
- constexpr V const& ebo_get(ebo<K, V, false> const& x)
- { return x.data_; }
-
- template <typename K, typename V>
- constexpr V& ebo_get(ebo<K, V, false>& x)
- { return x.data_; }
-
- template <typename K, typename V>
- constexpr V&& ebo_get(ebo<K, V, false>&& x)
- { return static_cast<V&&>(x.data_); }
-} // end namespace _hana
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace detail {
- using ::_hana::ebo;
- using ::_hana::ebo_get;
- }
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_EBO_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/fast_and.hpp b/contrib/restricted/boost/boost/hana/detail/fast_and.hpp
deleted file mode 100644
index ebd0389df3..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/fast_and.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::fast_and`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_FAST_AND_HPP
-#define BOOST_HANA_DETAIL_FAST_AND_HPP
-
-#include <boost/hana/config.hpp>
-
-#include <type_traits>
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wunused-value"
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <bool ...b>
- struct fast_and
- : std::is_same<fast_and<b...>, fast_and<(b, true)...>>
- { };
-} BOOST_HANA_NAMESPACE_END
-
-#pragma clang diagnostic pop
-
-#endif // !BOOST_HANA_DETAIL_FAST_AND_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/first_unsatisfied_index.hpp b/contrib/restricted/boost/boost/hana/detail/first_unsatisfied_index.hpp
deleted file mode 100644
index e42cc598e5..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/first_unsatisfied_index.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::first_unsatisfied_index`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_FIRST_UNSATISFIED_INDEX_HPP
-#define BOOST_HANA_DETAIL_FIRST_UNSATISFIED_INDEX_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/value.hpp>
-
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <bool, typename Pred, typename ...Xs>
- struct find_tail_size;
-
- template <typename Pred, typename X, typename ...Xs>
- struct find_tail_size<true, Pred, X, Xs...> {
- static constexpr int value = find_tail_size<
- static_cast<bool>(hana::value<decltype(std::declval<Pred>()(std::declval<X>()))>()),
- Pred, Xs...
- >::value;
- };
-
- template <typename Pred>
- struct find_tail_size<true, Pred> {
- static constexpr int value = -1;
- };
-
- template <typename Pred, typename ...Xs>
- struct find_tail_size<false, Pred, Xs...> {
- static constexpr int value = sizeof...(Xs);
- };
-
- //! @ingroup group-details
- //! Returns the index of the first element which does not satisfy `Pred`,
- //! or `sizeof...(Xs)` if no such element exists.
- template <typename Pred>
- struct first_unsatisfied_index {
- template <typename ...Xs>
- constexpr auto operator()(Xs&& ...) const {
- return hana::size_c<
- sizeof...(Xs) - 1 - find_tail_size<true, Pred, Xs&&...>::value
- >;
- }
- };
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_FIRST_UNSATISFIED_INDEX_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/has_common_embedding.hpp b/contrib/restricted/boost/boost/hana/detail/has_common_embedding.hpp
deleted file mode 100644
index ffaf6908b8..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/has_common_embedding.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::has_[nontrivial_]common_embedding`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_HAS_COMMON_EMBEDDING_HPP
-#define BOOST_HANA_DETAIL_HAS_COMMON_EMBEDDING_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/common.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/detail/void_t.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <template <typename...> class Concept, typename T, typename U, typename = void>
- struct has_common_embedding_impl : std::false_type { };
-
- template <template <typename...> class Concept, typename T, typename U>
- struct has_common_embedding_impl<Concept, T, U, detail::void_t<
- typename common<T, U>::type
- >> {
- using Common = typename common<T, U>::type;
- using type = std::integral_constant<bool,
- Concept<T>::value &&
- Concept<U>::value &&
- Concept<Common>::value &&
- is_embedded<T, Common>::value &&
- is_embedded<U, Common>::value
- >;
- };
-
- //! @ingroup group-details
- //! Returns whether `T` and `U` both have an embedding into a
- //! common type.
- //!
- //! If `T` and `U` do not have a common-type, this metafunction returns
- //! false.
- template <template <typename...> class Concept, typename T, typename U>
- using has_common_embedding = typename has_common_embedding_impl<Concept, T, U>::type;
-
- template <template <typename...> class Concept, typename T, typename U>
- struct has_nontrivial_common_embedding_impl
- : has_common_embedding_impl<Concept, T, U>
- { };
-
- template <template <typename...> class Concept, typename T>
- struct has_nontrivial_common_embedding_impl<Concept, T, T>
- : std::false_type
- { };
-
- //! @ingroup group-details
- //! Returns whether `T` and `U` are distinct and both have an embedding
- //! into a common type.
- //!
- //! If `T` and `U` do not have a common-type, this metafunction returns
- //! false.
- template <template <typename...> class Concept, typename T, typename U>
- using has_nontrivial_common_embedding =
- typename has_nontrivial_common_embedding_impl<Concept, T, U>::type;
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_HAS_COMMON_EMBEDDING_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/has_duplicates.hpp b/contrib/restricted/boost/boost/hana/detail/has_duplicates.hpp
deleted file mode 100644
index ff9f080482..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/has_duplicates.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::has_duplicates`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_HAS_DUPLICATES_HPP
-#define BOOST_HANA_DETAIL_HAS_DUPLICATES_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/fast_and.hpp>
-#include <boost/hana/equal.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <typename T, typename ...U>
- constexpr std::size_t pack_count() {
- std::size_t c = 0;
- std::size_t expand[] = {0, // avoid empty array
- (decltype(hana::equal(std::declval<T>(), std::declval<U>()))::value
- ? ++c
- : c)...
- };
- (void)expand;
-
- return c;
- }
-
- //! @ingroup group-details
- //! Returns whether any of the `T`s are duplicate w.r.t. `hana::equal`.
- //!
- //! In particular, this does not check whether all of the `T`s are unique
- //! as _types_, but rather whether they are unique when compared as
- //! `hana::equal(std::declval<T>(), std::declval<U>())`. This assumes
- //! the comparison to return an `IntegralConstant` that can be explicitly
- //! converted to `bool`.
- //!
- //! @note
- //! Since this utility is mostly used in assertions to check that there
- //! are no duplicates in a sequence, we expect it to return `false` most
- //! of the time (otherwise we will assert). Hence, this implementation is
- //! biased towards the fact that we __will__ have to compare every pair of
- //! elements in most cases, and it does not try to be lazy.
- //!
- //! @todo
- //! This implementation is O(n^2). We could do it in O(n), but that would
- //! require a more elaborate setup including storage with O(1) lookup
- //! (which could be based on a compile-time hash). If we implement such
- //! storage for associative sequences, we could use it to optimize this.
- template <typename ...T>
- struct has_duplicates {
- static constexpr bool value =
- sizeof...(T) > 0 &&
- !detail::fast_and<(detail::pack_count<T, T...>() == 1)...>::value
- ;
- };
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_HAS_DUPLICATES_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/hash_table.hpp b/contrib/restricted/boost/boost/hana/detail/hash_table.hpp
deleted file mode 100644
index 19a85dd764..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/hash_table.hpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::hash_table`.
-
-@copyright Louis Dionne 2016
-@copyright Jason Rice 2016
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_HASH_TABLE_HPP
-#define BOOST_HANA_DETAIL_HASH_TABLE_HPP
-
-#include <boost/hana/equal.hpp>
-#include <boost/hana/ext/std/integer_sequence.hpp>
-#include <boost/hana/ext/std/integral_constant.hpp>
-#include <boost/hana/find_if.hpp>
-#include <boost/hana/fold_left.hpp>
-#include <boost/hana/hash.hpp>
-#include <boost/hana/optional.hpp>
-#include <boost/hana/range.hpp>
-#include <boost/hana/type.hpp>
-#include <boost/hana/value.hpp>
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <typename Hash, std::size_t ...i>
- struct bucket { };
-
- template <typename ...Buckets>
- struct hash_table
- : Buckets...
- { };
-
- // find_indices:
- // Returns an `index_sequence` containing possible indices for the given
- // `Key` in the `Map`.
- template <typename Hash, std::size_t ...i>
- std::index_sequence<i...> find_indices_impl(bucket<Hash, i...> const&);
-
- template <typename Hash>
- std::index_sequence<> find_indices_impl(...);
-
- template <typename Map, typename Key>
- struct find_indices {
- using Hash = typename decltype(hana::hash(std::declval<Key>()))::type;
- using type = decltype(detail::find_indices_impl<Hash>(std::declval<Map>()));
- };
- // end find_indices
-
- // find_index:
- // Returns the actual index of a `Key` in the `Map`. The type of the key
- // associated to any given index must be retrievable with the `KeyAtIndex`
- // alias.
- template <template <std::size_t> class KeyAtIndex, typename Key>
- struct find_pred {
- template <typename Index>
- auto operator()(Index const&) const -> decltype(
- hana::equal(std::declval<KeyAtIndex<Index::value>>(),
- std::declval<Key>())
- );
- };
-
- template <typename Indices, typename Key, template <std::size_t> class KeyAtIndex>
- struct find_index_impl {
- using type = decltype(hana::find_if(Indices{}, find_pred<KeyAtIndex, Key>{}));
- };
-
- // This is a peephole optimization for buckets that have a single entry.
- // It provides a nice speedup in the at_key.number_of_lookups benchmark.
- // It is perhaps possible to make this part of `find_if` itself, but we
- // should make sure that we retain that speedup.
- template <std::size_t i, typename Key, template <std::size_t> class KeyAtIndex>
- struct find_index_impl<std::index_sequence<i>, Key, KeyAtIndex> {
- using Equal = decltype(
- hana::equal(std::declval<KeyAtIndex<i>>(),
- std::declval<Key>())
- );
- using type = typename std::conditional<Equal::value,
- hana::optional<std::integral_constant<std::size_t, i>>,
- hana::optional<>
- >::type;
- };
-
- template <typename Map, typename Key, template <std::size_t> class KeyAtIndex>
- struct find_index {
- using Indices = typename find_indices<Map, Key>::type;
- using type = typename find_index_impl<Indices, Key, KeyAtIndex>::type;
- };
- // end find_index
-
- // bucket_insert:
- // Inserts the given `Index` into the bucket of the `Map` in which `Key` falls.
- template <typename Bucket, typename Hash, std::size_t Index>
- struct update_bucket {
- using type = Bucket;
- };
-
- template <std::size_t ...i, typename Hash, std::size_t Index>
- struct update_bucket<bucket<Hash, i...>, Hash, Index> {
- using type = bucket<Hash, i..., Index>;
- };
-
- template <typename Map, typename Key, std::size_t Index, bool =
- (find_indices<Map, Key>::type::size() > 0)
- >
- struct bucket_insert;
-
- template <typename ...Buckets, typename Key, std::size_t Index>
- struct bucket_insert<hash_table<Buckets...>, Key, Index, true> {
- // There is a bucket for that Hash; append the new index to it.
- using Hash = typename decltype(hana::hash(std::declval<Key>()))::type;
- using type = hash_table<typename update_bucket<Buckets, Hash, Index>::type...>;
- };
-
- template <typename ...Buckets, typename Key, std::size_t Index>
- struct bucket_insert<hash_table<Buckets...>, Key, Index, false> {
- // There is no bucket for that Hash; insert a new bucket.
- using Hash = typename decltype(hana::hash(std::declval<Key>()))::type;
- using type = hash_table<Buckets..., bucket<Hash, Index>>;
- };
- // end bucket_insert
-
- // make_hash_table:
- // Creates a `hash_table` type able of holding the given number of
- // elements. The type of the key associated to any given index must
- // be retrievable using the `KeyAtIndex` alias. All the keys must
- // be distinct and have different hashes too.
- template <template <std::size_t> class KeyAtIndex, std::size_t N,
- typename Indices = std::make_index_sequence<N>>
- struct make_hash_table;
-
- template <template <std::size_t> class KeyAtIndex, std::size_t N, std::size_t ...i>
- struct make_hash_table<KeyAtIndex, N, std::index_sequence<i...>> {
- using type = hash_table<
- bucket<typename decltype(hana::hash(std::declval<KeyAtIndex<i>>()))::type, i>...
- >;
- };
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_HASH_TABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/index_if.hpp b/contrib/restricted/boost/boost/hana/detail/index_if.hpp
deleted file mode 100644
index f643eb76ff..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/index_if.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::index_if`.
-
-@copyright Louis Dionne 2013-2017
-@copyright Jason Rice 2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_INDEX_IF_HPP
-#define BOOST_HANA_DETAIL_INDEX_IF_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/optional.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <std::size_t i, std::size_t N, bool Done>
- struct index_if_helper;
-
- template <std::size_t i, std::size_t N>
- struct index_if_helper<i, N, false> {
- template <typename Pred, typename X1, typename ...Xs>
- using f = typename index_if_helper<i + 1, N,
- static_cast<bool>(detail::decay<decltype(
- std::declval<Pred>()(std::declval<X1>()))>::type::value)
- >::template f<Pred, Xs...>;
- };
-
- template <std::size_t N>
- struct index_if_helper<N, N, false> {
- template <typename ...>
- using f = hana::optional<>;
- };
-
- template <std::size_t i, std::size_t N>
- struct index_if_helper<i, N, true> {
- template <typename ...>
- using f = hana::optional<hana::size_t<i - 1>>;
- };
-
- template <typename Pred, typename ...Xs>
- struct index_if {
- using type = typename index_if_helper<0, sizeof...(Xs), false>
- ::template f<Pred, Xs...>;
- };
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_INDEX_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/integral_constant.hpp b/contrib/restricted/boost/boost/hana/detail/integral_constant.hpp
deleted file mode 100644
index 6fa7735164..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/integral_constant.hpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/*!
-@file
-Defines the barebones `boost::hana::integral_constant` template, but no
-operations on it.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_INTEGRAL_CONSTANT_HPP
-#define BOOST_HANA_DETAIL_INTEGRAL_CONSTANT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/operators/adl.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Tag representing `hana::integral_constant`.
- //! @relates hana::integral_constant
- template <typename T>
- struct integral_constant_tag {
- using value_type = T;
- };
-
- namespace ic_detail {
- template <typename T, T v>
- struct with_index_t {
- template <typename F>
- constexpr void operator()(F&& f) const;
- };
-
- template <typename T, T v>
- struct times_t {
- static constexpr with_index_t<T, v> with_index{};
-
- template <typename F>
- constexpr void operator()(F&& f) const;
- };
- }
-
- //! @ingroup group-datatypes
- //! Compile-time value of an integral type.
- //!
- //! An `integral_constant` is an object that represents a compile-time
- //! integral value. As the name suggests, `hana::integral_constant` is
- //! basically equivalent to `std::integral_constant`, except that
- //! `hana::integral_constant` also provide other goodies to make them
- //! easier to use, like arithmetic operators and similar features. In
- //! particular, `hana::integral_constant` is guaranteed to inherit from
- //! the corresponding `std::integral_constant`, and hence have the same
- //! members and capabilities. The sections below explain the extensions
- //! to `std::integral_constant` provided by `hana::integral_constant`.
- //!
- //!
- //! Arithmetic operators
- //! --------------------
- //! `hana::integral_constant` provides arithmetic operators that return
- //! `hana::integral_constant`s to ease writing compile-time arithmetic:
- //! @snippet example/integral_constant.cpp operators
- //!
- //! It is pretty important to realize that these operators return other
- //! `integral_constant`s, not normal values of an integral type.
- //! Actually, all those operators work pretty much in the same way.
- //! Simply put, for an operator `@`,
- //! @code
- //! integral_constant<T, x>{} @ integral_constant<T, y>{} == integral_constant<T, x @ y>{}
- //! @endcode
- //!
- //! The fact that the operators return `Constant`s is very important
- //! because it allows all the information that's known at compile-time
- //! to be conserved as long as it's only used with other values known at
- //! compile-time. It is also interesting to observe that whenever an
- //! `integral_constant` is combined with a normal runtime value, the
- //! result will be a runtime value (because of the implicit conversion).
- //! In general, this gives us the following table
- //!
- //! left operand | right operand | result
- //! :-----------------: | :-----------------: | :-----------------:
- //! `integral_constant` | `integral_constant` | `integral_constant`
- //! `integral_constant` | runtime | runtime
- //! runtime | `integral_constant` | runtime
- //! runtime | runtime | runtime
- //!
- //! The full range of provided operators is
- //! - Arithmetic: binary `+`, binary `-`, `/`, `*`, `%`, unary `+`, unary `-`
- //! - Bitwise: `~`, `&`, `|`, `^`, `<<`, `>>`
- //! - Comparison: `==`, `!=`, `<`, `<=`, `>`, `>=`
- //! - %Logical: `||`, `&&`, `!`
- //!
- //!
- //! Construction with user-defined literals
- //! ---------------------------------------
- //! `integral_constant`s of type `long long` can be created with the
- //! `_c` user-defined literal, which is contained in the `literals`
- //! namespace:
- //! @snippet example/integral_constant.cpp literals
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! 1. `Constant` and `IntegralConstant`\n
- //! An `integral_constant` is a model of the `IntegralConstant` concept in
- //! the most obvious way possible. Specifically,
- //! @code
- //! integral_constant<T, v>::value == v // of type T
- //! @endcode
- //! The model of `Constant` follows naturally from the model of `IntegralConstant`, i.e.
- //! @code
- //! value<integral_constant<T, v>>() == v // of type T
- //! @endcode
- //!
- //! 2. `Comparable`, `Orderable`, `Logical`, `Monoid`, `Group`, `Ring`, and `EuclideanRing`, `Hashable`\n
- //! Those models are exactly those provided for `Constant`s, which are
- //! documented in their respective concepts.
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename T, T v>
- struct integral_constant {
- //! Call a function n times.
- //!
- //! `times` allows a nullary function to be invoked `n` times:
- //! @code
- //! int_<3>::times(f)
- //! @endcode
- //! should be expanded by any decent compiler to
- //! @code
- //! f(); f(); f();
- //! @endcode
- //!
- //! This can be useful in several contexts, e.g. for loop unrolling:
- //! @snippet example/integral_constant.cpp times_loop_unrolling
- //!
- //! Note that `times` is really a static function object, not just a
- //! static function. This allows `int_<n>::%times` to be passed to
- //! higher-order algorithms:
- //! @snippet example/integral_constant.cpp times_higher_order
- //!
- //! Also, since static members can be accessed using both the `.` and
- //! the `::` syntax, one can take advantage of this (loophole?) to
- //! call `times` on objects just as well as on types:
- //! @snippet example/integral_constant.cpp from_object
- //!
- //! @note
- //! `times` is equivalent to the `hana::repeat` function, which works
- //! on an arbitrary `IntegralConstant`.
- //!
- //! Sometimes, it is also useful to know the index we're at inside the
- //! function. This can be achieved by using `times.with_index`:
- //! @snippet example/integral_constant.cpp times_with_index_runtime
- //!
- //! Remember that `times` is a _function object_, and hence it can
- //! have subobjects. `with_index` is just a function object nested
- //! inside `times`, which allows for this nice little interface. Also
- //! note that the indices passed to the function are `integral_constant`s;
- //! they are known at compile-time. Hence, we can do compile-time stuff
- //! with them, like indexing inside a tuple:
- //! @snippet example/integral_constant.cpp times_with_index_compile_time
- //!
- //! @note
- //! `times.with_index(f)` guarantees that the calls to `f` will be
- //! done in order of ascending index. In other words, `f` will be
- //! called as `f(0)`, `f(1)`, `f(2)`, etc., but with `integral_constant`s
- //! instead of normal integers. Side effects can also be done in the
- //! function passed to `times` and `times.with_index`.
- template <typename F>
- static constexpr void times(F&& f) {
- f(); f(); ... f(); // n times total
- }
-
- //! Equivalent to `hana::plus`
- template <typename X, typename Y>
- friend constexpr auto operator+(X&& x, Y&& y);
-
- //! Equivalent to `hana::minus`
- template <typename X, typename Y>
- friend constexpr auto operator-(X&& x, Y&& y);
-
- //! Equivalent to `hana::negate`
- template <typename X>
- friend constexpr auto operator-(X&& x);
-
- //! Equivalent to `hana::mult`
- template <typename X, typename Y>
- friend constexpr auto operator*(X&& x, Y&& y);
-
- //! Equivalent to `hana::div`
- template <typename X, typename Y>
- friend constexpr auto operator/(X&& x, Y&& y);
-
- //! Equivalent to `hana::mod`
- template <typename X, typename Y>
- friend constexpr auto operator%(X&& x, Y&& y);
-
- //! Equivalent to `hana::equal`
- template <typename X, typename Y>
- friend constexpr auto operator==(X&& x, Y&& y);
-
- //! Equivalent to `hana::not_equal`
- template <typename X, typename Y>
- friend constexpr auto operator!=(X&& x, Y&& y);
-
- //! Equivalent to `hana::or_`
- template <typename X, typename Y>
- friend constexpr auto operator||(X&& x, Y&& y);
-
- //! Equivalent to `hana::and_`
- template <typename X, typename Y>
- friend constexpr auto operator&&(X&& x, Y&& y);
-
- //! Equivalent to `hana::not_`
- template <typename X>
- friend constexpr auto operator!(X&& x);
-
- //! Equivalent to `hana::less`
- template <typename X, typename Y>
- friend constexpr auto operator<(X&& x, Y&& y);
-
- //! Equivalent to `hana::greater`
- template <typename X, typename Y>
- friend constexpr auto operator>(X&& x, Y&& y);
-
- //! Equivalent to `hana::less_equal`
- template <typename X, typename Y>
- friend constexpr auto operator<=(X&& x, Y&& y);
-
- //! Equivalent to `hana::greater_equal`
- template <typename X, typename Y>
- friend constexpr auto operator>=(X&& x, Y&& y);
- };
-#else
- template <typename T, T v>
- struct integral_constant
- : std::integral_constant<T, v>
- , detail::operators::adl<integral_constant<T, v>>
- {
- using type = integral_constant; // override std::integral_constant::type
- static constexpr ic_detail::times_t<T, v> times{};
- using hana_tag = integral_constant_tag<T>;
- };
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_INTEGRAL_CONSTANT_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/intrinsics.hpp b/contrib/restricted/boost/boost/hana/detail/intrinsics.hpp
deleted file mode 100644
index b3d98654cd..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/intrinsics.hpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*!
-@file
-Defines macros for commonly used type traits.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_INTRINSICS_HPP
-#define BOOST_HANA_DETAIL_INTRINSICS_HPP
-
-#include <boost/hana/config.hpp>
-
-
-// We use intrinsics if they are available because it speeds up the
-// compile-times.
-#if defined(BOOST_HANA_CONFIG_CLANG)
-# if __has_extension(is_empty)
-# define BOOST_HANA_TT_IS_EMPTY(T) __is_empty(T)
-# endif
-
-# if __has_extension(is_final)
-# define BOOST_HANA_TT_IS_FINAL(T) __is_final(T)
-# endif
-
-// TODO: Right now, this intrinsic is never used directly because of
-// https://llvm.org/bugs/show_bug.cgi?id=24173
-# if __has_extension(is_constructible) && false
-# define BOOST_HANA_TT_IS_CONSTRUCTIBLE(...) __is_constructible(__VA_ARGS__)
-# endif
-
-# if __has_extension(is_assignable)
-# define BOOST_HANA_TT_IS_ASSIGNABLE(T, U) __is_assignable(T, U)
-# endif
-
-# if __has_extension(is_convertible)
-# define BOOST_HANA_TT_IS_CONVERTIBLE(T, U) __is_convertible(T, U)
-# endif
-#endif
-
-#if !defined(BOOST_HANA_TT_IS_EMPTY)
-# include <type_traits>
-# define BOOST_HANA_TT_IS_EMPTY(T) ::std::is_empty<T>::value
-#endif
-
-#if !defined(BOOST_HANA_TT_IS_FINAL)
-# include <type_traits>
-# define BOOST_HANA_TT_IS_FINAL(T) ::std::is_final<T>::value
-#endif
-
-#if !defined(BOOST_HANA_TT_IS_CONSTRUCTIBLE)
-# include <type_traits>
-# define BOOST_HANA_TT_IS_CONSTRUCTIBLE(...) ::std::is_constructible<__VA_ARGS__>::value
-#endif
-
-#if !defined(BOOST_HANA_TT_IS_ASSIGNABLE)
-# include <type_traits>
-# define BOOST_HANA_TT_IS_ASSIGNABLE(T, U) ::std::is_assignable<T, U>::value
-#endif
-
-#if !defined(BOOST_HANA_TT_IS_CONVERTIBLE)
-# include <type_traits>
-# define BOOST_HANA_TT_IS_CONVERTIBLE(T, U) ::std::is_convertible<T, U>::value
-#endif
-
-#endif // !BOOST_HANA_DETAIL_INTRINSICS_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/nested_by.hpp b/contrib/restricted/boost/boost/hana/detail/nested_by.hpp
deleted file mode 100644
index 6bdfe70c43..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/nested_by.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::nested_by`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_NESTED_BY_HPP
-#define BOOST_HANA_DETAIL_NESTED_BY_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/nested_by_fwd.hpp>
-
-#include <boost/hana/functional/flip.hpp>
-#include <boost/hana/functional/partial.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- //! @cond
- template <typename Algorithm>
- template <typename Predicate, typename Object>
- constexpr decltype(auto) nested_by_t<Algorithm>::
- operator()(Predicate&& predicate, Object&& object) const {
- return Algorithm{}(static_cast<Object&&>(object),
- static_cast<Predicate&&>(predicate));
- }
-
- template <typename Algorithm>
- template <typename Predicate>
- constexpr decltype(auto)
- nested_by_t<Algorithm>::operator()(Predicate&& predicate) const {
- return hana::partial(hana::flip(Algorithm{}),
- static_cast<Predicate&&>(predicate));
- }
- //! @endcond
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_NESTED_BY_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/nested_by_fwd.hpp b/contrib/restricted/boost/boost/hana/detail/nested_by_fwd.hpp
deleted file mode 100644
index 4e82f64cd6..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/nested_by_fwd.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::detail::nested_by`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_NESTED_BY_FWD_HPP
-#define BOOST_HANA_DETAIL_NESTED_BY_FWD_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <typename Algorithm>
- struct nested_by_t {
- template <typename Predicate, typename Object>
- constexpr decltype(auto)
- operator()(Predicate&& predicate, Object&& object) const;
-
- template <typename Predicate>
- constexpr decltype(auto) operator()(Predicate&& predicate) const;
- };
-
- //! @ingroup group-details
- //! Provides a `.by` static constexpr function object.
- //!
- //! When creating a binary function object of type `Algorithm` whose
- //! signature is `Object x Predicate -> Return`, `nested_by<Algorithm>`
- //! can be used as a base class to `Algorithm`. Doing so will provide a
- //! static constexpr member called `by`, which has the two following
- //! signatures:
- //! @code
- //! Predicate x Object -> Return
- //! Predicate -> (Object -> Return)
- //! @endcode
- //!
- //! In other words, `nested_by` is a `curry`ed and `flip`ped version of
- //! `Algorithm`. Note that the function object `Algorithm` must be
- //! default-constructible, since the algorithm will be called as
- //! `Algorithm{}(arguments...)`.
- //!
- //! @note
- //! This function object is especially useful because it takes care of
- //! avoiding ODR violations caused by the nested static constexpr member.
- template <typename Algorithm>
- struct nested_by { static constexpr nested_by_t<Algorithm> by{}; };
-
- template <typename Algorithm>
- constexpr nested_by_t<Algorithm> nested_by<Algorithm>::by;
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_NESTED_BY_FWD_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/nested_than.hpp b/contrib/restricted/boost/boost/hana/detail/nested_than.hpp
deleted file mode 100644
index d4a7c5ffc6..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/nested_than.hpp
+++ /dev/null
@@ -1,29 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::nested_than`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_NESTED_THAN_HPP
-#define BOOST_HANA_DETAIL_NESTED_THAN_HPP
-
-#include <boost/hana/detail/nested_than_fwd.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/functional/flip.hpp>
-#include <boost/hana/functional/partial.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- //! @cond
- template <typename Algorithm>
- template <typename X>
- constexpr decltype(auto) nested_than_t<Algorithm>::operator()(X&& x) const
- { return hana::partial(hana::flip(Algorithm{}), static_cast<X&&>(x)); }
- //! @endcond
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_NESTED_THAN_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/nested_than_fwd.hpp b/contrib/restricted/boost/boost/hana/detail/nested_than_fwd.hpp
deleted file mode 100644
index 39231050f3..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/nested_than_fwd.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::detail::nested_than`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_NESTED_THAN_FWD_HPP
-#define BOOST_HANA_DETAIL_NESTED_THAN_FWD_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <typename Algorithm>
- struct nested_than_t {
- template <typename X>
- constexpr decltype(auto) operator()(X&& x) const;
- };
-
- //! @ingroup group-details
- //! Provides a `.than` static constexpr function object.
- //!
- //! When creating a binary function object of type `Algo` whose signature
- //! is `A x B -> Return`, `nested_than<Algo>` can be used as a base class
- //! of `Algo`. Doing so will provide a static constexpr member called
- //! `than`, which has the following signature:
- //! @code
- //! B -> A -> Return
- //! @endcode
- //!
- //! Note that the function object `Algo` must be default-constructible,
- //! since it will be called as `Algo{}(arguments...)`.
- //!
- //! @note
- //! This function object is especially useful because it takes care of
- //! avoiding ODR violations caused by the nested static constexpr member.
- template <typename Algorithm>
- struct nested_than { static constexpr nested_than_t<Algorithm> than{}; };
-
- template <typename Algorithm>
- constexpr nested_than_t<Algorithm> nested_than<Algorithm>::than;
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_NESTED_THAN_FWD_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/nested_to.hpp b/contrib/restricted/boost/boost/hana/detail/nested_to.hpp
deleted file mode 100644
index 2f6154d367..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/nested_to.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::nested_to`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_NESTED_TO_HPP
-#define BOOST_HANA_DETAIL_NESTED_TO_HPP
-
-#include <boost/hana/detail/nested_to_fwd.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/functional/partial.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- //! @cond
- template <typename Algorithm>
- template <typename X>
- constexpr decltype(auto) nested_to_t<Algorithm>::operator()(X&& x) const
- { return hana::partial(Algorithm{}, static_cast<X&&>(x)); }
- //! @endcond
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_NESTED_TO_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/nested_to_fwd.hpp b/contrib/restricted/boost/boost/hana/detail/nested_to_fwd.hpp
deleted file mode 100644
index ec3161136c..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/nested_to_fwd.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::detail::nested_to`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_NESTED_TO_FWD_HPP
-#define BOOST_HANA_DETAIL_NESTED_TO_FWD_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <typename Algorithm>
- struct nested_to_t {
- template <typename X>
- constexpr decltype(auto) operator()(X&& x) const;
- };
-
- //! @ingroup group-details
- //! Provides a `.to` static constexpr function object.
- //!
- //! When creating a binary function object of type `Algo` whose signature
- //! is `Object x Object -> Return`, `nested_to<Algo>` can be used as a base
- //! class of `Algo`. Doing so will provide a static constexpr member called
- //! `to`, which has the following signature:
- //! @code
- //! Object -> Object -> Return
- //! @endcode
- //!
- //! Note that the function object `Algo` must be default-constructible,
- //! since the algorithm will be called as `Algo{}(arguments...)`.
- //!
- //! @note
- //! This function object is especially useful because it takes care of
- //! avoiding ODR violations caused by the nested static constexpr member.
- template <typename Algorithm>
- struct nested_to { static constexpr nested_to_t<Algorithm> to{}; };
-
- template <typename Algorithm>
- constexpr nested_to_t<Algorithm> nested_to<Algorithm>::to;
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_NESTED_TO_FWD_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/operators/adl.hpp b/contrib/restricted/boost/boost/hana/detail/operators/adl.hpp
deleted file mode 100644
index 59a81600b6..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/operators/adl.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::operators::adl`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_OPERATORS_ADL_HPP
-#define BOOST_HANA_DETAIL_OPERATORS_ADL_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail { namespace operators {
- //! @ingroup group-details
- //! Enables [ADL](http://en.cppreference.com/w/cpp/language/adl) in the
- //! `hana::detail::operators` namespace.
- //!
- //! This is used by containers in Hana as a quick way to automatically
- //! define the operators associated to some concepts, in conjunction
- //! with the `detail::xxx_operators` family of metafunctions.
- //!
- //! Note that `adl` can be passed template arguments to make it unique
- //! amongst a set of derived classes. This allows a set of derived classes
- //! not to possess a common base class, which would disable the EBO when
- //! many of these derived classes are stored in a Hana container. If EBO
- //! is not a concern, `adl<>` can simply be used.
- template <typename ...>
- struct adl { };
-}} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_OPERATORS_ADL_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/operators/arithmetic.hpp b/contrib/restricted/boost/boost/hana/detail/operators/arithmetic.hpp
deleted file mode 100644
index 58f432db78..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/operators/arithmetic.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*!
-@file
-Defines arithmetic operators.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_OPERATORS_ARITHMETIC_HPP
-#define BOOST_HANA_DETAIL_OPERATORS_ARITHMETIC_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/fwd/div.hpp>
-#include <boost/hana/fwd/minus.hpp>
-#include <boost/hana/fwd/mod.hpp>
-#include <boost/hana/fwd/mult.hpp>
-#include <boost/hana/fwd/negate.hpp>
-#include <boost/hana/fwd/plus.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <typename Tag>
- struct arithmetic_operators {
- static constexpr bool value = false;
- };
-
- namespace operators {
- template <typename X, typename Y, typename = typename std::enable_if<
- detail::arithmetic_operators<typename hana::tag_of<X>::type>::value ||
- detail::arithmetic_operators<typename hana::tag_of<Y>::type>::value
- >::type>
- constexpr auto operator+(X&& x, Y&& y)
- { return hana::plus(static_cast<X&&>(x), static_cast<Y&&>(y)); }
-
-
- template <typename X, typename Y, typename = typename std::enable_if<
- detail::arithmetic_operators<typename hana::tag_of<X>::type>::value ||
- detail::arithmetic_operators<typename hana::tag_of<Y>::type>::value
- >::type>
- constexpr auto operator-(X&& x, Y&& y)
- { return hana::minus(static_cast<X&&>(x), static_cast<Y&&>(y)); }
-
- template <typename X, typename = typename std::enable_if<
- detail::arithmetic_operators<typename hana::tag_of<X>::type>::value
- >::type>
- constexpr auto operator-(X&& x)
- { return hana::negate(static_cast<X&&>(x)); }
-
-
- template <typename X, typename Y, typename = typename std::enable_if<
- detail::arithmetic_operators<typename hana::tag_of<X>::type>::value ||
- detail::arithmetic_operators<typename hana::tag_of<Y>::type>::value
- >::type>
- constexpr auto operator*(X&& x, Y&& y)
- { return hana::mult(static_cast<X&&>(x), static_cast<Y&&>(y)); }
-
-
- template <typename X, typename Y, typename = typename std::enable_if<
- detail::arithmetic_operators<typename hana::tag_of<X>::type>::value ||
- detail::arithmetic_operators<typename hana::tag_of<Y>::type>::value
- >::type>
- constexpr auto operator/(X&& x, Y&& y)
- { return hana::div(static_cast<X&&>(x), static_cast<Y&&>(y)); }
-
- template <typename X, typename Y, typename = typename std::enable_if<
- detail::arithmetic_operators<typename hana::tag_of<X>::type>::value ||
- detail::arithmetic_operators<typename hana::tag_of<Y>::type>::value
- >::type>
- constexpr auto operator%(X&& x, Y&& y)
- { return hana::mod(static_cast<X&&>(x), static_cast<Y&&>(y)); }
- } // end namespace operators
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_OPERATORS_ARITHMETIC_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/operators/comparable.hpp b/contrib/restricted/boost/boost/hana/detail/operators/comparable.hpp
deleted file mode 100644
index 0c110fe3a3..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/operators/comparable.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*!
-@file
-Defines operators for Comparables.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_OPERATORS_COMPARABLE_HPP
-#define BOOST_HANA_DETAIL_OPERATORS_COMPARABLE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/fwd/equal.hpp>
-#include <boost/hana/fwd/not_equal.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <typename Tag>
- struct comparable_operators {
- static constexpr bool value = false;
- };
-
- namespace operators {
- template <typename X, typename Y, typename = typename std::enable_if<
- detail::comparable_operators<typename hana::tag_of<X>::type>::value ||
- detail::comparable_operators<typename hana::tag_of<Y>::type>::value
- >::type>
- constexpr auto operator==(X&& x, Y&& y)
- { return hana::equal(static_cast<X&&>(x), static_cast<Y&&>(y)); }
-
- template <typename X, typename Y, typename = typename std::enable_if<
- detail::comparable_operators<typename hana::tag_of<X>::type>::value ||
- detail::comparable_operators<typename hana::tag_of<Y>::type>::value
- >::type>
- constexpr auto operator!=(X&& x, Y&& y)
- { return hana::not_equal(static_cast<X&&>(x), static_cast<Y&&>(y)); }
- } // end namespace operators
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_OPERATORS_COMPARABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/operators/iterable.hpp b/contrib/restricted/boost/boost/hana/detail/operators/iterable.hpp
deleted file mode 100644
index 6dcb6bc25e..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/operators/iterable.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/*!
-@file
-Defines operators for Iterables.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_OPERATORS_ITERABLE_HPP
-#define BOOST_HANA_DETAIL_OPERATORS_ITERABLE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/fwd/at.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <typename Derived>
- struct iterable_operators {
- template <typename N>
- constexpr decltype(auto) operator[](N&& n) & {
- return hana::at(static_cast<Derived&>(*this),
- static_cast<N&&>(n));
- }
-
- template <typename N>
- constexpr decltype(auto) operator[](N&& n) const& {
- return hana::at(static_cast<Derived const&>(*this),
- static_cast<N&&>(n));
- }
-
- template <typename N>
- constexpr decltype(auto) operator[](N&& n) && {
- return hana::at(static_cast<Derived&&>(*this),
- static_cast<N&&>(n));
- }
- };
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_OPERATORS_ITERABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/operators/logical.hpp b/contrib/restricted/boost/boost/hana/detail/operators/logical.hpp
deleted file mode 100644
index 4645ca2bb4..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/operators/logical.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*!
-@file
-Defines logical operators.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_OPERATORS_LOGICAL_HPP
-#define BOOST_HANA_DETAIL_OPERATORS_LOGICAL_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/fwd/and.hpp>
-#include <boost/hana/fwd/not.hpp>
-#include <boost/hana/fwd/or.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <typename Tag>
- struct logical_operators {
- static constexpr bool value = false;
- };
-
- namespace operators {
- template <typename X, typename Y, typename = typename std::enable_if<
- detail::logical_operators<typename hana::tag_of<X>::type>::value ||
- detail::logical_operators<typename hana::tag_of<Y>::type>::value
- >::type>
- constexpr auto operator||(X&& x, Y&& y)
- { return hana::or_(static_cast<X&&>(x), static_cast<Y&&>(y)); }
-
- template <typename X, typename Y, typename = typename std::enable_if<
- detail::logical_operators<typename hana::tag_of<X>::type>::value ||
- detail::logical_operators<typename hana::tag_of<Y>::type>::value
- >::type>
- constexpr auto operator&&(X&& x, Y&& y)
- { return hana::and_(static_cast<X&&>(x), static_cast<Y&&>(y)); }
-
- template <typename X, typename = typename std::enable_if<
- detail::logical_operators<typename hana::tag_of<X>::type>::value
- >::type>
- constexpr auto operator!(X&& x)
- { return hana::not_(static_cast<X&&>(x)); }
- } // end namespace operators
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_OPERATORS_LOGICAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/operators/monad.hpp b/contrib/restricted/boost/boost/hana/detail/operators/monad.hpp
deleted file mode 100644
index ccc421c56a..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/operators/monad.hpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/*!
-@file
-Defines operators for Monads.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_OPERATORS_MONAD_HPP
-#define BOOST_HANA_DETAIL_OPERATORS_MONAD_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/fwd/chain.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <typename Tag>
- struct monad_operators {
- static constexpr bool value = false;
- };
-
- namespace operators {
- template <typename Xs, typename F, typename = typename std::enable_if<
- detail::monad_operators<typename hana::tag_of<Xs>::type>::value
- >::type>
- constexpr auto operator|(Xs&& xs, F&& f)
- { return hana::chain(static_cast<Xs&&>(xs), static_cast<F&&>(f)); }
- } // end namespace operators
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_OPERATORS_MONAD_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/operators/orderable.hpp b/contrib/restricted/boost/boost/hana/detail/operators/orderable.hpp
deleted file mode 100644
index cf46829a04..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/operators/orderable.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/*!
-@file
-Defines operators for Orderables.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_OPERATORS_ORDERABLE_HPP
-#define BOOST_HANA_DETAIL_OPERATORS_ORDERABLE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/fwd/greater.hpp>
-#include <boost/hana/fwd/greater_equal.hpp>
-#include <boost/hana/fwd/less.hpp>
-#include <boost/hana/fwd/less_equal.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <typename Tag>
- struct orderable_operators {
- static constexpr bool value = false;
- };
-
- namespace operators {
- template <typename X, typename Y, typename = typename std::enable_if<
- detail::orderable_operators<typename hana::tag_of<X>::type>::value ||
- detail::orderable_operators<typename hana::tag_of<Y>::type>::value
- >::type>
- constexpr auto operator<(X&& x, Y&& y)
- { return hana::less(static_cast<X&&>(x), static_cast<Y&&>(y)); }
-
- template <typename X, typename Y, typename = typename std::enable_if<
- detail::orderable_operators<typename hana::tag_of<X>::type>::value ||
- detail::orderable_operators<typename hana::tag_of<Y>::type>::value
- >::type>
- constexpr auto operator>(X&& x, Y&& y)
- { return hana::greater(static_cast<X&&>(x), static_cast<Y&&>(y)); }
-
- template <typename X, typename Y, typename = typename std::enable_if<
- detail::orderable_operators<typename hana::tag_of<X>::type>::value ||
- detail::orderable_operators<typename hana::tag_of<Y>::type>::value
- >::type>
- constexpr auto operator<=(X&& x, Y&& y)
- { return hana::less_equal(static_cast<X&&>(x), static_cast<Y&&>(y)); }
-
- template <typename X, typename Y, typename = typename std::enable_if<
- detail::orderable_operators<typename hana::tag_of<X>::type>::value ||
- detail::orderable_operators<typename hana::tag_of<Y>::type>::value
- >::type>
- constexpr auto operator>=(X&& x, Y&& y)
- { return hana::greater_equal(static_cast<X&&>(x), static_cast<Y&&>(y)); }
- } // end namespace operators
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_OPERATORS_ORDERABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/operators/searchable.hpp b/contrib/restricted/boost/boost/hana/detail/operators/searchable.hpp
deleted file mode 100644
index 69d67465da..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/operators/searchable.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/*!
-@file
-Defines operators for Searchables.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_OPERATORS_SEARCHABLE_HPP
-#define BOOST_HANA_DETAIL_OPERATORS_SEARCHABLE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/fwd/at_key.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <typename Derived>
- struct searchable_operators {
- template <typename Key>
- constexpr decltype(auto) operator[](Key&& key) & {
- return hana::at_key(static_cast<Derived&>(*this),
- static_cast<Key&&>(key));
- }
-
- template <typename Key>
- constexpr decltype(auto) operator[](Key&& key) && {
- return hana::at_key(static_cast<Derived&&>(*this),
- static_cast<Key&&>(key));
- }
-
- template <typename Key>
- constexpr decltype(auto) operator[](Key&& key) const& {
- return hana::at_key(static_cast<Derived const&>(*this),
- static_cast<Key&&>(key));
- }
- };
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_OPERATORS_SEARCHABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/preprocessor.hpp b/contrib/restricted/boost/boost/hana/detail/preprocessor.hpp
deleted file mode 100644
index 6a141187e7..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/preprocessor.hpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/*!
-@file
-Defines generally useful preprocessor macros.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_PREPROCESSOR_HPP
-#define BOOST_HANA_DETAIL_PREPROCESSOR_HPP
-
-//! @ingroup group-details
-//! Expands to the concatenation of its two arguments.
-#define BOOST_HANA_PP_CONCAT(x, y) BOOST_HANA_PP_CONCAT_PRIMITIVE(x, y)
-#define BOOST_HANA_PP_CONCAT_PRIMITIVE(x, y) x ## y
-
-//! @ingroup group-details
-//! Expands to the stringized version of its argument.
-#define BOOST_HANA_PP_STRINGIZE(...) BOOST_HANA_PP_STRINGIZE_PRIMITIVE(__VA_ARGS__)
-#define BOOST_HANA_PP_STRINGIZE_PRIMITIVE(...) #__VA_ARGS__
-
-//! @ingroup group-details
-//! Expands to its first argument.
-#define BOOST_HANA_PP_FRONT(...) BOOST_HANA_PP_FRONT_IMPL(__VA_ARGS__, )
-#define BOOST_HANA_PP_FRONT_IMPL(e0, ...) e0
-
-//! @ingroup group-details
-//! Expands to all of its arguments, except for the first one.
-//!
-//! This macro may not be called with less than 2 arguments.
-#define BOOST_HANA_PP_DROP_FRONT(e0, ...) __VA_ARGS__
-
-#endif // !BOOST_HANA_DETAIL_PREPROCESSOR_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/std_common_type.hpp b/contrib/restricted/boost/boost/hana/detail/std_common_type.hpp
deleted file mode 100644
index b5fe6f318e..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/std_common_type.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/*!
-@file
-Defines a SFINAE-friendly version of `std::common_type`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_STD_COMMON_TYPE_HPP
-#define BOOST_HANA_DETAIL_STD_COMMON_TYPE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- //! @ingroup group-details
- //! Equivalent to `std::common_type`, except it is SFINAE-friendly and
- //! does not support custom specializations.
- template <typename T, typename U, typename = void>
- struct std_common_type { };
-
- template <typename T, typename U>
- struct std_common_type<T, U, decltype((void)(
- true ? std::declval<T>() : std::declval<U>()
- ))> {
- using type = typename detail::decay<
- decltype(true ? std::declval<T>() : std::declval<U>())
- >::type;
- };
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_STD_COMMON_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/struct_macros.hpp b/contrib/restricted/boost/boost/hana/detail/struct_macros.hpp
deleted file mode 100644
index e99ab4fac8..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/struct_macros.hpp
+++ /dev/null
@@ -1,2768 +0,0 @@
-
-
-
-
-/*!
-@file
-Defines the `BOOST_HANA_DEFINE_STRUCT`, `BOOST_HANA_ADAPT_STRUCT`, and
-`BOOST_HANA_ADAPT_ADT` macros.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-//////////////////////////////////////////////////////////////////////////////
-// THIS FILE IS GENERATED FROM THE <boost/hana/detail/struct_macros.erb.hpp>
-// ERB TEMPLATE. DO NOT EDIT THIS FILE DIRECTLY.
-//
-// THE ERB TEMPLATE CONTAINS INFORMATION ABOUT HOW TO REGENERATE THIS FILE.
-//////////////////////////////////////////////////////////////////////////////
-
-#ifndef BOOST_HANA_DETAIL_STRUCT_MACROS_HPP
-#define BOOST_HANA_DETAIL_STRUCT_MACROS_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/preprocessor.hpp>
-#include <boost/hana/pair.hpp>
-#include <boost/hana/string.hpp>
-#include <boost/hana/tuple.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace struct_detail {
- template <typename Memptr, Memptr ptr>
- struct member_ptr {
- template <typename T>
- constexpr decltype(auto) operator()(T&& t) const
- { return static_cast<T&&>(t).*ptr; }
- };
-
- constexpr std::size_t strlen(char const* s) {
- std::size_t n = 0;
- while (*s++ != '\0')
- ++n;
- return n;
- }
-
- template <std::size_t n, typename Names, std::size_t ...i>
- constexpr auto prepare_member_name_impl(std::index_sequence<i...>) {
- return hana::string_c<hana::at_c<n>(Names::get())[i]...>;
- }
-
- template <std::size_t n, typename Names>
- constexpr auto prepare_member_name() {
- constexpr std::size_t len = strlen(hana::at_c<n>(Names::get()));
- return prepare_member_name_impl<n, Names>(std::make_index_sequence<len>{});
- }
-} BOOST_HANA_NAMESPACE_END
-
-//////////////////////////////////////////////////////////////////////////////
-// BOOST_HANA_PP_NARG
-//////////////////////////////////////////////////////////////////////////////
-//! @ingroup group-details
-//! Macro expanding to the number of arguments it is passed.
-//!
-//! Specifically, `BOOST_HANA_PP_NARG(x1, ..., xn)` expands to `n`. It is
-//! an error to call this macro with 0 arguments.
-#define BOOST_HANA_PP_NARG(...) \
- BOOST_HANA_PP_NARG_IMPL(__VA_ARGS__, 40,39,38,37,36,35,34,33,32,31,30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,)
-
-#define BOOST_HANA_PP_NARG_IMPL(e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15,e16,e17,e18,e19,e20,e21,e22,e23,e24,e25,e26,e27,e28,e29,e30,e31,e32,e33,e34,e35,e36,e37,e38,e39,e40, N, ...) N
-
-//////////////////////////////////////////////////////////////////////////////
-// BOOST_HANA_PP_BACK
-//////////////////////////////////////////////////////////////////////////////
-//! @ingroup group-details
-//! Expands to its last argument.
-#define BOOST_HANA_PP_BACK(...) \
- BOOST_HANA_PP_BACK_IMPL(BOOST_HANA_PP_NARG(__VA_ARGS__), __VA_ARGS__)
-
-#define BOOST_HANA_PP_BACK_IMPL(N, ...) \
- BOOST_HANA_PP_CONCAT(BOOST_HANA_PP_BACK_IMPL_, N)(__VA_ARGS__)
-
-
-#define BOOST_HANA_PP_BACK_IMPL_1(e1) e1
-
-#define BOOST_HANA_PP_BACK_IMPL_2(e1, e2) e2
-
-#define BOOST_HANA_PP_BACK_IMPL_3(e1, e2, e3) e3
-
-#define BOOST_HANA_PP_BACK_IMPL_4(e1, e2, e3, e4) e4
-
-#define BOOST_HANA_PP_BACK_IMPL_5(e1, e2, e3, e4, e5) e5
-
-#define BOOST_HANA_PP_BACK_IMPL_6(e1, e2, e3, e4, e5, e6) e6
-
-#define BOOST_HANA_PP_BACK_IMPL_7(e1, e2, e3, e4, e5, e6, e7) e7
-
-#define BOOST_HANA_PP_BACK_IMPL_8(e1, e2, e3, e4, e5, e6, e7, e8) e8
-
-#define BOOST_HANA_PP_BACK_IMPL_9(e1, e2, e3, e4, e5, e6, e7, e8, e9) e9
-
-#define BOOST_HANA_PP_BACK_IMPL_10(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10) e10
-
-#define BOOST_HANA_PP_BACK_IMPL_11(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11) e11
-
-#define BOOST_HANA_PP_BACK_IMPL_12(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12) e12
-
-#define BOOST_HANA_PP_BACK_IMPL_13(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13) e13
-
-#define BOOST_HANA_PP_BACK_IMPL_14(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14) e14
-
-#define BOOST_HANA_PP_BACK_IMPL_15(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15) e15
-
-#define BOOST_HANA_PP_BACK_IMPL_16(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16) e16
-
-#define BOOST_HANA_PP_BACK_IMPL_17(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17) e17
-
-#define BOOST_HANA_PP_BACK_IMPL_18(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18) e18
-
-#define BOOST_HANA_PP_BACK_IMPL_19(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19) e19
-
-#define BOOST_HANA_PP_BACK_IMPL_20(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20) e20
-
-#define BOOST_HANA_PP_BACK_IMPL_21(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21) e21
-
-#define BOOST_HANA_PP_BACK_IMPL_22(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22) e22
-
-#define BOOST_HANA_PP_BACK_IMPL_23(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23) e23
-
-#define BOOST_HANA_PP_BACK_IMPL_24(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24) e24
-
-#define BOOST_HANA_PP_BACK_IMPL_25(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25) e25
-
-#define BOOST_HANA_PP_BACK_IMPL_26(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26) e26
-
-#define BOOST_HANA_PP_BACK_IMPL_27(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27) e27
-
-#define BOOST_HANA_PP_BACK_IMPL_28(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28) e28
-
-#define BOOST_HANA_PP_BACK_IMPL_29(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29) e29
-
-#define BOOST_HANA_PP_BACK_IMPL_30(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30) e30
-
-#define BOOST_HANA_PP_BACK_IMPL_31(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31) e31
-
-#define BOOST_HANA_PP_BACK_IMPL_32(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32) e32
-
-#define BOOST_HANA_PP_BACK_IMPL_33(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33) e33
-
-#define BOOST_HANA_PP_BACK_IMPL_34(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34) e34
-
-#define BOOST_HANA_PP_BACK_IMPL_35(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35) e35
-
-#define BOOST_HANA_PP_BACK_IMPL_36(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36) e36
-
-#define BOOST_HANA_PP_BACK_IMPL_37(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37) e37
-
-#define BOOST_HANA_PP_BACK_IMPL_38(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38) e38
-
-#define BOOST_HANA_PP_BACK_IMPL_39(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39) e39
-
-#define BOOST_HANA_PP_BACK_IMPL_40(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40) e40
-
-
-//////////////////////////////////////////////////////////////////////////////
-// BOOST_HANA_PP_DROP_BACK
-//////////////////////////////////////////////////////////////////////////////
-//! @ingroup group-details
-//! Expands to all of its arguments, except for the last one.
-#define BOOST_HANA_PP_DROP_BACK(...) \
- BOOST_HANA_PP_DROP_BACK_IMPL(BOOST_HANA_PP_NARG(__VA_ARGS__), __VA_ARGS__)
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL(N, ...) \
- BOOST_HANA_PP_CONCAT(BOOST_HANA_PP_DROP_BACK_IMPL_, N)(__VA_ARGS__)
-
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_1(e1)
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_2(e1, e2)e1
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_3(e1, e2, e3)e1, e2
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_4(e1, e2, e3, e4)e1, e2, e3
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_5(e1, e2, e3, e4, e5)e1, e2, e3, e4
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_6(e1, e2, e3, e4, e5, e6)e1, e2, e3, e4, e5
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_7(e1, e2, e3, e4, e5, e6, e7)e1, e2, e3, e4, e5, e6
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_8(e1, e2, e3, e4, e5, e6, e7, e8)e1, e2, e3, e4, e5, e6, e7
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_9(e1, e2, e3, e4, e5, e6, e7, e8, e9)e1, e2, e3, e4, e5, e6, e7, e8
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_10(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10)e1, e2, e3, e4, e5, e6, e7, e8, e9
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_11(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_12(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_13(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_14(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_15(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_16(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_17(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_18(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_19(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_20(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_21(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_22(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_23(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_24(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_25(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_26(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_27(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_28(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_29(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_30(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_31(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_32(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_33(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_34(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_35(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_36(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_37(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_38(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_39(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38
-
-#define BOOST_HANA_PP_DROP_BACK_IMPL_40(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40)e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39
-
-
-//////////////////////////////////////////////////////////////////////////////
-// BOOST_HANA_ADAPT_STRUCT
-//////////////////////////////////////////////////////////////////////////////
-template <typename ...>
-struct BOOST_HANA_ADAPT_STRUCT_must_be_called_in_the_global_namespace;
-
-#define BOOST_HANA_ADAPT_STRUCT(...) \
- template <> \
- struct BOOST_HANA_ADAPT_STRUCT_must_be_called_in_the_global_namespace<>; \
- BOOST_HANA_ADAPT_STRUCT_IMPL(BOOST_HANA_PP_NARG(__VA_ARGS__), __VA_ARGS__)\
- static_assert(true, "force the usage of a trailing semicolon") \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL(N, ...) \
- BOOST_HANA_PP_CONCAT(BOOST_HANA_ADAPT_STRUCT_IMPL_, N)(__VA_ARGS__)
-
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_1(TYPE ) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- \
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_2(TYPE , m1) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_3(TYPE , m1, m2) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_4(TYPE , m1, m2, m3) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_5(TYPE , m1, m2, m3, m4) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_6(TYPE , m1, m2, m3, m4, m5) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_7(TYPE , m1, m2, m3, m4, m5, m6) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_8(TYPE , m1, m2, m3, m4, m5, m6, m7) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_9(TYPE , m1, m2, m3, m4, m5, m6, m7, m8) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_10(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_11(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_12(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_13(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_14(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_15(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_16(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_17(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_18(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_19(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_20(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_21(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_22(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_23(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_24(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_25(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_26(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24), BOOST_HANA_PP_STRINGIZE(m25) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m25), &TYPE::m25>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_27(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24), BOOST_HANA_PP_STRINGIZE(m25), BOOST_HANA_PP_STRINGIZE(m26) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m25), &TYPE::m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m26), &TYPE::m26>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_28(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24), BOOST_HANA_PP_STRINGIZE(m25), BOOST_HANA_PP_STRINGIZE(m26), BOOST_HANA_PP_STRINGIZE(m27) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m25), &TYPE::m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m26), &TYPE::m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m27), &TYPE::m27>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_29(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24), BOOST_HANA_PP_STRINGIZE(m25), BOOST_HANA_PP_STRINGIZE(m26), BOOST_HANA_PP_STRINGIZE(m27), BOOST_HANA_PP_STRINGIZE(m28) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m25), &TYPE::m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m26), &TYPE::m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m27), &TYPE::m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m28), &TYPE::m28>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_30(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24), BOOST_HANA_PP_STRINGIZE(m25), BOOST_HANA_PP_STRINGIZE(m26), BOOST_HANA_PP_STRINGIZE(m27), BOOST_HANA_PP_STRINGIZE(m28), BOOST_HANA_PP_STRINGIZE(m29) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m25), &TYPE::m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m26), &TYPE::m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m27), &TYPE::m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m28), &TYPE::m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m29), &TYPE::m29>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_31(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24), BOOST_HANA_PP_STRINGIZE(m25), BOOST_HANA_PP_STRINGIZE(m26), BOOST_HANA_PP_STRINGIZE(m27), BOOST_HANA_PP_STRINGIZE(m28), BOOST_HANA_PP_STRINGIZE(m29), BOOST_HANA_PP_STRINGIZE(m30) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m25), &TYPE::m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m26), &TYPE::m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m27), &TYPE::m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m28), &TYPE::m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m29), &TYPE::m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m30), &TYPE::m30>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_32(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24), BOOST_HANA_PP_STRINGIZE(m25), BOOST_HANA_PP_STRINGIZE(m26), BOOST_HANA_PP_STRINGIZE(m27), BOOST_HANA_PP_STRINGIZE(m28), BOOST_HANA_PP_STRINGIZE(m29), BOOST_HANA_PP_STRINGIZE(m30), BOOST_HANA_PP_STRINGIZE(m31) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m25), &TYPE::m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m26), &TYPE::m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m27), &TYPE::m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m28), &TYPE::m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m29), &TYPE::m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m30), &TYPE::m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m31), &TYPE::m31>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_33(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24), BOOST_HANA_PP_STRINGIZE(m25), BOOST_HANA_PP_STRINGIZE(m26), BOOST_HANA_PP_STRINGIZE(m27), BOOST_HANA_PP_STRINGIZE(m28), BOOST_HANA_PP_STRINGIZE(m29), BOOST_HANA_PP_STRINGIZE(m30), BOOST_HANA_PP_STRINGIZE(m31), BOOST_HANA_PP_STRINGIZE(m32) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m25), &TYPE::m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m26), &TYPE::m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m27), &TYPE::m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m28), &TYPE::m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m29), &TYPE::m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m30), &TYPE::m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m31), &TYPE::m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m32), &TYPE::m32>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_34(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24), BOOST_HANA_PP_STRINGIZE(m25), BOOST_HANA_PP_STRINGIZE(m26), BOOST_HANA_PP_STRINGIZE(m27), BOOST_HANA_PP_STRINGIZE(m28), BOOST_HANA_PP_STRINGIZE(m29), BOOST_HANA_PP_STRINGIZE(m30), BOOST_HANA_PP_STRINGIZE(m31), BOOST_HANA_PP_STRINGIZE(m32), BOOST_HANA_PP_STRINGIZE(m33) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m25), &TYPE::m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m26), &TYPE::m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m27), &TYPE::m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m28), &TYPE::m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m29), &TYPE::m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m30), &TYPE::m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m31), &TYPE::m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m32), &TYPE::m32>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m33), &TYPE::m33>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_35(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24), BOOST_HANA_PP_STRINGIZE(m25), BOOST_HANA_PP_STRINGIZE(m26), BOOST_HANA_PP_STRINGIZE(m27), BOOST_HANA_PP_STRINGIZE(m28), BOOST_HANA_PP_STRINGIZE(m29), BOOST_HANA_PP_STRINGIZE(m30), BOOST_HANA_PP_STRINGIZE(m31), BOOST_HANA_PP_STRINGIZE(m32), BOOST_HANA_PP_STRINGIZE(m33), BOOST_HANA_PP_STRINGIZE(m34) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m25), &TYPE::m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m26), &TYPE::m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m27), &TYPE::m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m28), &TYPE::m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m29), &TYPE::m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m30), &TYPE::m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m31), &TYPE::m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m32), &TYPE::m32>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m33), &TYPE::m33>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m34), &TYPE::m34>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_36(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24), BOOST_HANA_PP_STRINGIZE(m25), BOOST_HANA_PP_STRINGIZE(m26), BOOST_HANA_PP_STRINGIZE(m27), BOOST_HANA_PP_STRINGIZE(m28), BOOST_HANA_PP_STRINGIZE(m29), BOOST_HANA_PP_STRINGIZE(m30), BOOST_HANA_PP_STRINGIZE(m31), BOOST_HANA_PP_STRINGIZE(m32), BOOST_HANA_PP_STRINGIZE(m33), BOOST_HANA_PP_STRINGIZE(m34), BOOST_HANA_PP_STRINGIZE(m35) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m25), &TYPE::m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m26), &TYPE::m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m27), &TYPE::m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m28), &TYPE::m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m29), &TYPE::m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m30), &TYPE::m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m31), &TYPE::m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m32), &TYPE::m32>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m33), &TYPE::m33>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m34), &TYPE::m34>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m35), &TYPE::m35>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_37(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24), BOOST_HANA_PP_STRINGIZE(m25), BOOST_HANA_PP_STRINGIZE(m26), BOOST_HANA_PP_STRINGIZE(m27), BOOST_HANA_PP_STRINGIZE(m28), BOOST_HANA_PP_STRINGIZE(m29), BOOST_HANA_PP_STRINGIZE(m30), BOOST_HANA_PP_STRINGIZE(m31), BOOST_HANA_PP_STRINGIZE(m32), BOOST_HANA_PP_STRINGIZE(m33), BOOST_HANA_PP_STRINGIZE(m34), BOOST_HANA_PP_STRINGIZE(m35), BOOST_HANA_PP_STRINGIZE(m36) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m25), &TYPE::m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m26), &TYPE::m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m27), &TYPE::m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m28), &TYPE::m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m29), &TYPE::m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m30), &TYPE::m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m31), &TYPE::m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m32), &TYPE::m32>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m33), &TYPE::m33>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m34), &TYPE::m34>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m35), &TYPE::m35>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<35, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m36), &TYPE::m36>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_38(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24), BOOST_HANA_PP_STRINGIZE(m25), BOOST_HANA_PP_STRINGIZE(m26), BOOST_HANA_PP_STRINGIZE(m27), BOOST_HANA_PP_STRINGIZE(m28), BOOST_HANA_PP_STRINGIZE(m29), BOOST_HANA_PP_STRINGIZE(m30), BOOST_HANA_PP_STRINGIZE(m31), BOOST_HANA_PP_STRINGIZE(m32), BOOST_HANA_PP_STRINGIZE(m33), BOOST_HANA_PP_STRINGIZE(m34), BOOST_HANA_PP_STRINGIZE(m35), BOOST_HANA_PP_STRINGIZE(m36), BOOST_HANA_PP_STRINGIZE(m37) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m25), &TYPE::m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m26), &TYPE::m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m27), &TYPE::m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m28), &TYPE::m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m29), &TYPE::m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m30), &TYPE::m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m31), &TYPE::m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m32), &TYPE::m32>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m33), &TYPE::m33>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m34), &TYPE::m34>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m35), &TYPE::m35>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<35, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m36), &TYPE::m36>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<36, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m37), &TYPE::m37>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_39(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24), BOOST_HANA_PP_STRINGIZE(m25), BOOST_HANA_PP_STRINGIZE(m26), BOOST_HANA_PP_STRINGIZE(m27), BOOST_HANA_PP_STRINGIZE(m28), BOOST_HANA_PP_STRINGIZE(m29), BOOST_HANA_PP_STRINGIZE(m30), BOOST_HANA_PP_STRINGIZE(m31), BOOST_HANA_PP_STRINGIZE(m32), BOOST_HANA_PP_STRINGIZE(m33), BOOST_HANA_PP_STRINGIZE(m34), BOOST_HANA_PP_STRINGIZE(m35), BOOST_HANA_PP_STRINGIZE(m36), BOOST_HANA_PP_STRINGIZE(m37), BOOST_HANA_PP_STRINGIZE(m38) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m25), &TYPE::m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m26), &TYPE::m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m27), &TYPE::m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m28), &TYPE::m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m29), &TYPE::m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m30), &TYPE::m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m31), &TYPE::m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m32), &TYPE::m32>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m33), &TYPE::m33>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m34), &TYPE::m34>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m35), &TYPE::m35>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<35, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m36), &TYPE::m36>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<36, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m37), &TYPE::m37>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<37, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m38), &TYPE::m38>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_40(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24), BOOST_HANA_PP_STRINGIZE(m25), BOOST_HANA_PP_STRINGIZE(m26), BOOST_HANA_PP_STRINGIZE(m27), BOOST_HANA_PP_STRINGIZE(m28), BOOST_HANA_PP_STRINGIZE(m29), BOOST_HANA_PP_STRINGIZE(m30), BOOST_HANA_PP_STRINGIZE(m31), BOOST_HANA_PP_STRINGIZE(m32), BOOST_HANA_PP_STRINGIZE(m33), BOOST_HANA_PP_STRINGIZE(m34), BOOST_HANA_PP_STRINGIZE(m35), BOOST_HANA_PP_STRINGIZE(m36), BOOST_HANA_PP_STRINGIZE(m37), BOOST_HANA_PP_STRINGIZE(m38), BOOST_HANA_PP_STRINGIZE(m39) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m25), &TYPE::m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m26), &TYPE::m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m27), &TYPE::m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m28), &TYPE::m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m29), &TYPE::m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m30), &TYPE::m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m31), &TYPE::m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m32), &TYPE::m32>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m33), &TYPE::m33>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m34), &TYPE::m34>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m35), &TYPE::m35>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<35, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m36), &TYPE::m36>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<36, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m37), &TYPE::m37>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<37, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m38), &TYPE::m38>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<38, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m39), &TYPE::m39>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_STRUCT_IMPL_41(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(m1), BOOST_HANA_PP_STRINGIZE(m2), BOOST_HANA_PP_STRINGIZE(m3), BOOST_HANA_PP_STRINGIZE(m4), BOOST_HANA_PP_STRINGIZE(m5), BOOST_HANA_PP_STRINGIZE(m6), BOOST_HANA_PP_STRINGIZE(m7), BOOST_HANA_PP_STRINGIZE(m8), BOOST_HANA_PP_STRINGIZE(m9), BOOST_HANA_PP_STRINGIZE(m10), BOOST_HANA_PP_STRINGIZE(m11), BOOST_HANA_PP_STRINGIZE(m12), BOOST_HANA_PP_STRINGIZE(m13), BOOST_HANA_PP_STRINGIZE(m14), BOOST_HANA_PP_STRINGIZE(m15), BOOST_HANA_PP_STRINGIZE(m16), BOOST_HANA_PP_STRINGIZE(m17), BOOST_HANA_PP_STRINGIZE(m18), BOOST_HANA_PP_STRINGIZE(m19), BOOST_HANA_PP_STRINGIZE(m20), BOOST_HANA_PP_STRINGIZE(m21), BOOST_HANA_PP_STRINGIZE(m22), BOOST_HANA_PP_STRINGIZE(m23), BOOST_HANA_PP_STRINGIZE(m24), BOOST_HANA_PP_STRINGIZE(m25), BOOST_HANA_PP_STRINGIZE(m26), BOOST_HANA_PP_STRINGIZE(m27), BOOST_HANA_PP_STRINGIZE(m28), BOOST_HANA_PP_STRINGIZE(m29), BOOST_HANA_PP_STRINGIZE(m30), BOOST_HANA_PP_STRINGIZE(m31), BOOST_HANA_PP_STRINGIZE(m32), BOOST_HANA_PP_STRINGIZE(m33), BOOST_HANA_PP_STRINGIZE(m34), BOOST_HANA_PP_STRINGIZE(m35), BOOST_HANA_PP_STRINGIZE(m36), BOOST_HANA_PP_STRINGIZE(m37), BOOST_HANA_PP_STRINGIZE(m38), BOOST_HANA_PP_STRINGIZE(m39), BOOST_HANA_PP_STRINGIZE(m40) \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m1), &TYPE::m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m2), &TYPE::m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m3), &TYPE::m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m4), &TYPE::m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m5), &TYPE::m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m6), &TYPE::m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m7), &TYPE::m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m8), &TYPE::m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m9), &TYPE::m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m10), &TYPE::m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m11), &TYPE::m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m12), &TYPE::m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m13), &TYPE::m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m14), &TYPE::m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m15), &TYPE::m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m16), &TYPE::m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m17), &TYPE::m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m18), &TYPE::m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m19), &TYPE::m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m20), &TYPE::m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m21), &TYPE::m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m22), &TYPE::m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m23), &TYPE::m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m24), &TYPE::m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m25), &TYPE::m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m26), &TYPE::m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m27), &TYPE::m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m28), &TYPE::m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m29), &TYPE::m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m30), &TYPE::m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m31), &TYPE::m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m32), &TYPE::m32>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m33), &TYPE::m33>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m34), &TYPE::m34>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m35), &TYPE::m35>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<35, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m36), &TYPE::m36>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<36, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m37), &TYPE::m37>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<37, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m38), &TYPE::m38>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<38, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m39), &TYPE::m39>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<39, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::m40), &TYPE::m40>{})\
- ); \
- } \
- }; \
- }} \
-/**/
-
-
-//////////////////////////////////////////////////////////////////////////////
-// BOOST_HANA_ADAPT_ADT
-//////////////////////////////////////////////////////////////////////////////
-template <typename ...>
-struct BOOST_HANA_ADAPT_ADT_must_be_called_in_the_global_namespace;
-
-#define BOOST_HANA_ADAPT_ADT(...) \
- template <> \
- struct BOOST_HANA_ADAPT_ADT_must_be_called_in_the_global_namespace<>; \
- BOOST_HANA_ADAPT_ADT_IMPL(BOOST_HANA_PP_NARG(__VA_ARGS__), __VA_ARGS__) \
- static_assert(true, "force the usage of a trailing semicolon") \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL(N, ...) \
- BOOST_HANA_PP_CONCAT(BOOST_HANA_ADAPT_ADT_IMPL_, N)(__VA_ARGS__)
-
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_1(TYPE ) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- \
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_2(TYPE , m1) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_3(TYPE , m1, m2) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_4(TYPE , m1, m2, m3) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_5(TYPE , m1, m2, m3, m4) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_6(TYPE , m1, m2, m3, m4, m5) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_7(TYPE , m1, m2, m3, m4, m5, m6) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_8(TYPE , m1, m2, m3, m4, m5, m6, m7) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_9(TYPE , m1, m2, m3, m4, m5, m6, m7, m8) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_10(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_11(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_12(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_13(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_14(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_15(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_16(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_17(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_18(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_19(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_20(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_21(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_22(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_23(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_24(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_25(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_26(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m25)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), BOOST_HANA_PP_DROP_FRONT m25)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_27(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m26)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), BOOST_HANA_PP_DROP_FRONT m25), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), BOOST_HANA_PP_DROP_FRONT m26)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_28(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m27)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), BOOST_HANA_PP_DROP_FRONT m25), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), BOOST_HANA_PP_DROP_FRONT m26), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), BOOST_HANA_PP_DROP_FRONT m27)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_29(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m28)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), BOOST_HANA_PP_DROP_FRONT m25), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), BOOST_HANA_PP_DROP_FRONT m26), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), BOOST_HANA_PP_DROP_FRONT m27), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), BOOST_HANA_PP_DROP_FRONT m28)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_30(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m29)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), BOOST_HANA_PP_DROP_FRONT m25), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), BOOST_HANA_PP_DROP_FRONT m26), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), BOOST_HANA_PP_DROP_FRONT m27), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), BOOST_HANA_PP_DROP_FRONT m28), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), BOOST_HANA_PP_DROP_FRONT m29)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_31(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m30)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), BOOST_HANA_PP_DROP_FRONT m25), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), BOOST_HANA_PP_DROP_FRONT m26), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), BOOST_HANA_PP_DROP_FRONT m27), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), BOOST_HANA_PP_DROP_FRONT m28), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), BOOST_HANA_PP_DROP_FRONT m29), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), BOOST_HANA_PP_DROP_FRONT m30)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_32(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m31)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), BOOST_HANA_PP_DROP_FRONT m25), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), BOOST_HANA_PP_DROP_FRONT m26), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), BOOST_HANA_PP_DROP_FRONT m27), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), BOOST_HANA_PP_DROP_FRONT m28), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), BOOST_HANA_PP_DROP_FRONT m29), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), BOOST_HANA_PP_DROP_FRONT m30), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), BOOST_HANA_PP_DROP_FRONT m31)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_33(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m32)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), BOOST_HANA_PP_DROP_FRONT m25), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), BOOST_HANA_PP_DROP_FRONT m26), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), BOOST_HANA_PP_DROP_FRONT m27), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), BOOST_HANA_PP_DROP_FRONT m28), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), BOOST_HANA_PP_DROP_FRONT m29), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), BOOST_HANA_PP_DROP_FRONT m30), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), BOOST_HANA_PP_DROP_FRONT m31), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), BOOST_HANA_PP_DROP_FRONT m32)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_34(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m32), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m33)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), BOOST_HANA_PP_DROP_FRONT m25), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), BOOST_HANA_PP_DROP_FRONT m26), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), BOOST_HANA_PP_DROP_FRONT m27), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), BOOST_HANA_PP_DROP_FRONT m28), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), BOOST_HANA_PP_DROP_FRONT m29), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), BOOST_HANA_PP_DROP_FRONT m30), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), BOOST_HANA_PP_DROP_FRONT m31), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), BOOST_HANA_PP_DROP_FRONT m32), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), BOOST_HANA_PP_DROP_FRONT m33)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_35(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m32), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m33), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m34)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), BOOST_HANA_PP_DROP_FRONT m25), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), BOOST_HANA_PP_DROP_FRONT m26), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), BOOST_HANA_PP_DROP_FRONT m27), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), BOOST_HANA_PP_DROP_FRONT m28), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), BOOST_HANA_PP_DROP_FRONT m29), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), BOOST_HANA_PP_DROP_FRONT m30), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), BOOST_HANA_PP_DROP_FRONT m31), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), BOOST_HANA_PP_DROP_FRONT m32), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), BOOST_HANA_PP_DROP_FRONT m33), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), BOOST_HANA_PP_DROP_FRONT m34)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_36(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m32), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m33), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m34), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m35)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), BOOST_HANA_PP_DROP_FRONT m25), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), BOOST_HANA_PP_DROP_FRONT m26), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), BOOST_HANA_PP_DROP_FRONT m27), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), BOOST_HANA_PP_DROP_FRONT m28), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), BOOST_HANA_PP_DROP_FRONT m29), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), BOOST_HANA_PP_DROP_FRONT m30), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), BOOST_HANA_PP_DROP_FRONT m31), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), BOOST_HANA_PP_DROP_FRONT m32), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), BOOST_HANA_PP_DROP_FRONT m33), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), BOOST_HANA_PP_DROP_FRONT m34), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), BOOST_HANA_PP_DROP_FRONT m35)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_37(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m32), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m33), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m34), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m35), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m36)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), BOOST_HANA_PP_DROP_FRONT m25), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), BOOST_HANA_PP_DROP_FRONT m26), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), BOOST_HANA_PP_DROP_FRONT m27), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), BOOST_HANA_PP_DROP_FRONT m28), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), BOOST_HANA_PP_DROP_FRONT m29), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), BOOST_HANA_PP_DROP_FRONT m30), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), BOOST_HANA_PP_DROP_FRONT m31), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), BOOST_HANA_PP_DROP_FRONT m32), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), BOOST_HANA_PP_DROP_FRONT m33), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), BOOST_HANA_PP_DROP_FRONT m34), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), BOOST_HANA_PP_DROP_FRONT m35), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<35, member_names>(), BOOST_HANA_PP_DROP_FRONT m36)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_38(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m32), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m33), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m34), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m35), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m36), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m37)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), BOOST_HANA_PP_DROP_FRONT m25), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), BOOST_HANA_PP_DROP_FRONT m26), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), BOOST_HANA_PP_DROP_FRONT m27), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), BOOST_HANA_PP_DROP_FRONT m28), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), BOOST_HANA_PP_DROP_FRONT m29), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), BOOST_HANA_PP_DROP_FRONT m30), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), BOOST_HANA_PP_DROP_FRONT m31), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), BOOST_HANA_PP_DROP_FRONT m32), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), BOOST_HANA_PP_DROP_FRONT m33), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), BOOST_HANA_PP_DROP_FRONT m34), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), BOOST_HANA_PP_DROP_FRONT m35), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<35, member_names>(), BOOST_HANA_PP_DROP_FRONT m36), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<36, member_names>(), BOOST_HANA_PP_DROP_FRONT m37)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_39(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m32), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m33), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m34), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m35), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m36), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m37), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m38)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), BOOST_HANA_PP_DROP_FRONT m25), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), BOOST_HANA_PP_DROP_FRONT m26), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), BOOST_HANA_PP_DROP_FRONT m27), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), BOOST_HANA_PP_DROP_FRONT m28), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), BOOST_HANA_PP_DROP_FRONT m29), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), BOOST_HANA_PP_DROP_FRONT m30), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), BOOST_HANA_PP_DROP_FRONT m31), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), BOOST_HANA_PP_DROP_FRONT m32), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), BOOST_HANA_PP_DROP_FRONT m33), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), BOOST_HANA_PP_DROP_FRONT m34), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), BOOST_HANA_PP_DROP_FRONT m35), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<35, member_names>(), BOOST_HANA_PP_DROP_FRONT m36), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<36, member_names>(), BOOST_HANA_PP_DROP_FRONT m37), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<37, member_names>(), BOOST_HANA_PP_DROP_FRONT m38)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_40(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m32), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m33), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m34), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m35), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m36), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m37), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m38), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m39)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), BOOST_HANA_PP_DROP_FRONT m25), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), BOOST_HANA_PP_DROP_FRONT m26), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), BOOST_HANA_PP_DROP_FRONT m27), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), BOOST_HANA_PP_DROP_FRONT m28), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), BOOST_HANA_PP_DROP_FRONT m29), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), BOOST_HANA_PP_DROP_FRONT m30), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), BOOST_HANA_PP_DROP_FRONT m31), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), BOOST_HANA_PP_DROP_FRONT m32), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), BOOST_HANA_PP_DROP_FRONT m33), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), BOOST_HANA_PP_DROP_FRONT m34), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), BOOST_HANA_PP_DROP_FRONT m35), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<35, member_names>(), BOOST_HANA_PP_DROP_FRONT m36), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<36, member_names>(), BOOST_HANA_PP_DROP_FRONT m37), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<37, member_names>(), BOOST_HANA_PP_DROP_FRONT m38), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<38, member_names>(), BOOST_HANA_PP_DROP_FRONT m39)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-#define BOOST_HANA_ADAPT_ADT_IMPL_41(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40) \
- namespace boost { namespace hana { \
- template <> \
- struct accessors_impl<TYPE> { \
- template <typename ...> \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m32), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m33), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m34), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m35), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m36), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m37), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m38), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m39), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_FRONT m40)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), BOOST_HANA_PP_DROP_FRONT m1), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), BOOST_HANA_PP_DROP_FRONT m2), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), BOOST_HANA_PP_DROP_FRONT m3), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), BOOST_HANA_PP_DROP_FRONT m4), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), BOOST_HANA_PP_DROP_FRONT m5), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), BOOST_HANA_PP_DROP_FRONT m6), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), BOOST_HANA_PP_DROP_FRONT m7), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), BOOST_HANA_PP_DROP_FRONT m8), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), BOOST_HANA_PP_DROP_FRONT m9), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), BOOST_HANA_PP_DROP_FRONT m10), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), BOOST_HANA_PP_DROP_FRONT m11), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), BOOST_HANA_PP_DROP_FRONT m12), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), BOOST_HANA_PP_DROP_FRONT m13), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), BOOST_HANA_PP_DROP_FRONT m14), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), BOOST_HANA_PP_DROP_FRONT m15), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), BOOST_HANA_PP_DROP_FRONT m16), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), BOOST_HANA_PP_DROP_FRONT m17), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), BOOST_HANA_PP_DROP_FRONT m18), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), BOOST_HANA_PP_DROP_FRONT m19), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), BOOST_HANA_PP_DROP_FRONT m20), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), BOOST_HANA_PP_DROP_FRONT m21), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), BOOST_HANA_PP_DROP_FRONT m22), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), BOOST_HANA_PP_DROP_FRONT m23), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), BOOST_HANA_PP_DROP_FRONT m24), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), BOOST_HANA_PP_DROP_FRONT m25), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), BOOST_HANA_PP_DROP_FRONT m26), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), BOOST_HANA_PP_DROP_FRONT m27), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), BOOST_HANA_PP_DROP_FRONT m28), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), BOOST_HANA_PP_DROP_FRONT m29), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), BOOST_HANA_PP_DROP_FRONT m30), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), BOOST_HANA_PP_DROP_FRONT m31), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), BOOST_HANA_PP_DROP_FRONT m32), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), BOOST_HANA_PP_DROP_FRONT m33), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), BOOST_HANA_PP_DROP_FRONT m34), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), BOOST_HANA_PP_DROP_FRONT m35), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<35, member_names>(), BOOST_HANA_PP_DROP_FRONT m36), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<36, member_names>(), BOOST_HANA_PP_DROP_FRONT m37), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<37, member_names>(), BOOST_HANA_PP_DROP_FRONT m38), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<38, member_names>(), BOOST_HANA_PP_DROP_FRONT m39), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<39, member_names>(), BOOST_HANA_PP_DROP_FRONT m40)\
- ); \
- } \
- }; \
- }} \
-/**/
-
-
-//////////////////////////////////////////////////////////////////////////////
-// BOOST_HANA_DEFINE_STRUCT
-//////////////////////////////////////////////////////////////////////////////
-#define BOOST_HANA_DEFINE_STRUCT(...) \
- BOOST_HANA_DEFINE_STRUCT_IMPL(BOOST_HANA_PP_NARG(__VA_ARGS__), __VA_ARGS__)
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL(N, ...) \
- BOOST_HANA_PP_CONCAT(BOOST_HANA_DEFINE_STRUCT_IMPL_, N)(__VA_ARGS__)
-
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_1(TYPE ) \
- \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- \
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- \
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_2(TYPE , m1) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_3(TYPE , m1, m2) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_4(TYPE , m1, m2, m3) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_5(TYPE , m1, m2, m3, m4) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_6(TYPE , m1, m2, m3, m4, m5) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_7(TYPE , m1, m2, m3, m4, m5, m6) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_8(TYPE , m1, m2, m3, m4, m5, m6, m7) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_9(TYPE , m1, m2, m3, m4, m5, m6, m7, m8) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_10(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_11(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_12(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_13(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_14(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_15(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_16(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_17(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_18(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_19(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_20(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_21(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_22(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_23(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_24(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_25(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_26(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; BOOST_HANA_PP_DROP_BACK m25 BOOST_HANA_PP_BACK m25; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m25)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m25), &TYPE::BOOST_HANA_PP_BACK m25>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_27(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; BOOST_HANA_PP_DROP_BACK m25 BOOST_HANA_PP_BACK m25; BOOST_HANA_PP_DROP_BACK m26 BOOST_HANA_PP_BACK m26; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m26)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m25), &TYPE::BOOST_HANA_PP_BACK m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m26), &TYPE::BOOST_HANA_PP_BACK m26>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_28(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; BOOST_HANA_PP_DROP_BACK m25 BOOST_HANA_PP_BACK m25; BOOST_HANA_PP_DROP_BACK m26 BOOST_HANA_PP_BACK m26; BOOST_HANA_PP_DROP_BACK m27 BOOST_HANA_PP_BACK m27; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m27)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m25), &TYPE::BOOST_HANA_PP_BACK m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m26), &TYPE::BOOST_HANA_PP_BACK m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m27), &TYPE::BOOST_HANA_PP_BACK m27>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_29(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; BOOST_HANA_PP_DROP_BACK m25 BOOST_HANA_PP_BACK m25; BOOST_HANA_PP_DROP_BACK m26 BOOST_HANA_PP_BACK m26; BOOST_HANA_PP_DROP_BACK m27 BOOST_HANA_PP_BACK m27; BOOST_HANA_PP_DROP_BACK m28 BOOST_HANA_PP_BACK m28; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m28)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m25), &TYPE::BOOST_HANA_PP_BACK m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m26), &TYPE::BOOST_HANA_PP_BACK m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m27), &TYPE::BOOST_HANA_PP_BACK m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m28), &TYPE::BOOST_HANA_PP_BACK m28>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_30(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; BOOST_HANA_PP_DROP_BACK m25 BOOST_HANA_PP_BACK m25; BOOST_HANA_PP_DROP_BACK m26 BOOST_HANA_PP_BACK m26; BOOST_HANA_PP_DROP_BACK m27 BOOST_HANA_PP_BACK m27; BOOST_HANA_PP_DROP_BACK m28 BOOST_HANA_PP_BACK m28; BOOST_HANA_PP_DROP_BACK m29 BOOST_HANA_PP_BACK m29; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m29)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m25), &TYPE::BOOST_HANA_PP_BACK m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m26), &TYPE::BOOST_HANA_PP_BACK m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m27), &TYPE::BOOST_HANA_PP_BACK m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m28), &TYPE::BOOST_HANA_PP_BACK m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m29), &TYPE::BOOST_HANA_PP_BACK m29>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_31(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; BOOST_HANA_PP_DROP_BACK m25 BOOST_HANA_PP_BACK m25; BOOST_HANA_PP_DROP_BACK m26 BOOST_HANA_PP_BACK m26; BOOST_HANA_PP_DROP_BACK m27 BOOST_HANA_PP_BACK m27; BOOST_HANA_PP_DROP_BACK m28 BOOST_HANA_PP_BACK m28; BOOST_HANA_PP_DROP_BACK m29 BOOST_HANA_PP_BACK m29; BOOST_HANA_PP_DROP_BACK m30 BOOST_HANA_PP_BACK m30; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m30)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m25), &TYPE::BOOST_HANA_PP_BACK m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m26), &TYPE::BOOST_HANA_PP_BACK m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m27), &TYPE::BOOST_HANA_PP_BACK m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m28), &TYPE::BOOST_HANA_PP_BACK m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m29), &TYPE::BOOST_HANA_PP_BACK m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m30), &TYPE::BOOST_HANA_PP_BACK m30>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_32(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; BOOST_HANA_PP_DROP_BACK m25 BOOST_HANA_PP_BACK m25; BOOST_HANA_PP_DROP_BACK m26 BOOST_HANA_PP_BACK m26; BOOST_HANA_PP_DROP_BACK m27 BOOST_HANA_PP_BACK m27; BOOST_HANA_PP_DROP_BACK m28 BOOST_HANA_PP_BACK m28; BOOST_HANA_PP_DROP_BACK m29 BOOST_HANA_PP_BACK m29; BOOST_HANA_PP_DROP_BACK m30 BOOST_HANA_PP_BACK m30; BOOST_HANA_PP_DROP_BACK m31 BOOST_HANA_PP_BACK m31; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m31)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m25), &TYPE::BOOST_HANA_PP_BACK m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m26), &TYPE::BOOST_HANA_PP_BACK m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m27), &TYPE::BOOST_HANA_PP_BACK m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m28), &TYPE::BOOST_HANA_PP_BACK m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m29), &TYPE::BOOST_HANA_PP_BACK m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m30), &TYPE::BOOST_HANA_PP_BACK m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m31), &TYPE::BOOST_HANA_PP_BACK m31>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_33(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; BOOST_HANA_PP_DROP_BACK m25 BOOST_HANA_PP_BACK m25; BOOST_HANA_PP_DROP_BACK m26 BOOST_HANA_PP_BACK m26; BOOST_HANA_PP_DROP_BACK m27 BOOST_HANA_PP_BACK m27; BOOST_HANA_PP_DROP_BACK m28 BOOST_HANA_PP_BACK m28; BOOST_HANA_PP_DROP_BACK m29 BOOST_HANA_PP_BACK m29; BOOST_HANA_PP_DROP_BACK m30 BOOST_HANA_PP_BACK m30; BOOST_HANA_PP_DROP_BACK m31 BOOST_HANA_PP_BACK m31; BOOST_HANA_PP_DROP_BACK m32 BOOST_HANA_PP_BACK m32; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m32)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m25), &TYPE::BOOST_HANA_PP_BACK m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m26), &TYPE::BOOST_HANA_PP_BACK m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m27), &TYPE::BOOST_HANA_PP_BACK m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m28), &TYPE::BOOST_HANA_PP_BACK m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m29), &TYPE::BOOST_HANA_PP_BACK m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m30), &TYPE::BOOST_HANA_PP_BACK m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m31), &TYPE::BOOST_HANA_PP_BACK m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m32), &TYPE::BOOST_HANA_PP_BACK m32>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_34(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; BOOST_HANA_PP_DROP_BACK m25 BOOST_HANA_PP_BACK m25; BOOST_HANA_PP_DROP_BACK m26 BOOST_HANA_PP_BACK m26; BOOST_HANA_PP_DROP_BACK m27 BOOST_HANA_PP_BACK m27; BOOST_HANA_PP_DROP_BACK m28 BOOST_HANA_PP_BACK m28; BOOST_HANA_PP_DROP_BACK m29 BOOST_HANA_PP_BACK m29; BOOST_HANA_PP_DROP_BACK m30 BOOST_HANA_PP_BACK m30; BOOST_HANA_PP_DROP_BACK m31 BOOST_HANA_PP_BACK m31; BOOST_HANA_PP_DROP_BACK m32 BOOST_HANA_PP_BACK m32; BOOST_HANA_PP_DROP_BACK m33 BOOST_HANA_PP_BACK m33; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m32), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m33)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m25), &TYPE::BOOST_HANA_PP_BACK m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m26), &TYPE::BOOST_HANA_PP_BACK m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m27), &TYPE::BOOST_HANA_PP_BACK m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m28), &TYPE::BOOST_HANA_PP_BACK m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m29), &TYPE::BOOST_HANA_PP_BACK m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m30), &TYPE::BOOST_HANA_PP_BACK m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m31), &TYPE::BOOST_HANA_PP_BACK m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m32), &TYPE::BOOST_HANA_PP_BACK m32>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m33), &TYPE::BOOST_HANA_PP_BACK m33>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_35(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; BOOST_HANA_PP_DROP_BACK m25 BOOST_HANA_PP_BACK m25; BOOST_HANA_PP_DROP_BACK m26 BOOST_HANA_PP_BACK m26; BOOST_HANA_PP_DROP_BACK m27 BOOST_HANA_PP_BACK m27; BOOST_HANA_PP_DROP_BACK m28 BOOST_HANA_PP_BACK m28; BOOST_HANA_PP_DROP_BACK m29 BOOST_HANA_PP_BACK m29; BOOST_HANA_PP_DROP_BACK m30 BOOST_HANA_PP_BACK m30; BOOST_HANA_PP_DROP_BACK m31 BOOST_HANA_PP_BACK m31; BOOST_HANA_PP_DROP_BACK m32 BOOST_HANA_PP_BACK m32; BOOST_HANA_PP_DROP_BACK m33 BOOST_HANA_PP_BACK m33; BOOST_HANA_PP_DROP_BACK m34 BOOST_HANA_PP_BACK m34; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m32), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m33), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m34)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m25), &TYPE::BOOST_HANA_PP_BACK m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m26), &TYPE::BOOST_HANA_PP_BACK m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m27), &TYPE::BOOST_HANA_PP_BACK m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m28), &TYPE::BOOST_HANA_PP_BACK m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m29), &TYPE::BOOST_HANA_PP_BACK m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m30), &TYPE::BOOST_HANA_PP_BACK m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m31), &TYPE::BOOST_HANA_PP_BACK m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m32), &TYPE::BOOST_HANA_PP_BACK m32>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m33), &TYPE::BOOST_HANA_PP_BACK m33>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m34), &TYPE::BOOST_HANA_PP_BACK m34>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_36(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; BOOST_HANA_PP_DROP_BACK m25 BOOST_HANA_PP_BACK m25; BOOST_HANA_PP_DROP_BACK m26 BOOST_HANA_PP_BACK m26; BOOST_HANA_PP_DROP_BACK m27 BOOST_HANA_PP_BACK m27; BOOST_HANA_PP_DROP_BACK m28 BOOST_HANA_PP_BACK m28; BOOST_HANA_PP_DROP_BACK m29 BOOST_HANA_PP_BACK m29; BOOST_HANA_PP_DROP_BACK m30 BOOST_HANA_PP_BACK m30; BOOST_HANA_PP_DROP_BACK m31 BOOST_HANA_PP_BACK m31; BOOST_HANA_PP_DROP_BACK m32 BOOST_HANA_PP_BACK m32; BOOST_HANA_PP_DROP_BACK m33 BOOST_HANA_PP_BACK m33; BOOST_HANA_PP_DROP_BACK m34 BOOST_HANA_PP_BACK m34; BOOST_HANA_PP_DROP_BACK m35 BOOST_HANA_PP_BACK m35; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m32), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m33), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m34), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m35)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m25), &TYPE::BOOST_HANA_PP_BACK m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m26), &TYPE::BOOST_HANA_PP_BACK m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m27), &TYPE::BOOST_HANA_PP_BACK m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m28), &TYPE::BOOST_HANA_PP_BACK m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m29), &TYPE::BOOST_HANA_PP_BACK m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m30), &TYPE::BOOST_HANA_PP_BACK m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m31), &TYPE::BOOST_HANA_PP_BACK m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m32), &TYPE::BOOST_HANA_PP_BACK m32>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m33), &TYPE::BOOST_HANA_PP_BACK m33>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m34), &TYPE::BOOST_HANA_PP_BACK m34>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m35), &TYPE::BOOST_HANA_PP_BACK m35>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_37(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; BOOST_HANA_PP_DROP_BACK m25 BOOST_HANA_PP_BACK m25; BOOST_HANA_PP_DROP_BACK m26 BOOST_HANA_PP_BACK m26; BOOST_HANA_PP_DROP_BACK m27 BOOST_HANA_PP_BACK m27; BOOST_HANA_PP_DROP_BACK m28 BOOST_HANA_PP_BACK m28; BOOST_HANA_PP_DROP_BACK m29 BOOST_HANA_PP_BACK m29; BOOST_HANA_PP_DROP_BACK m30 BOOST_HANA_PP_BACK m30; BOOST_HANA_PP_DROP_BACK m31 BOOST_HANA_PP_BACK m31; BOOST_HANA_PP_DROP_BACK m32 BOOST_HANA_PP_BACK m32; BOOST_HANA_PP_DROP_BACK m33 BOOST_HANA_PP_BACK m33; BOOST_HANA_PP_DROP_BACK m34 BOOST_HANA_PP_BACK m34; BOOST_HANA_PP_DROP_BACK m35 BOOST_HANA_PP_BACK m35; BOOST_HANA_PP_DROP_BACK m36 BOOST_HANA_PP_BACK m36; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m32), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m33), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m34), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m35), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m36)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m25), &TYPE::BOOST_HANA_PP_BACK m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m26), &TYPE::BOOST_HANA_PP_BACK m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m27), &TYPE::BOOST_HANA_PP_BACK m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m28), &TYPE::BOOST_HANA_PP_BACK m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m29), &TYPE::BOOST_HANA_PP_BACK m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m30), &TYPE::BOOST_HANA_PP_BACK m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m31), &TYPE::BOOST_HANA_PP_BACK m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m32), &TYPE::BOOST_HANA_PP_BACK m32>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m33), &TYPE::BOOST_HANA_PP_BACK m33>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m34), &TYPE::BOOST_HANA_PP_BACK m34>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m35), &TYPE::BOOST_HANA_PP_BACK m35>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<35, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m36), &TYPE::BOOST_HANA_PP_BACK m36>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_38(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; BOOST_HANA_PP_DROP_BACK m25 BOOST_HANA_PP_BACK m25; BOOST_HANA_PP_DROP_BACK m26 BOOST_HANA_PP_BACK m26; BOOST_HANA_PP_DROP_BACK m27 BOOST_HANA_PP_BACK m27; BOOST_HANA_PP_DROP_BACK m28 BOOST_HANA_PP_BACK m28; BOOST_HANA_PP_DROP_BACK m29 BOOST_HANA_PP_BACK m29; BOOST_HANA_PP_DROP_BACK m30 BOOST_HANA_PP_BACK m30; BOOST_HANA_PP_DROP_BACK m31 BOOST_HANA_PP_BACK m31; BOOST_HANA_PP_DROP_BACK m32 BOOST_HANA_PP_BACK m32; BOOST_HANA_PP_DROP_BACK m33 BOOST_HANA_PP_BACK m33; BOOST_HANA_PP_DROP_BACK m34 BOOST_HANA_PP_BACK m34; BOOST_HANA_PP_DROP_BACK m35 BOOST_HANA_PP_BACK m35; BOOST_HANA_PP_DROP_BACK m36 BOOST_HANA_PP_BACK m36; BOOST_HANA_PP_DROP_BACK m37 BOOST_HANA_PP_BACK m37; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m32), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m33), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m34), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m35), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m36), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m37)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m25), &TYPE::BOOST_HANA_PP_BACK m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m26), &TYPE::BOOST_HANA_PP_BACK m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m27), &TYPE::BOOST_HANA_PP_BACK m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m28), &TYPE::BOOST_HANA_PP_BACK m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m29), &TYPE::BOOST_HANA_PP_BACK m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m30), &TYPE::BOOST_HANA_PP_BACK m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m31), &TYPE::BOOST_HANA_PP_BACK m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m32), &TYPE::BOOST_HANA_PP_BACK m32>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m33), &TYPE::BOOST_HANA_PP_BACK m33>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m34), &TYPE::BOOST_HANA_PP_BACK m34>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m35), &TYPE::BOOST_HANA_PP_BACK m35>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<35, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m36), &TYPE::BOOST_HANA_PP_BACK m36>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<36, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m37), &TYPE::BOOST_HANA_PP_BACK m37>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_39(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; BOOST_HANA_PP_DROP_BACK m25 BOOST_HANA_PP_BACK m25; BOOST_HANA_PP_DROP_BACK m26 BOOST_HANA_PP_BACK m26; BOOST_HANA_PP_DROP_BACK m27 BOOST_HANA_PP_BACK m27; BOOST_HANA_PP_DROP_BACK m28 BOOST_HANA_PP_BACK m28; BOOST_HANA_PP_DROP_BACK m29 BOOST_HANA_PP_BACK m29; BOOST_HANA_PP_DROP_BACK m30 BOOST_HANA_PP_BACK m30; BOOST_HANA_PP_DROP_BACK m31 BOOST_HANA_PP_BACK m31; BOOST_HANA_PP_DROP_BACK m32 BOOST_HANA_PP_BACK m32; BOOST_HANA_PP_DROP_BACK m33 BOOST_HANA_PP_BACK m33; BOOST_HANA_PP_DROP_BACK m34 BOOST_HANA_PP_BACK m34; BOOST_HANA_PP_DROP_BACK m35 BOOST_HANA_PP_BACK m35; BOOST_HANA_PP_DROP_BACK m36 BOOST_HANA_PP_BACK m36; BOOST_HANA_PP_DROP_BACK m37 BOOST_HANA_PP_BACK m37; BOOST_HANA_PP_DROP_BACK m38 BOOST_HANA_PP_BACK m38; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m32), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m33), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m34), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m35), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m36), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m37), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m38)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m25), &TYPE::BOOST_HANA_PP_BACK m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m26), &TYPE::BOOST_HANA_PP_BACK m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m27), &TYPE::BOOST_HANA_PP_BACK m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m28), &TYPE::BOOST_HANA_PP_BACK m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m29), &TYPE::BOOST_HANA_PP_BACK m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m30), &TYPE::BOOST_HANA_PP_BACK m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m31), &TYPE::BOOST_HANA_PP_BACK m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m32), &TYPE::BOOST_HANA_PP_BACK m32>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m33), &TYPE::BOOST_HANA_PP_BACK m33>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m34), &TYPE::BOOST_HANA_PP_BACK m34>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m35), &TYPE::BOOST_HANA_PP_BACK m35>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<35, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m36), &TYPE::BOOST_HANA_PP_BACK m36>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<36, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m37), &TYPE::BOOST_HANA_PP_BACK m37>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<37, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m38), &TYPE::BOOST_HANA_PP_BACK m38>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_40(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; BOOST_HANA_PP_DROP_BACK m25 BOOST_HANA_PP_BACK m25; BOOST_HANA_PP_DROP_BACK m26 BOOST_HANA_PP_BACK m26; BOOST_HANA_PP_DROP_BACK m27 BOOST_HANA_PP_BACK m27; BOOST_HANA_PP_DROP_BACK m28 BOOST_HANA_PP_BACK m28; BOOST_HANA_PP_DROP_BACK m29 BOOST_HANA_PP_BACK m29; BOOST_HANA_PP_DROP_BACK m30 BOOST_HANA_PP_BACK m30; BOOST_HANA_PP_DROP_BACK m31 BOOST_HANA_PP_BACK m31; BOOST_HANA_PP_DROP_BACK m32 BOOST_HANA_PP_BACK m32; BOOST_HANA_PP_DROP_BACK m33 BOOST_HANA_PP_BACK m33; BOOST_HANA_PP_DROP_BACK m34 BOOST_HANA_PP_BACK m34; BOOST_HANA_PP_DROP_BACK m35 BOOST_HANA_PP_BACK m35; BOOST_HANA_PP_DROP_BACK m36 BOOST_HANA_PP_BACK m36; BOOST_HANA_PP_DROP_BACK m37 BOOST_HANA_PP_BACK m37; BOOST_HANA_PP_DROP_BACK m38 BOOST_HANA_PP_BACK m38; BOOST_HANA_PP_DROP_BACK m39 BOOST_HANA_PP_BACK m39; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m32), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m33), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m34), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m35), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m36), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m37), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m38), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m39)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m25), &TYPE::BOOST_HANA_PP_BACK m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m26), &TYPE::BOOST_HANA_PP_BACK m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m27), &TYPE::BOOST_HANA_PP_BACK m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m28), &TYPE::BOOST_HANA_PP_BACK m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m29), &TYPE::BOOST_HANA_PP_BACK m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m30), &TYPE::BOOST_HANA_PP_BACK m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m31), &TYPE::BOOST_HANA_PP_BACK m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m32), &TYPE::BOOST_HANA_PP_BACK m32>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m33), &TYPE::BOOST_HANA_PP_BACK m33>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m34), &TYPE::BOOST_HANA_PP_BACK m34>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m35), &TYPE::BOOST_HANA_PP_BACK m35>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<35, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m36), &TYPE::BOOST_HANA_PP_BACK m36>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<36, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m37), &TYPE::BOOST_HANA_PP_BACK m37>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<37, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m38), &TYPE::BOOST_HANA_PP_BACK m38>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<38, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m39), &TYPE::BOOST_HANA_PP_BACK m39>{})\
- ); \
- } \
- } \
-/**/
-
-#define BOOST_HANA_DEFINE_STRUCT_IMPL_41(TYPE , m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12, m13, m14, m15, m16, m17, m18, m19, m20, m21, m22, m23, m24, m25, m26, m27, m28, m29, m30, m31, m32, m33, m34, m35, m36, m37, m38, m39, m40) \
- BOOST_HANA_PP_DROP_BACK m1 BOOST_HANA_PP_BACK m1; BOOST_HANA_PP_DROP_BACK m2 BOOST_HANA_PP_BACK m2; BOOST_HANA_PP_DROP_BACK m3 BOOST_HANA_PP_BACK m3; BOOST_HANA_PP_DROP_BACK m4 BOOST_HANA_PP_BACK m4; BOOST_HANA_PP_DROP_BACK m5 BOOST_HANA_PP_BACK m5; BOOST_HANA_PP_DROP_BACK m6 BOOST_HANA_PP_BACK m6; BOOST_HANA_PP_DROP_BACK m7 BOOST_HANA_PP_BACK m7; BOOST_HANA_PP_DROP_BACK m8 BOOST_HANA_PP_BACK m8; BOOST_HANA_PP_DROP_BACK m9 BOOST_HANA_PP_BACK m9; BOOST_HANA_PP_DROP_BACK m10 BOOST_HANA_PP_BACK m10; BOOST_HANA_PP_DROP_BACK m11 BOOST_HANA_PP_BACK m11; BOOST_HANA_PP_DROP_BACK m12 BOOST_HANA_PP_BACK m12; BOOST_HANA_PP_DROP_BACK m13 BOOST_HANA_PP_BACK m13; BOOST_HANA_PP_DROP_BACK m14 BOOST_HANA_PP_BACK m14; BOOST_HANA_PP_DROP_BACK m15 BOOST_HANA_PP_BACK m15; BOOST_HANA_PP_DROP_BACK m16 BOOST_HANA_PP_BACK m16; BOOST_HANA_PP_DROP_BACK m17 BOOST_HANA_PP_BACK m17; BOOST_HANA_PP_DROP_BACK m18 BOOST_HANA_PP_BACK m18; BOOST_HANA_PP_DROP_BACK m19 BOOST_HANA_PP_BACK m19; BOOST_HANA_PP_DROP_BACK m20 BOOST_HANA_PP_BACK m20; BOOST_HANA_PP_DROP_BACK m21 BOOST_HANA_PP_BACK m21; BOOST_HANA_PP_DROP_BACK m22 BOOST_HANA_PP_BACK m22; BOOST_HANA_PP_DROP_BACK m23 BOOST_HANA_PP_BACK m23; BOOST_HANA_PP_DROP_BACK m24 BOOST_HANA_PP_BACK m24; BOOST_HANA_PP_DROP_BACK m25 BOOST_HANA_PP_BACK m25; BOOST_HANA_PP_DROP_BACK m26 BOOST_HANA_PP_BACK m26; BOOST_HANA_PP_DROP_BACK m27 BOOST_HANA_PP_BACK m27; BOOST_HANA_PP_DROP_BACK m28 BOOST_HANA_PP_BACK m28; BOOST_HANA_PP_DROP_BACK m29 BOOST_HANA_PP_BACK m29; BOOST_HANA_PP_DROP_BACK m30 BOOST_HANA_PP_BACK m30; BOOST_HANA_PP_DROP_BACK m31 BOOST_HANA_PP_BACK m31; BOOST_HANA_PP_DROP_BACK m32 BOOST_HANA_PP_BACK m32; BOOST_HANA_PP_DROP_BACK m33 BOOST_HANA_PP_BACK m33; BOOST_HANA_PP_DROP_BACK m34 BOOST_HANA_PP_BACK m34; BOOST_HANA_PP_DROP_BACK m35 BOOST_HANA_PP_BACK m35; BOOST_HANA_PP_DROP_BACK m36 BOOST_HANA_PP_BACK m36; BOOST_HANA_PP_DROP_BACK m37 BOOST_HANA_PP_BACK m37; BOOST_HANA_PP_DROP_BACK m38 BOOST_HANA_PP_BACK m38; BOOST_HANA_PP_DROP_BACK m39 BOOST_HANA_PP_BACK m39; BOOST_HANA_PP_DROP_BACK m40 BOOST_HANA_PP_BACK m40; \
- \
- struct hana_accessors_impl { \
- static constexpr auto apply() { \
- struct member_names { \
- static constexpr auto get() { \
- return ::boost::hana::make_tuple( \
- BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m1), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m2), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m3), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m4), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m5), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m6), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m7), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m8), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m9), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m10), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m11), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m12), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m13), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m14), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m15), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m16), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m17), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m18), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m19), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m20), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m21), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m22), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m23), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m24), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m25), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m26), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m27), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m28), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m29), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m30), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m31), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m32), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m33), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m34), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m35), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m36), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m37), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m38), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m39), BOOST_HANA_PP_STRINGIZE(BOOST_HANA_PP_BACK m40)\
- ); \
- } \
- }; \
- return ::boost::hana::make_tuple( \
- ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<0, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m1), &TYPE::BOOST_HANA_PP_BACK m1>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<1, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m2), &TYPE::BOOST_HANA_PP_BACK m2>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<2, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m3), &TYPE::BOOST_HANA_PP_BACK m3>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<3, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m4), &TYPE::BOOST_HANA_PP_BACK m4>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<4, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m5), &TYPE::BOOST_HANA_PP_BACK m5>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<5, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m6), &TYPE::BOOST_HANA_PP_BACK m6>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<6, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m7), &TYPE::BOOST_HANA_PP_BACK m7>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<7, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m8), &TYPE::BOOST_HANA_PP_BACK m8>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<8, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m9), &TYPE::BOOST_HANA_PP_BACK m9>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<9, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m10), &TYPE::BOOST_HANA_PP_BACK m10>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<10, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m11), &TYPE::BOOST_HANA_PP_BACK m11>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<11, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m12), &TYPE::BOOST_HANA_PP_BACK m12>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<12, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m13), &TYPE::BOOST_HANA_PP_BACK m13>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<13, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m14), &TYPE::BOOST_HANA_PP_BACK m14>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<14, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m15), &TYPE::BOOST_HANA_PP_BACK m15>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<15, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m16), &TYPE::BOOST_HANA_PP_BACK m16>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<16, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m17), &TYPE::BOOST_HANA_PP_BACK m17>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<17, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m18), &TYPE::BOOST_HANA_PP_BACK m18>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<18, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m19), &TYPE::BOOST_HANA_PP_BACK m19>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<19, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m20), &TYPE::BOOST_HANA_PP_BACK m20>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<20, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m21), &TYPE::BOOST_HANA_PP_BACK m21>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<21, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m22), &TYPE::BOOST_HANA_PP_BACK m22>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<22, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m23), &TYPE::BOOST_HANA_PP_BACK m23>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<23, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m24), &TYPE::BOOST_HANA_PP_BACK m24>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<24, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m25), &TYPE::BOOST_HANA_PP_BACK m25>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<25, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m26), &TYPE::BOOST_HANA_PP_BACK m26>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<26, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m27), &TYPE::BOOST_HANA_PP_BACK m27>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<27, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m28), &TYPE::BOOST_HANA_PP_BACK m28>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<28, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m29), &TYPE::BOOST_HANA_PP_BACK m29>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<29, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m30), &TYPE::BOOST_HANA_PP_BACK m30>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<30, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m31), &TYPE::BOOST_HANA_PP_BACK m31>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<31, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m32), &TYPE::BOOST_HANA_PP_BACK m32>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<32, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m33), &TYPE::BOOST_HANA_PP_BACK m33>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<33, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m34), &TYPE::BOOST_HANA_PP_BACK m34>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<34, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m35), &TYPE::BOOST_HANA_PP_BACK m35>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<35, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m36), &TYPE::BOOST_HANA_PP_BACK m36>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<36, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m37), &TYPE::BOOST_HANA_PP_BACK m37>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<37, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m38), &TYPE::BOOST_HANA_PP_BACK m38>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<38, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m39), &TYPE::BOOST_HANA_PP_BACK m39>{}), ::boost::hana::make_pair(::boost::hana::struct_detail::prepare_member_name<39, member_names>(), ::boost::hana::struct_detail::member_ptr<decltype(&TYPE::BOOST_HANA_PP_BACK m40), &TYPE::BOOST_HANA_PP_BACK m40>{})\
- ); \
- } \
- } \
-/**/
-
-
-#endif // !BOOST_HANA_DETAIL_STRUCT_MACROS_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/type_at.hpp b/contrib/restricted/boost/boost/hana/detail/type_at.hpp
deleted file mode 100644
index c7b8311f47..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/type_at.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::type_at`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_TYPE_AT_HPP
-#define BOOST_HANA_DETAIL_TYPE_AT_HPP
-
-#include <boost/hana/config.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-// If possible, use an intrinsic provided by Clang
-#if defined(__has_builtin)
-# if __has_builtin(__type_pack_element)
-# define BOOST_HANA_USE_TYPE_PACK_ELEMENT_INTRINSIC
-# endif
-#endif
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- namespace td {
- template <std::size_t I, typename T>
- struct elt { using type = T; };
-
- template <typename Indices, typename ...T>
- struct indexer;
-
- template <std::size_t ...I, typename ...T>
- struct indexer<std::index_sequence<I...>, T...>
- : elt<I, T>...
- { };
-
- template <std::size_t I, typename T>
- elt<I, T> get_elt(elt<I, T> const&);
- }
-
- //! @ingroup group-details
- //! Classic MPL-style metafunction returning the nth element of a type
- //! parameter pack.
- template <std::size_t n, typename ...T>
- struct type_at {
-#if defined(BOOST_HANA_USE_TYPE_PACK_ELEMENT_INTRINSIC)
- using type = __type_pack_element<n, T...>;
-#else
- using Indexer = td::indexer<std::make_index_sequence<sizeof...(T)>, T...>;
- using type = typename decltype(td::get_elt<n>(Indexer{}))::type;
-#endif
- };
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_TYPE_AT_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/type_foldl1.hpp b/contrib/restricted/boost/boost/hana/detail/type_foldl1.hpp
deleted file mode 100644
index b65e3463fe..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/type_foldl1.hpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::type_foldl1`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_TYPE_FOLDL1_HPP
-#define BOOST_HANA_DETAIL_TYPE_FOLDL1_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <unsigned n>
- struct type_foldl1_t;
-
- template <>
- struct type_foldl1_t<0> {
- template <
- template <typename ...> class f,
- typename state
- >
- using result = state;
- };
-
- template <>
- struct type_foldl1_t<1> {
- template <
- template <typename ...> class f,
- typename state,
- typename x1
- >
- using result = typename f<state, x1>::type;
- };
-
- template <>
- struct type_foldl1_t<2> {
- template <
- template <typename ...> class f,
- typename state,
- typename x1, typename x2
- >
- using result = typename f<typename f<state, x1>::type, x2>::type;
- };
-
- template <>
- struct type_foldl1_t<3> {
- template <
- template <typename ...> class f,
- typename state,
- typename x1, typename x2, typename x3
- >
- using result = typename f<
- typename f<
- typename f<state, x1>::type,
- x2
- >::type,
- x3
- >::type;
- };
-
- template <>
- struct type_foldl1_t<4> {
- template <
- template <typename ...> class f,
- typename state,
- typename x1, typename x2, typename x3, typename x4
- >
- using result = typename f<
- typename f<
- typename f<
- typename f<state, x1>::type,
- x2
- >::type,
- x3
- >::type,
- x4
- >::type;
- };
-
- template <>
- struct type_foldl1_t<5> {
- template <
- template <typename ...> class f,
- typename state,
- typename x1, typename x2, typename x3, typename x4, typename x5
- >
- using result = typename f<
- typename f<
- typename f<
- typename f<
- typename f<state, x1>::type,
- x2
- >::type,
- x3
- >::type,
- x4
- >::type,
- x5
- >::type;
- };
-
- template <>
- struct type_foldl1_t<6> {
- template <
- template <typename ...> class f,
- typename state,
- typename x1, typename x2, typename x3, typename x4, typename x5, typename x6,
- typename ...xs
- >
- using result =
- typename type_foldl1_t<(sizeof...(xs) > 6 ? 6 : sizeof...(xs))>::
- template result<
- f,
- typename f<
- typename f<
- typename f<
- typename f<
- typename f<
- typename f<state, x1>::type,
- x2
- >::type,
- x3
- >::type,
- x4
- >::type,
- x5
- >::type,
- x6
- >::type,
- xs...
- >;
- };
-
- template <template <typename ...> class f, typename x1, typename ...xn>
- struct type_foldl1 {
- using type = typename type_foldl1_t<(sizeof...(xn) > 6 ? 6 : sizeof...(xn))>
- ::template result<f, x1, xn...>;
- };
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_TYPE_FOLDL1_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/type_foldr1.hpp b/contrib/restricted/boost/boost/hana/detail/type_foldr1.hpp
deleted file mode 100644
index badf1b03d6..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/type_foldr1.hpp
+++ /dev/null
@@ -1,149 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::type_foldr1`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_TYPE_FOLDR1_HPP
-#define BOOST_HANA_DETAIL_TYPE_FOLDR1_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <unsigned n>
- struct type_foldr1_t;
-
- template <>
- struct type_foldr1_t<0> {
- template <
- template <typename ...> class f,
- typename state
- >
- using result = state;
- };
-
- template <>
- struct type_foldr1_t<1> {
- template <
- template <typename ...> class f,
- typename x1,
- typename state
- >
- using result = typename f<x1, state>::type;
- };
-
- template <>
- struct type_foldr1_t<2> {
- template <
- template <typename ...> class f,
- typename x1, typename x2,
- typename state
- >
- using result = typename f<x1, typename f<x2, state>::type>::type;
- };
-
- template <>
- struct type_foldr1_t<3> {
- template <
- template <typename ...> class f,
- typename x1, typename x2, typename x3,
- typename state
- >
- using result = typename f<
- x1,
- typename f<
- x2,
- typename f<
- x3,
- state
- >::type
- >::type
- >::type;
- };
-
- template <>
- struct type_foldr1_t<4> {
- template <
- template <typename ...> class f,
- typename x1, typename x2, typename x3, typename x4,
- typename state
- >
- using result = typename f<
- x1,
- typename f<
- x2,
- typename f<
- x3,
- typename f<
- x4,
- state
- >::type
- >::type
- >::type
- >::type;
- };
-
- template <>
- struct type_foldr1_t<5> {
- template <
- template <typename ...> class f,
- typename x1, typename x2, typename x3, typename x4, typename x5,
- typename state
- >
- using result = typename f<
- x1,
- typename f<
- x2,
- typename f<
- x3,
- typename f<
- x4,
- typename f<
- x5,
- state
- >::type
- >::type
- >::type
- >::type
- >::type;
- };
-
- template <>
- struct type_foldr1_t<6> {
- template <
- template <typename ...> class f,
- typename x1, typename x2, typename x3, typename x4, typename x5, typename x6,
- typename ...xs
- >
- using result =
- typename f<
- x1,
- typename f<
- x2,
- typename f<
- x3,
- typename f<
- x4,
- typename f<
- x5,
- typename type_foldr1_t<(sizeof...(xs) > 6 ? 6 : sizeof...(xs))>::
- template result<f, x6, xs...>
- >::type
- >::type
- >::type
- >::type
- >::type;
- };
-
- template <template <typename ...> class f, typename x1, typename ...xn>
- struct type_foldr1 {
- using type = typename type_foldr1_t<(sizeof...(xn) > 6 ? 6 : sizeof...(xn))>
- ::template result<f, x1, xn...>;
- };
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_TYPE_FOLDR1_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/unpack_flatten.hpp b/contrib/restricted/boost/boost/hana/detail/unpack_flatten.hpp
deleted file mode 100644
index 65cb3d9507..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/unpack_flatten.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::unpack_flatten`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_UNPACK_FLATTEN_HPP
-#define BOOST_HANA_DETAIL_UNPACK_FLATTEN_HPP
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/algorithm.hpp>
-#include <boost/hana/detail/array.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/unpack.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <std::size_t ...Lengths>
- struct flatten_indices {
- // avoid empty arrays by appending 0 to `lengths`
- static constexpr std::size_t lengths[sizeof...(Lengths) + 1] = {Lengths..., 0};
- static constexpr auto flat_length =
- detail::accumulate(lengths, lengths + sizeof...(Lengths), 0);
-
- template <bool Inner>
- static constexpr auto compute() {
- detail::array<std::size_t, flat_length> indices{};
- for (std::size_t index = 0, i = 0; i < sizeof...(Lengths); ++i)
- for (std::size_t j = 0; j < lengths[i]; ++j, ++index)
- indices[index] = (Inner ? i : j);
- return indices;
- }
-
- static constexpr auto inner = compute<true>();
- static constexpr auto outer = compute<false>();
-
- template <typename Xs, typename F, std::size_t ...i>
- static constexpr decltype(auto)
- apply(Xs&& xs, F&& f, std::index_sequence<i...>) {
- return static_cast<F&&>(f)(
- hana::at_c<outer[i]>(hana::at_c<inner[i]>(
- static_cast<Xs&&>(xs)
- ))...
- );
- }
- };
-
- struct make_flatten_indices {
- template <typename ...Xs>
- auto operator()(Xs const& ...xs) const -> detail::flatten_indices<
- decltype(hana::length(xs))::value...
- >;
- };
-
- template <typename Xs, typename F>
- constexpr decltype(auto) unpack_flatten(Xs&& xs, F&& f) {
- using Indices = decltype(hana::unpack(xs, make_flatten_indices{}));
- return Indices::apply(static_cast<Xs&&>(xs), static_cast<F&&>(f),
- std::make_index_sequence<Indices::flat_length>{});
- }
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_UNPACK_FLATTEN_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/variadic/at.hpp b/contrib/restricted/boost/boost/hana/detail/variadic/at.hpp
deleted file mode 100644
index 9ef9e2944d..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/variadic/at.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::variadic::at`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_VARIADIC_AT_HPP
-#define BOOST_HANA_DETAIL_VARIADIC_AT_HPP
-
-#include <boost/hana/config.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail { namespace variadic {
- template <std::size_t n, typename = std::make_index_sequence<n>>
- struct at_type;
-
- template <std::size_t n, std::size_t ...ignore>
- struct at_type<n, std::index_sequence<ignore...>> {
- private:
- template <typename Nth>
- static constexpr auto go(decltype(ignore, (void*)0)..., Nth nth, ...)
- { return nth; }
-
- public:
- template <typename ...Xs>
- constexpr auto operator()(Xs ...xs) const
- { return *go(&xs...); }
- };
-
- template <std::size_t n>
- constexpr at_type<n> at{};
-}} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_VARIADIC_AT_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/variadic/drop_into.hpp b/contrib/restricted/boost/boost/hana/detail/variadic/drop_into.hpp
deleted file mode 100644
index b31d1e98d5..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/variadic/drop_into.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::variadic::drop_into`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_VARIADIC_DROP_INTO_HPP
-#define BOOST_HANA_DETAIL_VARIADIC_DROP_INTO_HPP
-
-#include <boost/hana/config.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail { namespace variadic {
- template <std::size_t n, typename F, typename = std::make_index_sequence<n>>
- struct dropper;
-
- template <std::size_t n, typename F, std::size_t ...ignore>
- struct dropper<n, F, std::index_sequence<ignore...>> {
- F f;
-
- template <typename ...Rest>
- constexpr auto go(decltype(ignore, (void*)0)..., Rest ...rest) const
- { return f(*rest...); }
-
- template <typename ...Xs>
- constexpr auto operator()(Xs ...xs) const
- { return go(&xs...); }
- };
-
- template <std::size_t n>
- struct make_dropper {
- template <typename F>
- constexpr auto operator()(F f) const
- { return dropper<n, decltype(f)>{f}; }
- };
-
- template <std::size_t n>
- constexpr make_dropper<n> drop_into{};
-}} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_VARIADIC_DROP_INTO_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/variadic/foldl1.hpp b/contrib/restricted/boost/boost/hana/detail/variadic/foldl1.hpp
deleted file mode 100644
index 31388028ab..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/variadic/foldl1.hpp
+++ /dev/null
@@ -1,214 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::variadic::foldl1`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_VARIADIC_FOLDL1_HPP
-#define BOOST_HANA_DETAIL_VARIADIC_FOLDL1_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail { namespace variadic {
- //! @cond
- template <unsigned int n, typename = when<true>>
- struct foldl1_impl;
-
- template <>
- struct foldl1_impl<1> {
- template <typename F, typename X1>
- static constexpr X1 apply(F&&, X1&& x1)
- { return static_cast<X1&&>(x1); }
- };
-
- template <>
- struct foldl1_impl<2> {
- template <typename F, typename X1, typename X2>
- static constexpr decltype(auto) apply(F&& f, X1&& x1, X2&& x2) {
- return static_cast<F&&>(f)(static_cast<X1&&>(x1),
- static_cast<X2&&>(x2));
- }
- };
-
- template <>
- struct foldl1_impl<3> {
- template <typename F, typename X1, typename X2, typename X3>
- static constexpr decltype(auto) apply(F&& f, X1&& x1, X2&& x2, X3&& x3) {
- return f(f(static_cast<X1&&>(x1),
- static_cast<X2&&>(x2)),
- static_cast<X3&&>(x3));
- }
- };
-
- template <>
- struct foldl1_impl<4> {
- template <typename F, typename X1, typename X2, typename X3, typename X4>
- static constexpr decltype(auto) apply(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4) {
- return f(f(f(static_cast<X1&&>(x1),
- static_cast<X2&&>(x2)),
- static_cast<X3&&>(x3)),
- static_cast<X4&&>(x4));
- }
- };
-
- template <>
- struct foldl1_impl<5> {
- template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5>
- static constexpr decltype(auto) apply(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5) {
- return f(f(f(f(static_cast<X1&&>(x1),
- static_cast<X2&&>(x2)),
- static_cast<X3&&>(x3)),
- static_cast<X4&&>(x4)),
- static_cast<X5&&>(x5));
- }
- };
-
- template <>
- struct foldl1_impl<6> {
- template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5, typename X6>
- static constexpr decltype(auto) apply(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6) {
- return f(f(f(f(f(static_cast<X1&&>(x1),
- static_cast<X2&&>(x2)),
- static_cast<X3&&>(x3)),
- static_cast<X4&&>(x4)),
- static_cast<X5&&>(x5)),
- static_cast<X6&&>(x6));
- }
- };
-
- template <unsigned int n>
- struct foldl1_impl<n, when<(n >= 7) && (n < 14)>> {
- template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename X7, typename ...Xn>
- static constexpr decltype(auto)
- apply(F&& f
- , X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, X7&& x7
- , Xn&& ...xn)
- {
- return foldl1_impl<sizeof...(xn) + 1>::apply(
- f,
- f(f(f(f(f(f(static_cast<X1&&>(x1),
- static_cast<X2&&>(x2)),
- static_cast<X3&&>(x3)),
- static_cast<X4&&>(x4)),
- static_cast<X5&&>(x5)),
- static_cast<X6&&>(x6)),
- static_cast<X7&&>(x7)),
- static_cast<Xn&&>(xn)...
- );
- }
- };
-
- template <unsigned int n>
- struct foldl1_impl<n, when<(n >= 14) && (n < 28)>> {
- template <
- typename F
- , typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename X7
- , typename X8, typename X9, typename X10, typename X11, typename X12, typename X13, typename X14
- , typename ...Xn
- >
- static constexpr decltype(auto)
- apply(F&& f
- , X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, X7&& x7
- , X8&& x8, X9&& x9, X10&& x10, X11&& x11, X12&& x12, X13&& x13, X14&& x14
- , Xn&& ...xn)
- {
- return foldl1_impl<sizeof...(xn) + 1>::apply(
- f,
- f(f(f(f(f(f(f(f(f(f(f(f(f(
- static_cast<X1&&>(x1), static_cast<X2&&>(x2)), static_cast<X3&&>(x3)), static_cast<X4&&>(x4)), static_cast<X5&&>(x5)), static_cast<X6&&>(x6)), static_cast<X7&&>(x7)),
- static_cast<X8&&>(x8)), static_cast<X9&&>(x9)), static_cast<X10&&>(x10)), static_cast<X11&&>(x11)), static_cast<X12&&>(x12)), static_cast<X13&&>(x13)), static_cast<X14&&>(x14))
- , static_cast<Xn&&>(xn)...);
-
- }
- };
-
- template <unsigned int n>
- struct foldl1_impl<n, when<(n >= 28) && (n < 56)>> {
- template <
- typename F
- , typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename X7
- , typename X8, typename X9, typename X10, typename X11, typename X12, typename X13, typename X14
- , typename X15, typename X16, typename X17, typename X18, typename X19, typename X20, typename X21
- , typename X22, typename X23, typename X24, typename X25, typename X26, typename X27, typename X28
- , typename ...Xn
- >
- static constexpr decltype(auto)
- apply(F&& f
- , X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, X7&& x7
- , X8&& x8, X9&& x9, X10&& x10, X11&& x11, X12&& x12, X13&& x13, X14&& x14
- , X15&& x15, X16&& x16, X17&& x17, X18&& x18, X19&& x19, X20&& x20, X21&& x21
- , X22&& x22, X23&& x23, X24&& x24, X25&& x25, X26&& x26, X27&& x27, X28&& x28
- , Xn&& ...xn)
- {
- return foldl1_impl<sizeof...(xn) + 1>::apply(
- f,
- f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
- static_cast<X1&&>(x1), static_cast<X2&&>(x2)), static_cast<X3&&>(x3)), static_cast<X4&&>(x4)), static_cast<X5&&>(x5)), static_cast<X6&&>(x6)), static_cast<X7&&>(x7)),
- static_cast<X8&&>(x8)), static_cast<X9&&>(x9)), static_cast<X10&&>(x10)), static_cast<X11&&>(x11)), static_cast<X12&&>(x12)), static_cast<X13&&>(x13)), static_cast<X14&&>(x14)),
- static_cast<X15&&>(x15)), static_cast<X16&&>(x16)), static_cast<X17&&>(x17)), static_cast<X18&&>(x18)), static_cast<X19&&>(x19)), static_cast<X20&&>(x20)), static_cast<X21&&>(x21)),
- static_cast<X22&&>(x22)), static_cast<X23&&>(x23)), static_cast<X24&&>(x24)), static_cast<X25&&>(x25)), static_cast<X26&&>(x26)), static_cast<X27&&>(x27)), static_cast<X28&&>(x28))
- , static_cast<Xn&&>(xn)...);
- }
- };
-
- template <unsigned int n>
- struct foldl1_impl<n, when<(n >= 56)>> {
- template <
- typename F
- , typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename X7
- , typename X8, typename X9, typename X10, typename X11, typename X12, typename X13, typename X14
- , typename X15, typename X16, typename X17, typename X18, typename X19, typename X20, typename X21
- , typename X22, typename X23, typename X24, typename X25, typename X26, typename X27, typename X28
- , typename X29, typename X30, typename X31, typename X32, typename X33, typename X34, typename X35
- , typename X36, typename X37, typename X38, typename X39, typename X40, typename X41, typename X42
- , typename X43, typename X44, typename X45, typename X46, typename X47, typename X48, typename X49
- , typename X50, typename X51, typename X52, typename X53, typename X54, typename X55, typename X56
- , typename ...Xn
- >
- static constexpr decltype(auto)
- apply(F&& f
- , X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, X7&& x7
- , X8&& x8, X9&& x9, X10&& x10, X11&& x11, X12&& x12, X13&& x13, X14&& x14
- , X15&& x15, X16&& x16, X17&& x17, X18&& x18, X19&& x19, X20&& x20, X21&& x21
- , X22&& x22, X23&& x23, X24&& x24, X25&& x25, X26&& x26, X27&& x27, X28&& x28
- , X29&& x29, X30&& x30, X31&& x31, X32&& x32, X33&& x33, X34&& x34, X35&& x35
- , X36&& x36, X37&& x37, X38&& x38, X39&& x39, X40&& x40, X41&& x41, X42&& x42
- , X43&& x43, X44&& x44, X45&& x45, X46&& x46, X47&& x47, X48&& x48, X49&& x49
- , X50&& x50, X51&& x51, X52&& x52, X53&& x53, X54&& x54, X55&& x55, X56&& x56
- , Xn&& ...xn)
- {
- return foldl1_impl<sizeof...(xn) + 1>::apply(
- f,
- f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
- static_cast<X1&&>(x1), static_cast<X2&&>(x2)), static_cast<X3&&>(x3)), static_cast<X4&&>(x4)), static_cast<X5&&>(x5)), static_cast<X6&&>(x6)), static_cast<X7&&>(x7)),
- static_cast<X8&&>(x8)), static_cast<X9&&>(x9)), static_cast<X10&&>(x10)), static_cast<X11&&>(x11)), static_cast<X12&&>(x12)), static_cast<X13&&>(x13)), static_cast<X14&&>(x14)),
- static_cast<X15&&>(x15)), static_cast<X16&&>(x16)), static_cast<X17&&>(x17)), static_cast<X18&&>(x18)), static_cast<X19&&>(x19)), static_cast<X20&&>(x20)), static_cast<X21&&>(x21)),
- static_cast<X22&&>(x22)), static_cast<X23&&>(x23)), static_cast<X24&&>(x24)), static_cast<X25&&>(x25)), static_cast<X26&&>(x26)), static_cast<X27&&>(x27)), static_cast<X28&&>(x28)),
- static_cast<X29&&>(x29)), static_cast<X30&&>(x30)), static_cast<X31&&>(x31)), static_cast<X32&&>(x32)), static_cast<X33&&>(x33)), static_cast<X34&&>(x34)), static_cast<X35&&>(x35)),
- static_cast<X36&&>(x36)), static_cast<X37&&>(x37)), static_cast<X38&&>(x38)), static_cast<X39&&>(x39)), static_cast<X40&&>(x40)), static_cast<X41&&>(x41)), static_cast<X42&&>(x42)),
- static_cast<X43&&>(x43)), static_cast<X44&&>(x44)), static_cast<X45&&>(x45)), static_cast<X46&&>(x46)), static_cast<X47&&>(x47)), static_cast<X48&&>(x48)), static_cast<X49&&>(x49)),
- static_cast<X50&&>(x50)), static_cast<X51&&>(x51)), static_cast<X52&&>(x52)), static_cast<X53&&>(x53)), static_cast<X54&&>(x54)), static_cast<X55&&>(x55)), static_cast<X56&&>(x56))
- , static_cast<Xn&&>(xn)...);
- }
- };
- //! @endcond
-
- struct foldl1_t {
- template <typename F, typename X1, typename ...Xn>
- constexpr decltype(auto) operator()(F&& f, X1&& x1, Xn&& ...xn) const {
- return foldl1_impl<sizeof...(xn) + 1>::apply(
- static_cast<F&&>(f), static_cast<X1&&>(x1), static_cast<Xn&&>(xn)...
- );
- }
- };
-
- constexpr foldl1_t foldl1{};
- constexpr auto foldl = foldl1;
-}} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_VARIADIC_FOLDL1_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/variadic/foldr1.hpp b/contrib/restricted/boost/boost/hana/detail/variadic/foldr1.hpp
deleted file mode 100644
index c7323cdaf8..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/variadic/foldr1.hpp
+++ /dev/null
@@ -1,210 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::variadic::foldr1`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_VARIADIC_FOLDR1_HPP
-#define BOOST_HANA_DETAIL_VARIADIC_FOLDR1_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail { namespace variadic {
- //! @cond
- template <unsigned int n, typename = when<true>>
- struct foldr1_impl;
-
- template <>
- struct foldr1_impl<1> {
- template <typename F, typename X1>
- static constexpr X1 apply(F&&, X1&& x1)
- { return static_cast<X1&&>(x1); }
- };
-
- template <>
- struct foldr1_impl<2> {
- template <typename F, typename X1, typename X2>
- static constexpr decltype(auto) apply(F&& f, X1&& x1, X2&& x2) {
- return static_cast<F&&>(f)(static_cast<X1&&>(x1),
- static_cast<X2&&>(x2));
- }
- };
-
- template <>
- struct foldr1_impl<3> {
- template <typename F, typename X1, typename X2, typename X3>
- static constexpr decltype(auto) apply(F&& f, X1&& x1, X2&& x2, X3&& x3) {
- return f(static_cast<X1&&>(x1),
- f(static_cast<X2&&>(x2),
- static_cast<X3&&>(x3)));
- }
- };
-
- template <>
- struct foldr1_impl<4> {
- template <typename F, typename X1, typename X2, typename X3, typename X4>
- static constexpr decltype(auto) apply(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4) {
- return f(static_cast<X1&&>(x1),
- f(static_cast<X2&&>(x2),
- f(static_cast<X3&&>(x3),
- static_cast<X4&&>(x4))));
- }
- };
-
- template <>
- struct foldr1_impl<5> {
- template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5>
- static constexpr decltype(auto) apply(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5) {
- return f(static_cast<X1&&>(x1),
- f(static_cast<X2&&>(x2),
- f(static_cast<X3&&>(x3),
- f(static_cast<X4&&>(x4),
- static_cast<X5&&>(x5)))));
- }
- };
-
- template <>
- struct foldr1_impl<6> {
- template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5, typename X6>
- static constexpr decltype(auto) apply(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6) {
- return f(static_cast<X1&&>(x1),
- f(static_cast<X2&&>(x2),
- f(static_cast<X3&&>(x3),
- f(static_cast<X4&&>(x4),
- f(static_cast<X5&&>(x5),
- static_cast<X6&&>(x6))))));
- }
- };
-
- template <unsigned int n>
- struct foldr1_impl<n, when<(n >= 7) && (n < 14)>> {
- template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename X7, typename ...Xn>
- static constexpr decltype(auto)
- apply(F&& f
- , X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, X7&& x7
- , Xn&& ...xn)
- {
- return f(static_cast<X1&&>(x1),
- f(static_cast<X2&&>(x2),
- f(static_cast<X3&&>(x3),
- f(static_cast<X4&&>(x4),
- f(static_cast<X5&&>(x5),
- f(static_cast<X6&&>(x6),
- foldr1_impl<sizeof...(xn) + 1>::apply(f, static_cast<X7&&>(x7), static_cast<Xn&&>(xn)...)))))));
- }
- };
-
- template <unsigned int n>
- struct foldr1_impl<n, when<(n >= 14) && (n < 28)>> {
- template <
- typename F
- , typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename X7
- , typename X8, typename X9, typename X10, typename X11, typename X12, typename X13, typename X14
- , typename ...Xn
- >
- static constexpr decltype(auto)
- apply(F&& f
- , X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, X7&& x7
- , X8&& x8, X9&& x9, X10&& x10, X11&& x11, X12&& x12, X13&& x13, X14&& x14
- , Xn&& ...xn)
- {
- return f(static_cast<X1&&>(x1), f(static_cast<X2&&>(x2), f(static_cast<X3&&>(x3), f(static_cast<X4&&>(x4), f(static_cast<X5&&>(x5), f(static_cast<X6&&>(x6), f(static_cast<X7&&>(x7),
- f(static_cast<X8&&>(x8), f(static_cast<X9&&>(x9), f(static_cast<X10&&>(x10), f(static_cast<X11&&>(x11), f(static_cast<X12&&>(x12), f(static_cast<X13&&>(x13),
- foldr1_impl<sizeof...(xn) + 1>::apply(f, static_cast<X14&&>(x14), static_cast<Xn&&>(xn)...))))))))))))));
- }
- };
-
- template <unsigned int n>
- struct foldr1_impl<n, when<(n >= 28) && (n < 56)>> {
- template <
- typename F
- , typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename X7
- , typename X8, typename X9, typename X10, typename X11, typename X12, typename X13, typename X14
- , typename X15, typename X16, typename X17, typename X18, typename X19, typename X20, typename X21
- , typename X22, typename X23, typename X24, typename X25, typename X26, typename X27, typename X28
- , typename ...Xn
- >
- static constexpr decltype(auto)
- apply(F&& f
- , X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, X7&& x7
- , X8&& x8, X9&& x9, X10&& x10, X11&& x11, X12&& x12, X13&& x13, X14&& x14
- , X15&& x15, X16&& x16, X17&& x17, X18&& x18, X19&& x19, X20&& x20, X21&& x21
- , X22&& x22, X23&& x23, X24&& x24, X25&& x25, X26&& x26, X27&& x27, X28&& x28
- , Xn&& ...xn)
- {
- return f(static_cast<X1&&>(x1), f(static_cast<X2&&>(x2), f(static_cast<X3&&>(x3), f(static_cast<X4&&>(x4), f(static_cast<X5&&>(x5), f(static_cast<X6&&>(x6), f(static_cast<X7&&>(x7),
- f(static_cast<X8&&>(x8), f(static_cast<X9&&>(x9), f(static_cast<X10&&>(x10), f(static_cast<X11&&>(x11), f(static_cast<X12&&>(x12), f(static_cast<X13&&>(x13), f(static_cast<X14&&>(x14),
- f(static_cast<X15&&>(x15), f(static_cast<X16&&>(x16), f(static_cast<X17&&>(x17), f(static_cast<X18&&>(x18), f(static_cast<X19&&>(x19), f(static_cast<X20&&>(x20), f(static_cast<X21&&>(x21),
- f(static_cast<X22&&>(x22), f(static_cast<X23&&>(x23), f(static_cast<X24&&>(x24), f(static_cast<X25&&>(x25), f(static_cast<X26&&>(x26), f(static_cast<X27&&>(x27),
- foldr1_impl<sizeof...(xn) + 1>::apply(f, static_cast<X28&&>(x28), static_cast<Xn&&>(xn)...))))))))))))))))))))))))))));
- }
- };
-
- template <unsigned int n>
- struct foldr1_impl<n, when<(n >= 56)>> {
- template <
- typename F
- , typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename X7
- , typename X8, typename X9, typename X10, typename X11, typename X12, typename X13, typename X14
- , typename X15, typename X16, typename X17, typename X18, typename X19, typename X20, typename X21
- , typename X22, typename X23, typename X24, typename X25, typename X26, typename X27, typename X28
- , typename X29, typename X30, typename X31, typename X32, typename X33, typename X34, typename X35
- , typename X36, typename X37, typename X38, typename X39, typename X40, typename X41, typename X42
- , typename X43, typename X44, typename X45, typename X46, typename X47, typename X48, typename X49
- , typename X50, typename X51, typename X52, typename X53, typename X54, typename X55, typename X56
- , typename ...Xn
- >
- static constexpr decltype(auto)
- apply(F&& f
- , X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, X7&& x7
- , X8&& x8, X9&& x9, X10&& x10, X11&& x11, X12&& x12, X13&& x13, X14&& x14
- , X15&& x15, X16&& x16, X17&& x17, X18&& x18, X19&& x19, X20&& x20, X21&& x21
- , X22&& x22, X23&& x23, X24&& x24, X25&& x25, X26&& x26, X27&& x27, X28&& x28
- , X29&& x29, X30&& x30, X31&& x31, X32&& x32, X33&& x33, X34&& x34, X35&& x35
- , X36&& x36, X37&& x37, X38&& x38, X39&& x39, X40&& x40, X41&& x41, X42&& x42
- , X43&& x43, X44&& x44, X45&& x45, X46&& x46, X47&& x47, X48&& x48, X49&& x49
- , X50&& x50, X51&& x51, X52&& x52, X53&& x53, X54&& x54, X55&& x55, X56&& x56
- , Xn&& ...xn)
- {
- return f(static_cast<X1&&>(x1), f(static_cast<X2&&>(x2), f(static_cast<X3&&>(x3), f(static_cast<X4&&>(x4), f(static_cast<X5&&>(x5), f(static_cast<X6&&>(x6), f(static_cast<X7&&>(x7),
- f(static_cast<X8&&>(x8), f(static_cast<X9&&>(x9), f(static_cast<X10&&>(x10), f(static_cast<X11&&>(x11), f(static_cast<X12&&>(x12), f(static_cast<X13&&>(x13), f(static_cast<X14&&>(x14),
- f(static_cast<X15&&>(x15), f(static_cast<X16&&>(x16), f(static_cast<X17&&>(x17), f(static_cast<X18&&>(x18), f(static_cast<X19&&>(x19), f(static_cast<X20&&>(x20), f(static_cast<X21&&>(x21),
- f(static_cast<X22&&>(x22), f(static_cast<X23&&>(x23), f(static_cast<X24&&>(x24), f(static_cast<X25&&>(x25), f(static_cast<X26&&>(x26), f(static_cast<X27&&>(x27), f(static_cast<X28&&>(x28),
- f(static_cast<X29&&>(x29), f(static_cast<X30&&>(x30), f(static_cast<X31&&>(x31), f(static_cast<X32&&>(x32), f(static_cast<X33&&>(x33), f(static_cast<X34&&>(x34), f(static_cast<X35&&>(x35),
- f(static_cast<X36&&>(x36), f(static_cast<X37&&>(x37), f(static_cast<X38&&>(x38), f(static_cast<X39&&>(x39), f(static_cast<X40&&>(x40), f(static_cast<X41&&>(x41), f(static_cast<X42&&>(x42),
- f(static_cast<X43&&>(x43), f(static_cast<X44&&>(x44), f(static_cast<X45&&>(x45), f(static_cast<X46&&>(x46), f(static_cast<X47&&>(x47), f(static_cast<X48&&>(x48), f(static_cast<X49&&>(x49),
- f(static_cast<X50&&>(x50), f(static_cast<X51&&>(x51), f(static_cast<X52&&>(x52), f(static_cast<X53&&>(x53), f(static_cast<X54&&>(x54), f(static_cast<X55&&>(x55),
- foldr1_impl<sizeof...(xn) + 1>::apply(f, static_cast<X56&&>(x56), static_cast<Xn&&>(xn)...))))))))))))))))))))))))))))))))))))))))))))))))))))))));
- }
- };
- //! @endcond
-
- struct foldr1_t {
- template <typename F, typename X1, typename ...Xn>
- constexpr decltype(auto) operator()(F&& f, X1&& x1, Xn&& ...xn) const {
- return foldr1_impl<sizeof...(xn) + 1>::apply(
- static_cast<F&&>(f), static_cast<X1&&>(x1), static_cast<Xn&&>(xn)...
- );
- }
- };
-
- constexpr foldr1_t foldr1{};
-
- struct foldr_t {
- template <typename F, typename State, typename ...Xn>
- constexpr decltype(auto) operator()(F&& f, State&& state, Xn&& ...xn) const {
- return foldr1_impl<sizeof...(xn) + 1>::apply(
- static_cast<F&&>(f), static_cast<Xn&&>(xn)..., static_cast<State&&>(state)
- );
- }
- };
-
- constexpr foldr_t foldr{};
-}} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_VARIADIC_FOLDR1_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/variadic/reverse_apply.hpp b/contrib/restricted/boost/boost/hana/detail/variadic/reverse_apply.hpp
deleted file mode 100644
index b276fa4177..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/variadic/reverse_apply.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::variadic::reverse_apply`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_VARIADIC_REVERSE_APPLY_HPP
-#define BOOST_HANA_DETAIL_VARIADIC_REVERSE_APPLY_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/variadic/reverse_apply/unrolled.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail { namespace variadic {
- BOOST_HANA_CONSTEXPR_LAMBDA auto reverse_apply =
- [](auto&& f, auto&& ...x) -> decltype(auto) {
- return detail::variadic::reverse_apply_unrolled(
- static_cast<decltype(f)&&>(f),
- static_cast<decltype(x)&&>(x)...
- );
- };
-}} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_VARIADIC_REVERSE_APPLY_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/variadic/reverse_apply/flat.hpp b/contrib/restricted/boost/boost/hana/detail/variadic/reverse_apply/flat.hpp
deleted file mode 100644
index 09bc818e6b..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/variadic/reverse_apply/flat.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::variadic::reverse_apply_flat`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_VARIADIC_REVERSE_APPLY_FLAT_HPP
-#define BOOST_HANA_DETAIL_VARIADIC_REVERSE_APPLY_FLAT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/variadic/at.hpp>
-
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail { namespace variadic {
- template <int ...i, typename F, typename ...X>
- constexpr decltype(auto)
- reverse_apply_flat_helper(std::integer_sequence<int, i...>, F&& f, X&& ...x)
- {
- return static_cast<F&&>(f)(
- detail::variadic::at<sizeof...(x) - i - 1>(
- static_cast<X&&>(x)...
- )...
- );
- }
-
- template <typename F, typename ...X>
- constexpr decltype(auto) reverse_apply_flat(F&& f, X&& ...x) {
- return reverse_apply_flat_helper(
- std::make_integer_sequence<int, sizeof...(x)>{},
- static_cast<F&&>(f),
- static_cast<X&&>(x)...
- );
- }
-}} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_VARIADIC_REVERSE_APPLY_FLAT_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/variadic/reverse_apply/unrolled.hpp b/contrib/restricted/boost/boost/hana/detail/variadic/reverse_apply/unrolled.hpp
deleted file mode 100644
index e6bf3d0c55..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/variadic/reverse_apply/unrolled.hpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::variadic::reverse_apply_unrolled`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_VARIADIC_REVERSE_APPLY_UNROLLED_HPP
-#define BOOST_HANA_DETAIL_VARIADIC_REVERSE_APPLY_UNROLLED_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/functional/reverse_partial.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail { namespace variadic {
- struct reverse_apply_unrolled_impl {
- template <typename F>
- constexpr decltype(auto) operator()(F&& f) const {
- return static_cast<F&&>(f)();
- }
-
- template <typename F, typename X1>
- constexpr decltype(auto) operator()(F&& f, X1&& x1) const {
- return static_cast<F&&>(f)(
- static_cast<X1&&>(x1)
- );
- }
-
- template <typename F, typename X1, typename X2>
- constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2) const {
- return static_cast<F&&>(f)(
- static_cast<X2&&>(x2),
- static_cast<X1&&>(x1)
- );
- }
-
- template <typename F, typename X1, typename X2, typename X3>
- constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2, X3&& x3) const {
- return static_cast<F&&>(f)(
- static_cast<X3&&>(x3),
- static_cast<X2&&>(x2),
- static_cast<X1&&>(x1)
- );
- }
-
- template <typename F, typename X1, typename X2, typename X3, typename X4>
- constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4) const {
- return static_cast<F&&>(f)(
- static_cast<X4&&>(x4),
- static_cast<X3&&>(x3),
- static_cast<X2&&>(x2),
- static_cast<X1&&>(x1)
- );
- }
-
- template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5>
- constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5) const {
- return static_cast<F&&>(f)(
- static_cast<X5&&>(x5),
- static_cast<X4&&>(x4),
- static_cast<X3&&>(x3),
- static_cast<X2&&>(x2),
- static_cast<X1&&>(x1)
- );
- }
-
- template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename ...Xn>
- constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, Xn&& ...xn) const {
- return (*this)(hana::reverse_partial(
- static_cast<F&&>(f)
- , static_cast<X6&&>(x6)
- , static_cast<X5&&>(x5)
- , static_cast<X4&&>(x4)
- , static_cast<X3&&>(x3)
- , static_cast<X2&&>(x2)
- , static_cast<X1&&>(x1)
- ), static_cast<Xn&&>(xn)...);
- }
- };
-
- constexpr reverse_apply_unrolled_impl reverse_apply_unrolled{};
-
-}} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_VARIADIC_REVERSE_APPLY_UNROLLED_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/variadic/split_at.hpp b/contrib/restricted/boost/boost/hana/detail/variadic/split_at.hpp
deleted file mode 100644
index c068c1bcb9..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/variadic/split_at.hpp
+++ /dev/null
@@ -1,153 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::variadic::split_at`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_VARIADIC_SPLIT_AT_HPP
-#define BOOST_HANA_DETAIL_VARIADIC_SPLIT_AT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/functional/reverse_partial.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail { namespace variadic {
- template <std::size_t n>
- struct split_at_t {
- template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename X7, typename X8, typename ...Xs>
- constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, X7&& x7, X8&& x8, Xs&& ...xs) const {
- return split_at_t<n - 8>{}(
- hana::partial(static_cast<F&&>(f),
- static_cast<X1&&>(x1),
- static_cast<X2&&>(x2),
- static_cast<X3&&>(x3),
- static_cast<X4&&>(x4),
- static_cast<X5&&>(x5),
- static_cast<X6&&>(x6),
- static_cast<X7&&>(x7),
- static_cast<X8&&>(x8)
- ),
- static_cast<Xs&&>(xs)...
- );
- }
- };
-
- template <>
- struct split_at_t<0> {
- template <typename F, typename ...Xs>
- constexpr decltype(auto) operator()(F&& f, Xs&& ...xs) const {
- return static_cast<F&&>(f)()(static_cast<Xs&&>(xs)...);
- }
- };
-
- template <>
- struct split_at_t<1> {
- template <typename F, typename X1, typename ...Xs>
- constexpr decltype(auto) operator()(F&& f, X1&& x1, Xs&& ...xs) const {
- return static_cast<F&&>(f)(
- static_cast<X1&&>(x1)
- )(static_cast<Xs&&>(xs)...);
- }
- };
-
- template <>
- struct split_at_t<2> {
- template <typename F, typename X1, typename X2, typename ...Xs>
- constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2, Xs&& ...xs) const {
- return static_cast<F&&>(f)(
- static_cast<X1&&>(x1),
- static_cast<X2&&>(x2)
- )(static_cast<Xs&&>(xs)...);
- }
- };
-
- template <>
- struct split_at_t<3> {
- template <typename F, typename X1, typename X2, typename X3, typename ...Xs>
- constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2, X3&& x3, Xs&& ...xs) const {
- return static_cast<F&&>(f)(
- static_cast<X1&&>(x1),
- static_cast<X2&&>(x2),
- static_cast<X3&&>(x3)
- )(static_cast<Xs&&>(xs)...);
- }
- };
-
- template <>
- struct split_at_t<4> {
- template <typename F, typename X1, typename X2, typename X3, typename X4, typename ...Xs>
- constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4, Xs&& ...xs) const {
- return static_cast<F&&>(f)(
- static_cast<X1&&>(x1),
- static_cast<X2&&>(x2),
- static_cast<X3&&>(x3),
- static_cast<X4&&>(x4)
- )(static_cast<Xs&&>(xs)...);
- }
- };
-
- template <>
- struct split_at_t<5> {
- template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5, typename ...Xs>
- constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, Xs&& ...xs) const {
- return static_cast<F&&>(f)(
- static_cast<X1&&>(x1),
- static_cast<X2&&>(x2),
- static_cast<X3&&>(x3),
- static_cast<X4&&>(x4),
- static_cast<X5&&>(x5)
- )(static_cast<Xs&&>(xs)...);
- }
- };
-
- template <>
- struct split_at_t<6> {
- template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename ...Xs>
- constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, Xs&& ...xs) const {
- return static_cast<F&&>(f)(
- static_cast<X1&&>(x1),
- static_cast<X2&&>(x2),
- static_cast<X3&&>(x3),
- static_cast<X4&&>(x4),
- static_cast<X5&&>(x5),
- static_cast<X6&&>(x6)
- )(static_cast<Xs&&>(xs)...);
- }
- };
-
- template <>
- struct split_at_t<7> {
- template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename X7, typename ...Xs>
- constexpr decltype(auto) operator()(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, X7&& x7, Xs&& ...xs) const {
- return static_cast<F&&>(f)(
- static_cast<X1&&>(x1),
- static_cast<X2&&>(x2),
- static_cast<X3&&>(x3),
- static_cast<X4&&>(x4),
- static_cast<X5&&>(x5),
- static_cast<X6&&>(x6),
- static_cast<X7&&>(x7)
- )(static_cast<Xs&&>(xs)...);
- }
- };
-
- template <std::size_t n>
- struct _makesplit_at_t {
- template <typename ...Xs>
- constexpr decltype(auto) operator()(Xs&& ...xs) const {
- return hana::reverse_partial(split_at_t<n>{},
- static_cast<Xs&&>(xs)...);
- }
- };
-
- template <std::size_t n>
- constexpr _makesplit_at_t<n> split_at{};
-}} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_VARIADIC_SPLIT_AT_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/variadic/take.hpp b/contrib/restricted/boost/boost/hana/detail/variadic/take.hpp
deleted file mode 100644
index 4d97a5b853..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/variadic/take.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::variadic::take`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_VARIADIC_TAKE_HPP
-#define BOOST_HANA_DETAIL_VARIADIC_TAKE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/variadic/split_at.hpp>
-#include <boost/hana/functional/always.hpp>
-#include <boost/hana/functional/reverse_partial.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail { namespace variadic {
- struct take_impl2 {
- template <typename F, typename ...Xs>
- constexpr decltype(auto) operator()(F&& f, Xs&& ...xs) const {
- return static_cast<F&&>(f)(static_cast<Xs&&>(xs)...);
- }
- };
-
- struct take_impl1 {
- template <typename ...Xs>
- constexpr auto operator()(Xs&& ...xs) const {
- return hana::always(
- reverse_partial(take_impl2{},
- static_cast<Xs&&>(xs)...)
- );
- }
- };
-
- template <std::size_t n>
- struct take_t {
- template <typename ...Xs>
- constexpr decltype(auto) operator()(Xs&& ...xs) const {
- return variadic::split_at<n>(static_cast<Xs&&>(xs)...)(take_impl1{});
- }
- };
-
- template <std::size_t n>
- constexpr take_t<n> take{};
-}} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_VARIADIC_TAKE_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/void_t.hpp b/contrib/restricted/boost/boost/hana/detail/void_t.hpp
deleted file mode 100644
index 9eedd11441..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/void_t.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/*!
-@file
-Defines an equivalent to the proposed `std::void_t`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_VOID_T_HPP
-#define BOOST_HANA_DETAIL_VOID_T_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- template <typename ...>
- using void_t = void;
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_VOID_T_HPP
diff --git a/contrib/restricted/boost/boost/hana/detail/wrong.hpp b/contrib/restricted/boost/boost/hana/detail/wrong.hpp
deleted file mode 100644
index ce5544fcdf..0000000000
--- a/contrib/restricted/boost/boost/hana/detail/wrong.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
-@file
-Defines `boost::hana::detail::wrong`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DETAIL_WRONG_HPP
-#define BOOST_HANA_DETAIL_WRONG_HPP
-
-#include <boost/hana/config.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace detail {
- //! @ingroup group-detail
- //! Equivalent to a type-dependent `std::false_type`.
- //!
- //! This is useful for making a static assertion that would otherwise
- //! always fire up dependent on some template parameters.
- //!
- //!
- //! Example
- //! -------
- //! @include example/detail/wrong.cpp
- template <typename ...>
- struct wrong : std::false_type { };
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DETAIL_WRONG_HPP
diff --git a/contrib/restricted/boost/boost/hana/difference.hpp b/contrib/restricted/boost/boost/hana/difference.hpp
deleted file mode 100644
index d2e2897d6e..0000000000
--- a/contrib/restricted/boost/boost/hana/difference.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/*!
-@file
-Defines `boost::hana::difference`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DIFFERENCE_HPP
-#define BOOST_HANA_DIFFERENCE_HPP
-
-#include <boost/hana/fwd/difference.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/erase_key.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Ys>
- constexpr auto difference_t::operator()(Xs&& xs, Ys&& ys) const {
- using S = typename hana::tag_of<Xs>::type;
- using Difference = BOOST_HANA_DISPATCH_IF(difference_impl<S>,
- true
- );
-
- return Difference::apply(static_cast<Xs&&>(xs), static_cast<Ys&&>(ys));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct difference_impl<S, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DIFFERENCE_HPP
diff --git a/contrib/restricted/boost/boost/hana/div.hpp b/contrib/restricted/boost/boost/hana/div.hpp
deleted file mode 100644
index 5b75ef10be..0000000000
--- a/contrib/restricted/boost/boost/hana/div.hpp
+++ /dev/null
@@ -1,107 +0,0 @@
-/*!
-@file
-Defines `boost::hana::div`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DIV_HPP
-#define BOOST_HANA_DIV_HPP
-
-#include <boost/hana/fwd/div.hpp>
-
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/euclidean_ring.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/canonical_constant.hpp>
-#include <boost/hana/detail/has_common_embedding.hpp>
-#include <boost/hana/value.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X, typename Y>
- constexpr decltype(auto) div_t::operator()(X&& x, Y&& y) const {
- using T = typename hana::tag_of<X>::type;
- using U = typename hana::tag_of<Y>::type;
- using Div = BOOST_HANA_DISPATCH_IF(decltype(div_impl<T, U>{}),
- hana::EuclideanRing<T>::value &&
- hana::EuclideanRing<U>::value &&
- !is_default<div_impl<T, U>>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::EuclideanRing<T>::value,
- "hana::div(x, y) requires 'x' to be an EuclideanRing");
-
- static_assert(hana::EuclideanRing<U>::value,
- "hana::div(x, y) requires 'y' to be an EuclideanRing");
-
- static_assert(!is_default<div_impl<T, U>>::value,
- "hana::div(x, y) requires 'x' and 'y' to be embeddable "
- "in a common EuclideanRing");
- #endif
-
- return Div::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- //! @endcond
-
- template <typename T, typename U, bool condition>
- struct div_impl<T, U, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- // Cross-type overload
- template <typename T, typename U>
- struct div_impl<T, U, when<
- detail::has_nontrivial_common_embedding<EuclideanRing, T, U>::value
- >> {
- using C = typename common<T, U>::type;
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- return hana::div(hana::to<C>(static_cast<X&&>(x)),
- hana::to<C>(static_cast<Y&&>(y)));
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for integral data types
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct div_impl<T, T, when<std::is_integral<T>::value &&
- !std::is_same<T, bool>::value>> {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y)
- { return static_cast<X&&>(x) / static_cast<Y&&>(y); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for Constants over an EuclideanRing
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <typename C, typename X, typename Y>
- struct constant_from_div {
- static constexpr auto value = hana::div(hana::value<X>(), hana::value<Y>());
- using hana_tag = detail::CanonicalConstant<typename C::value_type>;
- };
- }
-
- template <typename C>
- struct div_impl<C, C, when<
- hana::Constant<C>::value &&
- EuclideanRing<typename C::value_type>::value
- >> {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X const&, Y const&)
- { return hana::to<C>(detail::constant_from_div<C, X, Y>{}); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DIV_HPP
diff --git a/contrib/restricted/boost/boost/hana/drop_back.hpp b/contrib/restricted/boost/boost/hana/drop_back.hpp
deleted file mode 100644
index 0e5837584a..0000000000
--- a/contrib/restricted/boost/boost/hana/drop_back.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/*!
-@file
-Defines `boost::hana::drop_back`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DROP_BACK_HPP
-#define BOOST_HANA_DROP_BACK_HPP
-
-#include <boost/hana/fwd/drop_back.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/length.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename N>
- constexpr auto drop_back_t::operator()(Xs&& xs, N const& n) const {
- using S = typename hana::tag_of<Xs>::type;
- using DropBack = BOOST_HANA_DISPATCH_IF(drop_back_impl<S>,
- hana::Sequence<S>::value &&
- hana::IntegralConstant<N>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::drop_back(xs, n) requires 'xs' to be a Sequence");
-
- static_assert(hana::IntegralConstant<N>::value,
- "hana::drop_back(xs, n) requires 'n' to be an IntegralConstant");
- #endif
-
- static_assert(N::value >= 0,
- "hana::drop_back(xs, n) requires 'n' to be non-negative");
-
- return DropBack::apply(static_cast<Xs&&>(xs), n);
- }
-
- template <typename Xs>
- constexpr auto drop_back_t::operator()(Xs&& xs) const {
- return (*this)(static_cast<Xs&&>(xs), hana::size_c<1>);
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct drop_back_impl<S, when<condition>> : default_ {
- template <typename Xs, std::size_t ...n>
- static constexpr auto drop_back_helper(Xs&& xs, std::index_sequence<n...>) {
- return hana::make<S>(hana::at_c<n>(static_cast<Xs&&>(xs))...);
- }
-
- template <typename Xs, typename N>
- static constexpr auto apply(Xs&& xs, N const&) {
- constexpr std::size_t n = N::value;
- constexpr std::size_t len = decltype(hana::length(xs))::value;
- return drop_back_helper(static_cast<Xs&&>(xs),
- std::make_index_sequence<(n > len ? 0 : len - n)>{});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DROP_BACK_HPP
diff --git a/contrib/restricted/boost/boost/hana/drop_front.hpp b/contrib/restricted/boost/boost/hana/drop_front.hpp
deleted file mode 100644
index 2fa5ade108..0000000000
--- a/contrib/restricted/boost/boost/hana/drop_front.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
-@file
-Defines `boost::hana::drop_front`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DROP_FRONT_HPP
-#define BOOST_HANA_DROP_FRONT_HPP
-
-#include <boost/hana/fwd/drop_front.hpp>
-
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/concept/iterable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/integral_constant.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename N>
- constexpr auto drop_front_t::operator()(Xs&& xs, N const& n) const {
- using It = typename hana::tag_of<Xs>::type;
- using DropFront = BOOST_HANA_DISPATCH_IF(drop_front_impl<It>,
- hana::Iterable<It>::value &&
- hana::IntegralConstant<N>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Iterable<It>::value,
- "hana::drop_front(xs, n) requires 'xs' to be an Iterable");
-
- static_assert(hana::IntegralConstant<N>::value,
- "hana::drop_front(xs, n) requires 'n' to be an IntegralConstant");
- #endif
-
- return DropFront::apply(static_cast<Xs&&>(xs), n);
- }
-
- template <typename Xs>
- constexpr auto drop_front_t::operator()(Xs&& xs) const {
- return (*this)(static_cast<Xs&&>(xs), hana::size_t<1>{});
- }
- //! @endcond
-
- template <typename It, bool condition>
- struct drop_front_impl<It, when<condition>> : default_ {
- template <typename Xs, typename N>
- static constexpr auto apply(Xs&&, N const&) = delete;
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DROP_FRONT_HPP
diff --git a/contrib/restricted/boost/boost/hana/drop_front_exactly.hpp b/contrib/restricted/boost/boost/hana/drop_front_exactly.hpp
deleted file mode 100644
index a6af69115d..0000000000
--- a/contrib/restricted/boost/boost/hana/drop_front_exactly.hpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/*!
-@file
-Defines `boost::hana::drop_front_exactly`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DROP_FRONT_EXACTLY_HPP
-#define BOOST_HANA_DROP_FRONT_EXACTLY_HPP
-
-#include <boost/hana/fwd/drop_front_exactly.hpp>
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/concept/iterable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/drop_front.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/is_empty.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename N>
- constexpr auto drop_front_exactly_t::operator()(Xs&& xs, N const& n) const {
- using It = typename hana::tag_of<Xs>::type;
- using DropFrontExactly = BOOST_HANA_DISPATCH_IF(drop_front_exactly_impl<It>,
- hana::Iterable<It>::value &&
- hana::IntegralConstant<N>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Iterable<It>::value,
- "hana::drop_front_exactly(xs, n) requires 'xs' to be an Iterable");
-
- static_assert(hana::IntegralConstant<N>::value,
- "hana::drop_front_exactly(xs, n) requires 'n' to be an IntegralConstant");
- #endif
-
- static_assert(N::value >= 0,
- "hana::drop_front_exactly(xs, n) requires 'n' to be non-negative");
-
- return DropFrontExactly::apply(static_cast<Xs&&>(xs), n);
- }
-
- template <typename Xs>
- constexpr auto drop_front_exactly_t::operator()(Xs&& xs) const {
- return (*this)(static_cast<Xs&&>(xs), hana::size_c<1>);
- }
- //! @endcond
-
- namespace detail {
- template <typename Xs, typename N>
- constexpr void check_dfe_overflow(Xs const& xs, N const&, hana::true_) {
- constexpr bool n_overflew_length = decltype(
- hana::is_empty(hana::drop_front(xs, hana::size_c<N::value - 1>))
- )::value;
- static_assert(!n_overflew_length,
- "hana::drop_front_exactly(xs, n) requires 'n' to be less than or "
- "equal to the number of elements in 'xs'");
- }
-
- template <typename Xs, typename N>
- constexpr void check_dfe_overflow(Xs const&, N const&, hana::false_) { }
- }
-
- template <typename It, bool condition>
- struct drop_front_exactly_impl<It, when<condition>> : default_ {
- template <typename Xs, typename N>
- static constexpr auto apply(Xs&& xs, N const& n) {
- auto result = hana::drop_front(static_cast<Xs&&>(xs), n);
- constexpr bool check_for_overflow =
- decltype(hana::is_empty(result))::value && N::value != 0;
-
- detail::check_dfe_overflow(xs, n, hana::bool_c<check_for_overflow>);
-
- return result; // NRVO applied
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DROP_FRONT_EXACTLY_HPP
diff --git a/contrib/restricted/boost/boost/hana/drop_while.hpp b/contrib/restricted/boost/boost/hana/drop_while.hpp
deleted file mode 100644
index b1f921b1d8..0000000000
--- a/contrib/restricted/boost/boost/hana/drop_while.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/*!
-@file
-Defines `boost::hana::drop_while`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DROP_WHILE_HPP
-#define BOOST_HANA_DROP_WHILE_HPP
-
-#include <boost/hana/fwd/drop_while.hpp>
-
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/concept/iterable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/first_unsatisfied_index.hpp>
-#include <boost/hana/drop_front.hpp>
-#include <boost/hana/eval_if.hpp>
-#include <boost/hana/front.hpp>
-#include <boost/hana/is_empty.hpp>
-#include <boost/hana/lazy.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Pred>
- constexpr auto drop_while_t::operator()(Xs&& xs, Pred&& pred) const {
- using It = typename hana::tag_of<Xs>::type;
- using DropWhile = BOOST_HANA_DISPATCH_IF(drop_while_impl<It>,
- hana::Iterable<It>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Iterable<It>::value,
- "hana::drop_while(xs, pred) requires 'xs' to be an Iterable");
- #endif
-
- return DropWhile::apply(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred));
- }
- //! @endcond
-
- namespace iterable_detail {
- struct drop_while_helper {
- struct next {
- template <typename Xs, typename Pred>
- constexpr decltype(auto) operator()(Xs&& xs, Pred&& pred) const {
- return hana::drop_while(
- hana::drop_front(static_cast<Xs&&>(xs)),
- static_cast<Pred&&>(pred)
- );
- }
- };
-
- template <typename Xs, typename Pred>
- constexpr decltype(auto) operator()(Xs&& xs, Pred&& pred) const {
- return hana::eval_if(pred(hana::front(xs)),
- hana::make_lazy(next{})(xs, pred),
- hana::make_lazy(xs)
- );
- }
- };
- }
-
- template <typename It, bool condition>
- struct drop_while_impl<It, when<condition>> : default_ {
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&& pred) {
- return hana::eval_if(hana::is_empty(xs),
- hana::make_lazy(xs),
- hana::make_lazy(iterable_detail::drop_while_helper{})(
- xs, static_cast<Pred&&>(pred))
- );
- }
- };
-
- template <typename S>
- struct drop_while_impl<S, when<hana::Foldable<S>::value>> {
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&&) {
- using FirstUnsatisfied = decltype(
- hana::unpack(static_cast<Xs&&>(xs),
- detail::first_unsatisfied_index<Pred&&>{})
- );
- return hana::drop_front(static_cast<Xs&&>(xs),
- FirstUnsatisfied{});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DROP_WHILE_HPP
diff --git a/contrib/restricted/boost/boost/hana/duplicate.hpp b/contrib/restricted/boost/boost/hana/duplicate.hpp
deleted file mode 100644
index 783ae05fa0..0000000000
--- a/contrib/restricted/boost/boost/hana/duplicate.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*!
-@file
-Defines `boost::hana::duplicate`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_DUPLICATE_HPP
-#define BOOST_HANA_DUPLICATE_HPP
-
-#include <boost/hana/fwd/duplicate.hpp>
-
-#include <boost/hana/concept/comonad.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/extend.hpp>
-#include <boost/hana/functional/id.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename W_>
- constexpr decltype(auto) duplicate_t::operator()(W_&& w) const {
- using W = typename hana::tag_of<W_>::type;
- using Duplicate = BOOST_HANA_DISPATCH_IF(duplicate_impl<W>,
- hana::Comonad<W>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Comonad<W>::value,
- "hana::duplicate(w) requires 'w' to be a Comonad");
- #endif
-
- return Duplicate::apply(static_cast<W_&&>(w));
- }
- //! @endcond
-
- template <typename W, bool condition>
- struct duplicate_impl<W, when<condition>> : default_ {
- template <typename X>
- static constexpr decltype(auto) apply(X&& x)
- { return hana::extend(static_cast<X&&>(x), hana::id); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_DUPLICATE_HPP
diff --git a/contrib/restricted/boost/boost/hana/empty.hpp b/contrib/restricted/boost/boost/hana/empty.hpp
deleted file mode 100644
index 8cb97a3ebc..0000000000
--- a/contrib/restricted/boost/boost/hana/empty.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/*!
-@file
-Defines `boost::hana::empty`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EMPTY_HPP
-#define BOOST_HANA_EMPTY_HPP
-
-#include <boost/hana/fwd/empty.hpp>
-
-#include <boost/hana/concept/monad_plus.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename M>
- struct empty_t {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::MonadPlus<M>::value,
- "hana::empty<M>() requires 'M' to be a MonadPlus");
- #endif
-
- constexpr auto operator()() const {
- using Empty = BOOST_HANA_DISPATCH_IF(empty_impl<M>,
- hana::MonadPlus<M>::value
- );
-
- return Empty::apply();
- }
- };
-
- template <typename M, bool condition>
- struct empty_impl<M, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- template <typename S>
- struct empty_impl<S, when<Sequence<S>::value>> {
- static constexpr auto apply() {
- return hana::make<S>();
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EMPTY_HPP
diff --git a/contrib/restricted/boost/boost/hana/equal.hpp b/contrib/restricted/boost/boost/hana/equal.hpp
deleted file mode 100644
index 1fa5e8bbe1..0000000000
--- a/contrib/restricted/boost/boost/hana/equal.hpp
+++ /dev/null
@@ -1,203 +0,0 @@
-/*!
-@file
-Defines `boost::hana::equal`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EQUAL_HPP
-#define BOOST_HANA_EQUAL_HPP
-
-#include <boost/hana/fwd/equal.hpp>
-
-#include <boost/hana/accessors.hpp>
-#include <boost/hana/all_of.hpp>
-#include <boost/hana/and.hpp>
-#include <boost/hana/at.hpp>
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/comparable.hpp>
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/product.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/concept/struct.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/common.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/concepts.hpp>
-#include <boost/hana/detail/has_common_embedding.hpp>
-#include <boost/hana/detail/nested_to.hpp> // required by fwd decl
-#include <boost/hana/first.hpp>
-#include <boost/hana/if.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/second.hpp>
-#include <boost/hana/value.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X, typename Y>
- constexpr auto equal_t::operator()(X&& x, Y&& y) const {
- using T = typename hana::tag_of<X>::type;
- using U = typename hana::tag_of<Y>::type;
- using Equal = equal_impl<T, U>;
- return Equal::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- //! @endcond
-
- template <typename T, typename U, bool condition>
- struct equal_impl<T, U, when<condition>> : default_ {
- template <typename X, typename Y>
- static constexpr auto apply(X const&, Y const&) {
- // Delay the static_assert by ensuring T_ is dependent.
- using T_ = typename hana::tag_of<X>::type;
- static_assert(!hana::is_convertible<T_, U>::value &&
- !hana::is_convertible<U, T_>::value,
- "No default implementation of hana::equal is provided for related "
- "types that can't be safely embedded into a common type, because "
- "those are most likely programming errors. If this is really what "
- "you want, you can manually convert both objects to a common "
- "Comparable type before performing the comparison. If you think "
- "you have made your types Comparable but you see this, perhaps you "
- "forgot to define some of the necessary methods for an automatic "
- "model of Comparable to kick in. A possible culprit is defining "
- "'operator==' but not 'operator!='.");
-
- return hana::false_c;
- }
- };
-
- // Cross-type overload
- template <typename T, typename U>
- struct equal_impl<T, U, when<
- detail::has_nontrivial_common_embedding<Comparable, T, U>::value &&
- !detail::EqualityComparable<T, U>::value
- >> {
- using C = typename hana::common<T, U>::type;
- template <typename X, typename Y>
- static constexpr auto apply(X&& x, Y&& y) {
- return hana::equal(hana::to<C>(static_cast<X&&>(x)),
- hana::to<C>(static_cast<Y&&>(y)));
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for EqualityComparable data types
- //////////////////////////////////////////////////////////////////////////
- template <typename T, typename U>
- struct equal_impl<T, U, when<detail::EqualityComparable<T, U>::value>> {
- template <typename X, typename Y>
- static constexpr auto apply(X&& x, Y&& y)
- { return static_cast<X&&>(x) == static_cast<Y&&>(y); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for Constants wrapping a Comparable
- //////////////////////////////////////////////////////////////////////////
- template <typename C>
- struct equal_impl<C, C, when<
- hana::Constant<C>::value &&
- Comparable<typename C::value_type>::value
- >> {
- template <typename X, typename Y>
- static constexpr auto apply(X const&, Y const&) {
- constexpr auto eq = hana::equal(hana::value<X>(), hana::value<Y>());
- constexpr bool truth_value = hana::if_(eq, true, false);
- return hana::bool_<truth_value>{};
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Comparable for Products
- //////////////////////////////////////////////////////////////////////////
- template <typename T, typename U>
- struct equal_impl<T, U, when<hana::Product<T>::value && hana::Product<U>::value>> {
- template <typename X, typename Y>
- static constexpr auto apply(X const& x, Y const& y) {
- return hana::and_(
- hana::equal(hana::first(x), hana::first(y)),
- hana::equal(hana::second(x), hana::second(y))
- );
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Comparable for Sequences
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <typename Xs, typename Ys, std::size_t Length>
- struct compare_finite_sequences {
- Xs const& xs;
- Ys const& ys;
-
- template <std::size_t i>
- constexpr auto apply(hana::false_, hana::true_) const {
- return compare_finite_sequences::apply<i+1>(
- hana::bool_<i+1 == Length>{},
- hana::if_(hana::equal(hana::at_c<i>(xs), hana::at_c<i>(ys)),
- hana::true_c, hana::false_c)
- );
- }
-
- template <std::size_t i>
- constexpr auto apply(hana::false_, hana::false_) const
- { return hana::false_c; }
-
- template <std::size_t i, typename Result>
- constexpr auto apply(hana::true_, Result r) const
- { return r; }
-
- template <std::size_t i>
- constexpr bool apply(hana::false_, bool b) const {
- return b && compare_finite_sequences::apply<i+1>(
- hana::bool_<i+1 == Length>{},
- hana::if_(hana::equal(hana::at_c<i>(xs), hana::at_c<i>(ys)),
- hana::true_c, hana::false_c)
- );
- }
- };
- }
-
- template <typename T, typename U>
- struct equal_impl<T, U, when<Sequence<T>::value && hana::Sequence<U>::value>> {
- template <typename Xs, typename Ys>
- static constexpr auto apply(Xs const& xs, Ys const& ys) {
- constexpr std::size_t xs_size = decltype(hana::length(xs))::value;
- constexpr std::size_t ys_size = decltype(hana::length(ys))::value;
- detail::compare_finite_sequences<Xs, Ys, xs_size> comp{xs, ys};
- return comp.template apply<0>(hana::bool_<xs_size == 0>{},
- hana::bool_<xs_size == ys_size>{});
- }
- };
-
- namespace detail {
- template <typename X, typename Y>
- struct compare_struct_members {
- X const& x;
- Y const& y;
-
- template <typename Member>
- constexpr auto operator()(Member&& member) const {
- auto accessor = hana::second(static_cast<Member&&>(member));
- return hana::equal(accessor(x), accessor(y));
- }
- };
- }
-
- template <typename S>
- struct equal_impl<S, S, when<hana::Struct<S>::value>> {
- template <typename X, typename Y>
- static constexpr auto apply(X const& x, Y const& y) {
- return hana::all_of(hana::accessors<S>(),
- detail::compare_struct_members<X, Y>{x, y});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EQUAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/erase_key.hpp b/contrib/restricted/boost/boost/hana/erase_key.hpp
deleted file mode 100644
index 4a059c9598..0000000000
--- a/contrib/restricted/boost/boost/hana/erase_key.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/*!
-@file
-Defines `boost::hana::erase_key`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ERASE_KEY_HPP
-#define BOOST_HANA_ERASE_KEY_HPP
-
-#include <boost/hana/fwd/erase_key.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Set, typename ...Args>
- constexpr decltype(auto) erase_key_t::operator()(Set&& set, Args&& ...args) const {
- return erase_key_impl<typename hana::tag_of<Set>::type>::apply(
- static_cast<Set&&>(set),
- static_cast<Args&&>(args)...
- );
- }
- //! @endcond
-
- template <typename T, bool condition>
- struct erase_key_impl<T, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_ERASE_KEY_HPP
diff --git a/contrib/restricted/boost/boost/hana/eval.hpp b/contrib/restricted/boost/boost/hana/eval.hpp
deleted file mode 100644
index 1d8f4aa758..0000000000
--- a/contrib/restricted/boost/boost/hana/eval.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
-@file
-Defines `boost::hana::eval`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EVAL_HPP
-#define BOOST_HANA_EVAL_HPP
-
-#include <boost/hana/fwd/eval.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/wrong.hpp>
-#include <boost/hana/functional/id.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Expr>
- constexpr decltype(auto) eval_t::operator()(Expr&& expr) const {
- return eval_impl<typename hana::tag_of<Expr>::type>::apply(
- static_cast<Expr&&>(expr)
- );
- }
- //! @endcond
-
- template <typename T, bool condition>
- struct eval_impl<T, when<condition>> : default_ {
- template <typename Expr>
- static constexpr auto eval_helper(Expr&& expr, int)
- -> decltype(static_cast<Expr&&>(expr)())
- { return static_cast<Expr&&>(expr)(); }
-
- template <typename Expr>
- static constexpr auto eval_helper(Expr&& expr, long)
- -> decltype(static_cast<Expr&&>(expr)(hana::id))
- { return static_cast<Expr&&>(expr)(hana::id); }
-
- template <typename Expr>
- static constexpr auto eval_helper(Expr&&, ...) {
- static_assert(detail::wrong<Expr>{},
- "hana::eval(expr) requires the expression to be a hana::lazy, "
- "a nullary Callable or a unary Callable that may be "
- "called with hana::id");
- }
-
- template <typename Expr>
- static constexpr decltype(auto) apply(Expr&& expr)
- { return eval_helper(static_cast<Expr&&>(expr), int{}); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EVAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/eval_if.hpp b/contrib/restricted/boost/boost/hana/eval_if.hpp
deleted file mode 100644
index 7d0be870d3..0000000000
--- a/contrib/restricted/boost/boost/hana/eval_if.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/*!
-@file
-Defines `boost::hana::eval_if`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EVAL_IF_HPP
-#define BOOST_HANA_EVAL_IF_HPP
-
-#include <boost/hana/fwd/eval_if.hpp>
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/logical.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/eval.hpp>
-#include <boost/hana/if.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Cond, typename Then, typename Else>
- constexpr decltype(auto) eval_if_t::operator()(Cond&& cond, Then&& then_, Else&& else_) const {
- using Bool = typename hana::tag_of<Cond>::type;
- using EvalIf = BOOST_HANA_DISPATCH_IF(eval_if_impl<Bool>,
- hana::Logical<Bool>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Logical<Bool>::value,
- "hana::eval_if(cond, then, else) requires 'cond' to be a Logical");
- #endif
-
- return EvalIf::apply(static_cast<Cond&&>(cond),
- static_cast<Then&&>(then_),
- static_cast<Else&&>(else_));
- }
- //! @endcond
-
- template <typename L, bool condition>
- struct eval_if_impl<L, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for arithmetic data types
- //////////////////////////////////////////////////////////////////////////
- template <typename L>
- struct eval_if_impl<L, when<std::is_arithmetic<L>::value>> {
- template <typename Cond, typename T, typename E>
- static constexpr auto apply(Cond const& cond, T&& t, E&& e) {
- return cond ? hana::eval(static_cast<T&&>(t))
- : hana::eval(static_cast<E&&>(e));
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for Constants over a Logical
- //////////////////////////////////////////////////////////////////////////
- template <typename C>
- struct eval_if_impl<C, when<
- hana::Constant<C>::value &&
- Logical<typename C::value_type>::value
- >> {
- template <typename Then, typename Else>
- static constexpr decltype(auto)
- eval_if_helper(hana::true_, Then&& t, Else&&)
- { return hana::eval(static_cast<Then&&>(t)); }
-
- template <typename Then, typename Else>
- static constexpr decltype(auto)
- eval_if_helper(hana::false_, Then&&, Else&& e)
- { return hana::eval(static_cast<Else&&>(e)); }
-
- template <typename Cond, typename Then, typename Else>
- static constexpr decltype(auto) apply(Cond const&, Then&& t, Else&& e) {
- constexpr auto cond = hana::value<Cond>();
- constexpr bool truth_value = hana::if_(cond, true, false);
- return eval_if_helper(hana::bool_<truth_value>{},
- static_cast<Then&&>(t),
- static_cast<Else&&>(e));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EVAL_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/experimental/printable.hpp b/contrib/restricted/boost/boost/hana/experimental/printable.hpp
deleted file mode 100644
index e24a3426ea..0000000000
--- a/contrib/restricted/boost/boost/hana/experimental/printable.hpp
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
-@file
-Defines `boost::hana::experimental::print`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXPERIMENTAL_PRINTABLE_HPP
-#define BOOST_HANA_EXPERIMENTAL_PRINTABLE_HPP
-
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/product.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/first.hpp>
-#include <boost/hana/for_each.hpp>
-#include <boost/hana/intersperse.hpp>
-#include <boost/hana/second.hpp>
-#include <boost/hana/transform.hpp>
-#include <boost/hana/tuple.hpp>
-
-// models for different containers
-#include <boost/hana/fwd/map.hpp>
-#include <boost/hana/fwd/optional.hpp>
-#include <boost/hana/fwd/set.hpp>
-#include <boost/hana/fwd/string.hpp>
-#include <boost/hana/fwd/type.hpp>
-
-#include <boost/core/demangle.hpp>
-
-#include <iostream>
-#include <regex>
-#include <sstream>
-#include <string>
-#include <typeinfo>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace experimental {
- template <typename T>
- struct Printable;
-
- //! @cond
- template <typename T, typename = void>
- struct print_impl : print_impl<T, hana::when<true>> { };
-
- template <typename T, bool condition>
- struct print_impl<T, hana::when<condition>> : hana::default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
- //! @endcond
-
- //! @ingroup group-experimental
- //! Returns a string representation of the given object.
- //!
- //! This function is defined for most containers provided by Hana, and
- //! also for objects that define an `operator<<` that can be used with
- //! a `std::basic_ostream`. It can recursively print containers within
- //! containers, but do not expect any kind of proper indentation.
- //!
- //! This function requires (the rest of) Boost to be available on the
- //! system. It also requires RTTI to be enabled.
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- auto print = [](auto const& x) -> std::string {
- return tag-dispatched;
- };
-#else
- struct print_t {
- template <typename T>
- std::string operator()(T const& t) const {
- using Tag = typename hana::tag_of<T>::type;
- using Print = BOOST_HANA_DISPATCH_IF(print_impl<Tag>,
- hana::experimental::Printable<Tag>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::experimental::Printable<Tag>::value,
- "hana::experimental::print(t) requires 't' to be Printable");
- #endif
-
- return Print::apply(t);
- }
- };
-
- constexpr print_t print{};
-#endif
-
- // Define the `Printable` concept
- template <typename T>
- struct Printable {
- using Tag = typename hana::tag_of<T>::type;
- static constexpr bool value = !hana::is_default<print_impl<Tag>>::value;
- };
-
- namespace print_detail {
- std::string strip_type_junk(std::string const& str) {
- return std::regex_replace(str, std::regex("^([a-z_]+::)*([a-z_]*)_t<"), "$2<");
- }
- }
-
- // model for Sequences
- template <typename S>
- struct print_impl<S, hana::when<hana::Sequence<S>::value>> {
- template <typename Xs>
- static std::string apply(Xs const& xs) {
- std::string result = "(";
- auto comma_separated = hana::intersperse(xs, ", ");
- hana::for_each(comma_separated, [&result](auto const& x) {
- result += hana::experimental::print(x);
- });
- result += ")";
- return result;
- }
- };
-
- // model for OutputStreamable types
- //! @cond
- template <typename S>
- struct print_impl<S, hana::when_valid<decltype(
- std::declval<std::ostringstream&>() << std::declval<S const&>()
- )>> {
- template <typename T>
- static std::string apply(T const& t) {
- std::ostringstream os;
- os << t;
- return os.str();
- }
- };
- //! @endcond
-
- // model for hana::optional
- template <>
- struct print_impl<hana::optional_tag> {
- template <typename O>
- static std::string apply(O const& optional) {
- return hana::maybe("nothing",
- [](auto const& x) {
- return "just(" + hana::experimental::print(x) + ")";
- }, optional);
- }
- };
-
- // model for hana::maps
- template <>
- struct print_impl<hana::map_tag> {
- template <typename M>
- static std::string apply(M const& map) {
- std::string result = "{";
- auto pairs = hana::transform(hana::to_tuple(map),
- [](auto const& pair) {
- return hana::experimental::print(hana::first(pair))
- + " => "
- + hana::experimental::print(hana::second(pair));
- });
- auto comma_separated = hana::intersperse(pairs, ", ");
- hana::for_each(comma_separated, [&result](auto const& element) {
- result += element;
- });
- result += "}";
- return result;
- }
- };
-
- // model for hana::metafunctions
- template <template <typename ...> class F>
- struct print_impl<hana::metafunction_t<F>> {
- template <typename T>
- static std::string apply(T const&) {
- return print_detail::strip_type_junk(boost::core::demangle(typeid(T).name()));
- }
- };
-
- // model for hana::metafunction_classes
- template <typename F>
- struct print_impl<hana::metafunction_class_t<F>> {
- template <typename T>
- static std::string apply(T const&) {
- return print_detail::strip_type_junk(boost::core::demangle(typeid(T).name()));
- }
- };
-
- // model for Constants holding a `Printable`
- template <typename C>
- struct print_impl<C, hana::when<
- hana::Constant<C>::value &&
- Printable<typename C::value_type>::value
- >> {
- template <typename T>
- static std::string apply(T const&) {
- constexpr auto value = hana::value<T>();
- return hana::experimental::print(value);
- }
- };
-
- // model for Products
- template <typename P>
- struct print_impl<P, hana::when<hana::Product<P>::value>> {
- template <typename T>
- static std::string apply(T const& t) {
- return '(' + hana::experimental::print(hana::first(t))
- + ", "
- + hana::experimental::print(hana::second(t)) + ')';
- }
- };
-
- // model for hana::strings
- template <>
- struct print_impl<hana::string_tag> {
- template <typename S>
- static std::string apply(S const& s) {
- return '"' + std::string{hana::to<char const*>(s)} + '"';
- }
- };
-
- // model for hana::sets
- template <>
- struct print_impl<hana::set_tag> {
- template <typename S>
- static std::string apply(S const& set) {
- std::string result = "{";
- auto as_tuple = hana::transform(hana::to_tuple(set),
- hana::experimental::print);
- auto comma_separated = hana::intersperse(as_tuple, ", ");
- hana::for_each(comma_separated, [&result](auto const& element) {
- result += element;
- });
- result += "}";
- return result;
- }
- };
-
- // model for hana::templates
- template <template <typename ...> class F>
- struct print_impl<template_t<F>> {
- template <typename T>
- static std::string apply(T const&) {
- return print_detail::strip_type_junk(boost::core::demangle(typeid(T).name()));
- }
- };
-
- // model for hana::types
- template <>
- struct print_impl<hana::type_tag> {
- template <typename T>
- static std::string apply(T const&) {
- using Type = typename T::type;
- return "type<" + boost::core::demangle(typeid(Type).name()) + '>';
- }
- };
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXPERIMENTAL_PRINTABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/experimental/type_name.hpp b/contrib/restricted/boost/boost/hana/experimental/type_name.hpp
deleted file mode 100644
index f3db176178..0000000000
--- a/contrib/restricted/boost/boost/hana/experimental/type_name.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-@file
-Defines `boost::hana::experimental::type_name`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXPERIMENTAL_TYPE_NAME_HPP
-#define BOOST_HANA_EXPERIMENTAL_TYPE_NAME_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/string.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace experimental {
- namespace detail {
- struct cstring {
- char const* ptr;
- std::size_t length;
- };
-
- // Note: We substract the null terminator from the string sizes below.
- template <typename T>
- constexpr cstring type_name_impl2() {
-
- #if defined(__clang__)
- constexpr char const* pretty_function = __PRETTY_FUNCTION__;
- constexpr std::size_t total_size = sizeof(__PRETTY_FUNCTION__) - 1;
- constexpr std::size_t prefix_size = sizeof("boost::hana::experimental::detail::cstring boost::hana::experimental::detail::type_name_impl2() [T = ") - 1;
- constexpr std::size_t suffix_size = sizeof("]") - 1;
- #else
- #error "No support for this compiler."
- #endif
-
- return {pretty_function + prefix_size, total_size - prefix_size - suffix_size};
- }
-
- template <typename T, std::size_t ...i>
- auto type_name_impl1(std::index_sequence<i...>) {
- constexpr auto name = detail::type_name_impl2<T>();
- return hana::string<*(name.ptr + i)...>{};
- }
- } // end namespace detail
-
- //! @ingroup group-experimental
- //! Returns a `hana::string` representing the name of the given type, at
- //! compile-time.
- //!
- //! This only works on Clang (and apparently MSVC, but Hana does not work
- //! there as of writing this). Original idea taken from
- //! https://github.com/Manu343726/ctti.
- template <typename T>
- auto type_name() {
- constexpr auto name = detail::type_name_impl2<T>();
- return detail::type_name_impl1<T>(std::make_index_sequence<name.length>{});
- }
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXPERIMENTAL_TYPE_NAME_HPP
diff --git a/contrib/restricted/boost/boost/hana/experimental/types.hpp b/contrib/restricted/boost/boost/hana/experimental/types.hpp
deleted file mode 100644
index be1436a506..0000000000
--- a/contrib/restricted/boost/boost/hana/experimental/types.hpp
+++ /dev/null
@@ -1,158 +0,0 @@
-/*!
-@file
-Defines `boost::hana::experimental::types`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXPERIMENTAL_TYPES_HPP
-#define BOOST_HANA_EXPERIMENTAL_TYPES_HPP
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/metafunction.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/any_of.hpp>
-#include <boost/hana/detail/type_at.hpp>
-#include <boost/hana/fwd/at.hpp>
-#include <boost/hana/fwd/contains.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/equal.hpp>
-#include <boost/hana/fwd/is_empty.hpp>
-#include <boost/hana/fwd/transform.hpp>
-#include <boost/hana/fwd/unpack.hpp>
-#include <boost/hana/type.hpp>
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace experimental {
- //! @ingroup group-experimental
- //! Container optimized for holding types.
- //!
- //! It is often useful to manipulate a sequence that contains types
- //! only, without any associated runtime value. This container allows
- //! storing and manipulating pure types in a much more compile-time
- //! efficient manner than using `hana::tuple`, which must assume that
- //! its contents might have runtime values.
- template <typename ...T>
- struct types;
-
- struct types_tag;
-
- template <typename ...T>
- struct types { };
- } // end namespace experimental
-
- template <typename ...T>
- struct tag_of<experimental::types<T...>> {
- using type = experimental::types_tag;
- };
-
- // Foldable
- template <>
- struct unpack_impl<hana::experimental::types_tag> {
- template <typename ...T, typename F, typename = typename std::enable_if<
- !hana::Metafunction<F>::value
- >::type>
- static constexpr decltype(auto) apply(hana::experimental::types<T...> const&, F&& f) {
- return static_cast<F&&>(f)(hana::type<T>{}...);
- }
-
- template <typename ...T, typename F, typename = typename std::enable_if<
- hana::Metafunction<F>::value
- >::type>
- static constexpr hana::type<typename F::template apply<T...>::type>
- apply(hana::experimental::types<T...> const&, F const&) { return {}; }
- };
-
- // Functor
- template <>
- struct transform_impl<hana::experimental::types_tag> {
- template <typename ...T, typename F, typename = typename std::enable_if<
- !hana::Metafunction<F>::value
- >::type>
- static constexpr auto apply(hana::experimental::types<T...> const&, F&& f)
- -> hana::experimental::types<typename decltype(+f(hana::type<T>{}))::type...>
- { return {}; }
-
- template <typename ...T, typename F, typename = typename std::enable_if<
- hana::Metafunction<F>::value
- >::type>
- static constexpr hana::experimental::types<typename F::template apply<T>::type...>
- apply(hana::experimental::types<T...> const&, F const&) { return {}; }
- };
-
- // Iterable
- template <>
- struct at_impl<hana::experimental::types_tag> {
- template <typename ...T, typename N>
- static constexpr auto
- apply(hana::experimental::types<T...> const&, N const&) {
- using Nth = typename detail::type_at<N::value, T...>::type;
- return hana::type<Nth>{};
- }
- };
-
- template <>
- struct is_empty_impl<hana::experimental::types_tag> {
- template <typename ...T>
- static constexpr hana::bool_<sizeof...(T) == 0>
- apply(hana::experimental::types<T...> const&)
- { return {}; }
- };
-
- template <>
- struct drop_front_impl<hana::experimental::types_tag> {
- template <std::size_t n, typename ...T, std::size_t ...i>
- static hana::experimental::types<typename detail::type_at<i + n, T...>::type...>
- helper(std::index_sequence<i...>);
-
- template <typename ...T, typename N>
- static constexpr auto
- apply(hana::experimental::types<T...> const&, N const&) {
- constexpr std::size_t n = N::value > sizeof...(T) ? sizeof...(T) : N::value;
- using Indices = std::make_index_sequence<sizeof...(T) - n>;
- return decltype(helper<n, T...>(Indices{})){};
- }
- };
-
- // Searchable
- template <>
- struct contains_impl<hana::experimental::types_tag> {
- template <typename U>
- struct is_same_as {
- template <typename T>
- struct apply {
- static constexpr bool value = std::is_same<U, T>::value;
- };
- };
-
- template <typename ...T, typename U>
- static constexpr auto apply(hana::experimental::types<T...> const&, U const&)
- -> hana::bool_<
- detail::any_of<is_same_as<typename U::type>::template apply, T...>::value
- >
- { return {}; }
-
- static constexpr hana::false_ apply(...) { return {}; }
- };
-
- // Comparable
- template <>
- struct equal_impl<hana::experimental::types_tag, hana::experimental::types_tag> {
- template <typename Types>
- static constexpr hana::true_ apply(Types const&, Types const&)
- { return {}; }
-
- template <typename Ts, typename Us>
- static constexpr hana::false_ apply(Ts const&, Us const&)
- { return {}; }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXPERIMENTAL_TYPES_HPP
diff --git a/contrib/restricted/boost/boost/hana/experimental/view.hpp b/contrib/restricted/boost/boost/hana/experimental/view.hpp
deleted file mode 100644
index cc2f4c606f..0000000000
--- a/contrib/restricted/boost/boost/hana/experimental/view.hpp
+++ /dev/null
@@ -1,515 +0,0 @@
-/*
-@file
-Defines experimental views.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXPERIMENTAL_VIEW_HPP
-#define BOOST_HANA_EXPERIMENTAL_VIEW_HPP
-
-#include <boost/hana/and.hpp>
-#include <boost/hana/at.hpp>
-#include <boost/hana/bool.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/fold_left.hpp>
-#include <boost/hana/functional/compose.hpp>
-#include <boost/hana/functional/on.hpp>
-#include <boost/hana/fwd/ap.hpp>
-#include <boost/hana/fwd/concat.hpp>
-#include <boost/hana/fwd/drop_front.hpp>
-#include <boost/hana/fwd/empty.hpp>
-#include <boost/hana/fwd/equal.hpp>
-#include <boost/hana/fwd/flatten.hpp>
-#include <boost/hana/fwd/is_empty.hpp>
-#include <boost/hana/fwd/less.hpp>
-#include <boost/hana/fwd/lift.hpp>
-#include <boost/hana/fwd/transform.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/lexicographical_compare.hpp>
-#include <boost/hana/range.hpp>
-#include <boost/hana/tuple.hpp>
-#include <boost/hana/unpack.hpp>
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-// Pros of views
-// - No temporary container created between algorithms
-// - Lazy, so only the minimum is required
-//
-// Cons of views
-// - Reference semantics mean possibility for dangling references
-// - Lose the ability to move from temporary containers
-// - When fetching the members of a view multiple times, no caching is done.
-// So for example, `t = transform(xs, f); at_c<0>(t); at_c<0>(t)` will
-// compute `f(at_c<0>(xs))` twice.
-// - push_back creates a joint_view and a single_view. The single_view holds
-// the value as a member. When doing multiple push_backs, we end up with a
-// joint_view<xxx, joint_view<single_view<T>, joint_view<single_view<T>, ....>>>
-// which contains a reference to `xxx` and all the `T`s by value. Such a
-// "view" is not cheap to copy, which is inconsistent with the usual
-// expectations about views.
-
-BOOST_HANA_NAMESPACE_BEGIN
-
-namespace experimental {
- struct view_tag;
-
- namespace detail {
- template <typename Sequence>
- struct is_view {
- static constexpr bool value = false;
- };
-
- template <typename Sequence>
- using view_storage = typename std::conditional<
- detail::is_view<Sequence>::value, Sequence, Sequence&
- >::type;
- }
-
- //////////////////////////////////////////////////////////////////////////
- // sliced_view
- //////////////////////////////////////////////////////////////////////////
- template <typename Sequence, std::size_t ...indices>
- struct sliced_view_t {
- detail::view_storage<Sequence> sequence_;
- using hana_tag = view_tag;
- };
-
- template <typename Sequence, typename Indices>
- constexpr auto sliced(Sequence& sequence, Indices const& indices) {
- return hana::unpack(indices, [&](auto ...i) {
- return sliced_view_t<Sequence, decltype(i)::value...>{sequence};
- });
- }
-
- namespace detail {
- template <typename Sequence, std::size_t ...i>
- struct is_view<sliced_view_t<Sequence, i...>> {
- static constexpr bool value = true;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // transformed_view
- //////////////////////////////////////////////////////////////////////////
- template <typename Sequence, typename F>
- struct transformed_view_t {
- detail::view_storage<Sequence> sequence_;
- F f_;
- using hana_tag = view_tag;
- };
-
- template <typename Sequence, typename F>
- constexpr transformed_view_t<Sequence, typename hana::detail::decay<F>::type>
- transformed(Sequence& sequence, F&& f) {
- return {sequence, static_cast<F&&>(f)};
- }
-
- namespace detail {
- template <typename Sequence, typename F>
- struct is_view<transformed_view_t<Sequence, F>> {
- static constexpr bool value = true;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // filtered_view
- //////////////////////////////////////////////////////////////////////////
-#if 0
- template <typename Sequence, typename Pred>
- using filtered_view_t = sliced_view_t<Sequence, detail::filtered_indices<...>>;
-
- template <typename Sequence, typename Pred>
- constexpr filtered_view_t<Sequence, Pred> filtered(Sequence& sequence, Pred&& pred) {
- return {sequence};
- }
-#endif
-
- //////////////////////////////////////////////////////////////////////////
- // joined_view
- //////////////////////////////////////////////////////////////////////////
- template <typename Sequence1, typename Sequence2>
- struct joined_view_t {
- detail::view_storage<Sequence1> sequence1_;
- detail::view_storage<Sequence2> sequence2_;
- using hana_tag = view_tag;
- };
-
- struct make_joined_view_t {
- template <typename Sequence1, typename Sequence2>
- constexpr joined_view_t<Sequence1, Sequence2> operator()(Sequence1& s1, Sequence2& s2) const {
- return {s1, s2};
- }
- };
- constexpr make_joined_view_t joined{};
-
- namespace detail {
- template <typename Sequence1, typename Sequence2>
- struct is_view<joined_view_t<Sequence1, Sequence2>> {
- static constexpr bool value = true;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // single_view
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct single_view_t {
- T value_;
- using hana_tag = view_tag;
- };
-
- template <typename T>
- constexpr single_view_t<typename hana::detail::decay<T>::type> single_view(T&& t) {
- return {static_cast<T&&>(t)};
- }
-
- namespace detail {
- template <typename T>
- struct is_view<single_view_t<T>> {
- static constexpr bool value = true;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // empty_view
- //////////////////////////////////////////////////////////////////////////
- struct empty_view_t {
- using hana_tag = view_tag;
- };
-
- constexpr empty_view_t empty_view() {
- return {};
- }
-
- namespace detail {
- template <>
- struct is_view<empty_view_t> {
- static constexpr bool value = true;
- };
- }
-} // end namespace experimental
-
-//////////////////////////////////////////////////////////////////////////
-// Foldable
-//////////////////////////////////////////////////////////////////////////
-template <>
-struct unpack_impl<experimental::view_tag> {
- // sliced_view
- template <typename Sequence, std::size_t ...i, typename F>
- static constexpr decltype(auto)
- apply(experimental::sliced_view_t<Sequence, i...> view, F&& f) {
- (void)view; // Remove spurious unused variable warning with GCC
- return static_cast<F&&>(f)(hana::at_c<i>(view.sequence_)...);
- }
-
- // transformed_view
- template <typename Sequence, typename F, typename G>
- static constexpr decltype(auto)
- apply(experimental::transformed_view_t<Sequence, F> view, G&& g) {
- return hana::unpack(view.sequence_, hana::on(static_cast<G&&>(g), view.f_));
- }
-
- // joined_view
- template <typename View, typename F, std::size_t ...i1, std::size_t ...i2>
- static constexpr decltype(auto)
- unpack_joined(View view, F&& f, std::index_sequence<i1...>,
- std::index_sequence<i2...>)
- {
- (void)view; // Remove spurious unused variable warning with GCC
- return static_cast<F&&>(f)(hana::at_c<i1>(view.sequence1_)...,
- hana::at_c<i2>(view.sequence2_)...);
- }
-
- template <typename S1, typename S2, typename F>
- static constexpr decltype(auto)
- apply(experimental::joined_view_t<S1, S2> view, F&& f) {
- constexpr auto N1 = decltype(hana::length(view.sequence1_))::value;
- constexpr auto N2 = decltype(hana::length(view.sequence2_))::value;
- return unpack_joined(view, static_cast<F&&>(f),
- std::make_index_sequence<N1>{},
- std::make_index_sequence<N2>{});
- }
-
- // single_view
- template <typename T, typename F>
- static constexpr decltype(auto) apply(experimental::single_view_t<T> view, F&& f) {
- return static_cast<F&&>(f)(view.value_);
- }
-
- // empty_view
- template <typename F>
- static constexpr decltype(auto) apply(experimental::empty_view_t, F&& f) {
- return static_cast<F&&>(f)();
- }
-};
-
-//////////////////////////////////////////////////////////////////////////
-// Iterable
-//////////////////////////////////////////////////////////////////////////
-template <>
-struct at_impl<experimental::view_tag> {
- // sliced_view
- template <typename Sequence, std::size_t ...i, typename N>
- static constexpr decltype(auto)
- apply(experimental::sliced_view_t<Sequence, i...> view, N const&) {
- constexpr std::size_t indices[] = {i...};
- constexpr std::size_t n = indices[N::value];
- return hana::at_c<n>(view.sequence_);
- }
-
- // transformed_view
- template <typename Sequence, typename F, typename N>
- static constexpr decltype(auto)
- apply(experimental::transformed_view_t<Sequence, F> view, N const& n) {
- return view.f_(hana::at(view.sequence_, n));
- }
-
- // joined_view
- template <std::size_t Left, typename View, typename N>
- static constexpr decltype(auto) at_joined_view(View view, N const&, hana::true_) {
- return hana::at_c<N::value>(view.sequence1_);
- }
-
- template <std::size_t Left, typename View, typename N>
- static constexpr decltype(auto) at_joined_view(View view, N const&, hana::false_) {
- return hana::at_c<N::value - Left>(view.sequence2_);
- }
-
- template <typename S1, typename S2, typename N>
- static constexpr decltype(auto)
- apply(experimental::joined_view_t<S1, S2> view, N const& n) {
- constexpr auto Left = decltype(hana::length(view.sequence1_))::value;
- return at_joined_view<Left>(view, n, hana::bool_c<(N::value < Left)>);
- }
-
- // single_view
- template <typename T, typename N>
- static constexpr decltype(auto) apply(experimental::single_view_t<T> view, N const&) {
- static_assert(N::value == 0,
- "trying to fetch an out-of-bounds element in a hana::single_view");
- return view.value_;
- }
-
- // empty_view
- template <typename N>
- static constexpr decltype(auto) apply(experimental::empty_view_t, N const&) = delete;
-};
-
-template <>
-struct length_impl<experimental::view_tag> {
- // sliced_view
- template <typename Sequence, std::size_t ...i>
- static constexpr auto
- apply(experimental::sliced_view_t<Sequence, i...>) {
- return hana::size_c<sizeof...(i)>;
- }
-
- // transformed_view
- template <typename Sequence, typename F>
- static constexpr auto apply(experimental::transformed_view_t<Sequence, F> view) {
- return hana::length(view.sequence_);
- }
-
- // joined_view
- template <typename S1, typename S2>
- static constexpr auto apply(experimental::joined_view_t<S1, S2> view) {
- return hana::size_c<
- decltype(hana::length(view.sequence1_))::value +
- decltype(hana::length(view.sequence2_))::value
- >;
- }
-
- // single_view
- template <typename T>
- static constexpr auto apply(experimental::single_view_t<T>) {
- return hana::size_c<1>;
- }
-
- // empty_view
- static constexpr auto apply(experimental::empty_view_t) {
- return hana::size_c<0>;
- }
-};
-
-template <>
-struct is_empty_impl<experimental::view_tag> {
- // sliced_view
- template <typename Sequence, std::size_t ...i>
- static constexpr auto
- apply(experimental::sliced_view_t<Sequence, i...>) {
- return hana::bool_c<sizeof...(i) == 0>;
- }
-
- // transformed_view
- template <typename Sequence, typename F>
- static constexpr auto apply(experimental::transformed_view_t<Sequence, F> view) {
- return hana::is_empty(view.sequence_);
- }
-
- // joined_view
- template <typename S1, typename S2>
- static constexpr auto apply(experimental::joined_view_t<S1, S2> view) {
- return hana::and_(hana::is_empty(view.sequence1_),
- hana::is_empty(view.sequence2_));
- }
-
- // single_view
- template <typename T>
- static constexpr auto apply(experimental::single_view_t<T>) {
- return hana::false_c;
- }
-
- // empty_view
- static constexpr auto apply(experimental::empty_view_t) {
- return hana::true_c;
- }
-};
-
-template <>
-struct drop_front_impl<experimental::view_tag> {
- template <typename View, typename N>
- static constexpr auto apply(View view, N const&) {
- constexpr auto n = N::value;
- constexpr auto Length = decltype(hana::length(view))::value;
- return experimental::sliced(view, hana::range_c<std::size_t, n, Length>);
- }
-};
-
-//////////////////////////////////////////////////////////////////////////
-// Functor
-//////////////////////////////////////////////////////////////////////////
-template <>
-struct transform_impl<experimental::view_tag> {
- template <typename Sequence, typename F, typename G>
- static constexpr auto
- apply(experimental::transformed_view_t<Sequence, F> view, G&& g) {
- return experimental::transformed(view.sequence_,
- hana::compose(static_cast<G&&>(g), view.f_));
- }
-
- template <typename View, typename F>
- static constexpr auto apply(View view, F&& f) {
- return experimental::transformed(view, static_cast<F&&>(f));
- }
-};
-
-//////////////////////////////////////////////////////////////////////////
-// Applicative
-//////////////////////////////////////////////////////////////////////////
-template <>
-struct lift_impl<experimental::view_tag> {
- template <typename T>
- static constexpr auto apply(T&& t) {
- return experimental::single_view(static_cast<T&&>(t));
- }
-};
-
-template <>
-struct ap_impl<experimental::view_tag> {
- template <typename F, typename X>
- static constexpr auto apply(F&& f, X&& x) {
- // TODO: Implement cleverly; we most likely need a cartesian_product
- // view or something like that.
- return hana::ap(hana::to_tuple(f), hana::to_tuple(x));
- }
-};
-
-//////////////////////////////////////////////////////////////////////////
-// Monad
-//////////////////////////////////////////////////////////////////////////
-template <>
-struct flatten_impl<experimental::view_tag> {
- template <typename View>
- static constexpr auto apply(View view) {
- // TODO: Implement a flattened_view instead
- return hana::fold_left(view, experimental::empty_view(),
- experimental::joined);
- }
-};
-
-//////////////////////////////////////////////////////////////////////////
-// MonadPlus
-//////////////////////////////////////////////////////////////////////////
-template <>
-struct concat_impl<experimental::view_tag> {
- template <typename View1, typename View2>
- static constexpr auto apply(View1 view1, View2 view2) {
- return experimental::joined(view1, view2);
- }
-};
-
-template <>
-struct empty_impl<experimental::view_tag> {
- static constexpr auto apply() {
- return experimental::empty_view();
- }
-};
-
-//////////////////////////////////////////////////////////////////////////
-// Comparable
-//////////////////////////////////////////////////////////////////////////
-template <>
-struct equal_impl<experimental::view_tag, experimental::view_tag> {
- template <typename View1, typename View2>
- static constexpr auto apply(View1 v1, View2 v2) {
- // TODO: Use a lexicographical comparison algorithm.
- return hana::equal(hana::to_tuple(v1), hana::to_tuple(v2));
- }
-};
-
-template <typename S>
-struct equal_impl<experimental::view_tag, S, hana::when<hana::Sequence<S>::value>> {
- template <typename View1, typename Seq>
- static constexpr auto apply(View1 v1, Seq const& s) {
- // TODO: Use a lexicographical comparison algorithm.
- return hana::equal(hana::to_tuple(v1), hana::to_tuple(s));
- }
-};
-
-template <typename S>
-struct equal_impl<S, experimental::view_tag, hana::when<hana::Sequence<S>::value>> {
- template <typename Seq, typename View2>
- static constexpr auto apply(Seq const& s, View2 v2) {
- // TODO: Use a lexicographical comparison algorithm.
- return hana::equal(hana::to_tuple(s), hana::to_tuple(v2));
- }
-};
-
-//////////////////////////////////////////////////////////////////////////
-// Orderable
-//////////////////////////////////////////////////////////////////////////
-template <>
-struct less_impl<experimental::view_tag, experimental::view_tag> {
- template <typename View1, typename View2>
- static constexpr auto apply(View1 v1, View2 v2) {
- return hana::lexicographical_compare(v1, v2);
- }
-};
-
-template <typename S>
-struct less_impl<experimental::view_tag, S, hana::when<hana::Sequence<S>::value>> {
- template <typename View1, typename Seq>
- static constexpr auto apply(View1 v1, Seq const& s) {
- return hana::lexicographical_compare(v1, s);
- }
-};
-
-template <typename S>
-struct less_impl<S, experimental::view_tag, hana::when<hana::Sequence<S>::value>> {
- template <typename Seq, typename View2>
- static constexpr auto apply(Seq const& s, View2 v2) {
- return hana::lexicographical_compare(s, v2);
- }
-};
-
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXPERIMENTAL_VIEW_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/boost.hpp b/contrib/restricted/boost/boost/hana/ext/boost.hpp
deleted file mode 100644
index aae8d5c27d..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/boost.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/*!
-@file
-Includes all the adaptors for external Boost libraries.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_BOOST_HPP
-#define BOOST_HANA_EXT_BOOST_HPP
-
-//! @ingroup group-ext
-//! @defgroup group-ext-boost Other Boost adapters
-//! Adapters for miscellaneous heterogeneous containers in Boost.
-
-#include <boost/hana/ext/boost/fusion.hpp>
-#include <boost/hana/ext/boost/mpl.hpp>
-#include <boost/hana/ext/boost/tuple.hpp>
-
-#endif // !BOOST_HANA_EXT_BOOST_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/boost/fusion.hpp b/contrib/restricted/boost/boost/hana/ext/boost/fusion.hpp
deleted file mode 100644
index 7f775da9d9..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/boost/fusion.hpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/*!
-@file
-Includes all the adaptors for the Boost.Fusion library.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_BOOST_FUSION_HPP
-#define BOOST_HANA_EXT_BOOST_FUSION_HPP
-
-//! @ingroup group-ext
-//! @defgroup group-ext-fusion Boost.Fusion adapters
-//! Adapters for Boost.Fusion containers.
-
-#include <boost/hana/ext/boost/fusion/deque.hpp>
-#include <boost/hana/ext/boost/fusion/list.hpp>
-#include <boost/hana/ext/boost/fusion/tuple.hpp>
-#include <boost/hana/ext/boost/fusion/vector.hpp>
-
-#endif // !BOOST_HANA_EXT_BOOST_FUSION_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/boost/fusion/deque.hpp b/contrib/restricted/boost/boost/hana/ext/boost/fusion/deque.hpp
deleted file mode 100644
index 698638157d..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/boost/fusion/deque.hpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/*!
-@file
-Adapts `boost::fusion::deque` for use with Hana.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_BOOST_FUSION_DEQUE_HPP
-#define BOOST_HANA_EXT_BOOST_FUSION_DEQUE_HPP
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/ext/boost/fusion/detail/common.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/drop_front.hpp>
-#include <boost/hana/length.hpp>
-
-#include <boost/fusion/container/deque.hpp>
-#include <boost/fusion/container/generation/make_deque.hpp>
-#include <boost/fusion/support/tag_of.hpp>
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-namespace boost { namespace fusion {
- //! @ingroup group-ext-fusion
- //! Adapter for Boost.Fusion deques.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! A Fusion deque is a model of the `Sequence` concept, and all the
- //! concepts it refines. That makes it essentially the same as a Hana
- //! tuple, although the complexity of some operations might differ from
- //! that of a tuple.
- //!
- //! @include example/ext/boost/fusion/deque.cpp
- template <typename ...T>
- struct deque { };
-}}
-#endif
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace ext { namespace boost { namespace fusion {
- struct deque_tag;
- }}}
-
- template <typename T>
- struct tag_of<T, when<
- std::is_same<
- typename ::boost::fusion::traits::tag_of<T>::type,
- ::boost::fusion::traits::tag_of<
- ::boost::fusion::deque<>
- >::type
- >::value
- >> {
- using type = ext::boost::fusion::deque_tag;
- };
-
- namespace detail {
- template <>
- struct is_fusion_sequence<ext::boost::fusion::deque_tag> {
- static constexpr bool value = true;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // Iterable (the rest is in detail/common.hpp)
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct drop_front_impl<ext::boost::fusion::deque_tag> {
- template <std::size_t n, typename Xs, std::size_t ...i>
- static constexpr auto drop_front_helper(Xs&& xs, std::index_sequence<i...>) {
- return hana::make<ext::boost::fusion::deque_tag>(
- hana::at_c<n + i>(static_cast<Xs&&>(xs))...
- );
- }
-
- template <typename Xs, typename N>
- static constexpr auto apply(Xs&& xs, N const&) {
- constexpr std::size_t n = N::value;
- constexpr std::size_t len = decltype(hana::length(xs))::value;
- return drop_front_helper<n>(static_cast<Xs&&>(xs),
- std::make_index_sequence<(n < len ? len - n : 0)>{});
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Sequence
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct make_impl<ext::boost::fusion::deque_tag> {
- template <typename ...Xs>
- static constexpr auto apply(Xs&& ...xs) {
- return ::boost::fusion::make_deque(static_cast<Xs&&>(xs)...);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXT_BOOST_FUSION_DEQUE_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/boost/fusion/detail/common.hpp b/contrib/restricted/boost/boost/hana/ext/boost/fusion/detail/common.hpp
deleted file mode 100644
index 298d74d93d..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/boost/fusion/detail/common.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/*!
-@file
-Defines common methods for all Boost.Fusion sequences.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_BOOST_FUSION_DETAIL_COMMON_HPP
-#define BOOST_HANA_EXT_BOOST_FUSION_DETAIL_COMMON_HPP
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/fwd/at.hpp>
-#include <boost/hana/fwd/concept/sequence.hpp>
-#include <boost/hana/fwd/is_empty.hpp>
-#include <boost/hana/fwd/length.hpp>
-#include <boost/hana/integral_constant.hpp>
-
-#include <boost/fusion/sequence/intrinsic/at.hpp>
-#include <boost/fusion/sequence/intrinsic/empty.hpp>
-#include <boost/fusion/sequence/intrinsic/size.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace detail {
- template <typename T>
- struct is_fusion_sequence {
- static constexpr bool value = false;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // Iterable
- //////////////////////////////////////////////////////////////////////////
- template <typename S>
- struct at_impl<S, when<detail::is_fusion_sequence<S>::value>> {
- template <typename Xs, typename N>
- static constexpr decltype(auto) apply(Xs&& xs, N const&) {
- constexpr std::size_t n = N::value;
- return boost::fusion::at_c<n>(static_cast<Xs&&>(xs));
- }
- };
-
- template <typename S>
- struct is_empty_impl<S, when<detail::is_fusion_sequence<S>::value>> {
- template <typename Xs>
- static constexpr auto apply(Xs&& xs) {
- using Empty = decltype(boost::fusion::empty(xs));
- return hana::bool_c<Empty::value>;
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Foldable
- //////////////////////////////////////////////////////////////////////////
- template <typename S>
- struct length_impl<S, when<detail::is_fusion_sequence<S>::value>> {
- template <typename Xs>
- static constexpr auto apply(Xs const&) {
- using Size = typename boost::fusion::result_of::size<Xs>::type;
- return hana::size_c<Size::value>;
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Sequence
- //////////////////////////////////////////////////////////////////////////
- template <typename S>
- struct Sequence<S, when<detail::is_fusion_sequence<S>::value>> {
- static constexpr bool value = true;
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXT_BOOST_FUSION_DETAIL_COMMON_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/boost/fusion/list.hpp b/contrib/restricted/boost/boost/hana/ext/boost/fusion/list.hpp
deleted file mode 100644
index 0bdcb23dc5..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/boost/fusion/list.hpp
+++ /dev/null
@@ -1,111 +0,0 @@
-/*!
-@file
-Adapts `boost::fusion::list` for use with Hana.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_BOOST_FUSION_LIST_HPP
-#define BOOST_HANA_EXT_BOOST_FUSION_LIST_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/ext/boost/fusion/detail/common.hpp>
-#include <boost/hana/fwd/at.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/drop_front.hpp>
-#include <boost/hana/fwd/length.hpp>
-
-#include <boost/fusion/algorithm/transformation/pop_front.hpp>
-#include <boost/fusion/container/generation/make_list.hpp>
-#include <boost/fusion/container/list.hpp>
-#include <boost/fusion/container/list/convert.hpp>
-#include <boost/fusion/support/tag_of.hpp>
-#include <boost/version.hpp>
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-namespace boost { namespace fusion {
- //! @ingroup group-ext-fusion
- //! Adapter for Boost.Fusion lists.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! A Fusion list is a model of the `Sequence` concept, and all the
- //! concepts it refines. That makes it essentially the same as a Hana
- //! tuple, although the complexity of some operations might differ from
- //! that of a tuple.
- //!
- //! @include example/ext/boost/fusion/list.cpp
- template <typename ...T>
- struct list { };
-}}
-#endif
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace ext { namespace boost { namespace fusion {
- struct list_tag;
- }}}
-
- template <typename T>
- struct tag_of<T, when<
- std::is_same<
- typename ::boost::fusion::traits::tag_of<T>::type,
- ::boost::fusion::traits::tag_of<
- ::boost::fusion::list<>
- >::type
- >::value
- >> {
- using type = ext::boost::fusion::list_tag;
- };
-
- namespace detail {
- template <>
- struct is_fusion_sequence<ext::boost::fusion::list_tag> {
- static constexpr bool value = true;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // Iterable (the rest is in detail/common.hpp)
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct drop_front_impl<ext::boost::fusion::list_tag> {
- template <std::size_t n, typename Xs, std::size_t ...i>
- static constexpr auto drop_front_helper(Xs&& xs, std::index_sequence<i...>) {
- return hana::make<ext::boost::fusion::list_tag>(
- hana::at_c<n + i>(static_cast<Xs&&>(xs))...
- );
- }
-
- template <typename Xs, typename N>
- static constexpr auto apply(Xs&& xs, N const&) {
- constexpr std::size_t n = N::value;
- constexpr std::size_t len = decltype(hana::length(xs))::value;
- return drop_front_helper<n>(static_cast<Xs&&>(xs),
- std::make_index_sequence<(n < len ? len - n : 0)>{});
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Sequence
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct make_impl<ext::boost::fusion::list_tag> {
- template <typename ...Xs>
- static constexpr auto apply(Xs&& ...xs) {
- return ::boost::fusion::make_list(static_cast<Xs&&>(xs)...);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXT_BOOST_FUSION_LIST_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/boost/fusion/tuple.hpp b/contrib/restricted/boost/boost/hana/ext/boost/fusion/tuple.hpp
deleted file mode 100644
index cf427e51d3..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/boost/fusion/tuple.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/*!
-@file
-Adapts `boost::fusion::tuple` for use with Hana.
-
-In the current version of Boost.Fusion, `boost::fusion::tuple` is basically
-an alias to `boost::fusion::vector`, so both data types share the same
-implementation in Hana.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_BOOST_FUSION_TUPLE_HPP
-#define BOOST_HANA_EXT_BOOST_FUSION_TUPLE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/ext/boost/fusion/vector.hpp>
-
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-namespace boost { namespace fusion {
- //! @ingroup group-ext-fusion
- //! Adapter for Boost.Fusion tuples.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! A Fusion tuple is a model of the `Sequence` concept, and all the
- //! concepts it refines. That makes it essentially the same as a Hana
- //! tuple, although the complexity of some operations might differ from
- //! that of a tuple.
- //!
- //! @include example/ext/boost/fusion/tuple.cpp
- template <typename ...T>
- struct tuple { };
-}}
-#endif
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace ext { namespace boost { namespace fusion {
- // In the current version of Boost.Fusion, `boost::fusion::tuple` is
- // basically an alias to `boost::fusion::vector`, hence the alias.
- using tuple_tag = vector_tag;
- }}}
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXT_BOOST_FUSION_TUPLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/boost/fusion/vector.hpp b/contrib/restricted/boost/boost/hana/ext/boost/fusion/vector.hpp
deleted file mode 100644
index 9a2a3a8c5d..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/boost/fusion/vector.hpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/*!
-@file
-Adapts `boost::fusion::vector` for use with Hana.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_BOOST_FUSION_VECTOR_HPP
-#define BOOST_HANA_EXT_BOOST_FUSION_VECTOR_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/ext/boost/fusion/detail/common.hpp>
-#include <boost/hana/fwd/at.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/drop_front.hpp>
-#include <boost/hana/fwd/length.hpp>
-
-#include <boost/fusion/algorithm/transformation/pop_front.hpp>
-#include <boost/fusion/container/generation/make_vector.hpp>
-#include <boost/fusion/container/vector.hpp>
-#include <boost/fusion/container/vector/convert.hpp>
-#include <boost/fusion/support/tag_of.hpp>
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-namespace boost { namespace fusion {
- //! @ingroup group-ext-fusion
- //! Adapter for Boost.Fusion vectors.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! A Fusion vector is a model of the `Sequence` concept, and all the
- //! concepts it refines. That makes it essentially the same as a Hana
- //! tuple, although the complexity of some operations might differ from
- //! that of a tuple.
- //!
- //! @include example/ext/boost/fusion/vector.cpp
- template <typename ...T>
- struct vector { };
-}}
-#endif
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace ext { namespace boost { namespace fusion {
- struct vector_tag;
- }}}
-
- template <typename T>
- struct tag_of<T, when<
- std::is_same<
- typename ::boost::fusion::traits::tag_of<T>::type,
- ::boost::fusion::traits::tag_of<
- ::boost::fusion::vector<>
- >::type
- >::value
- >> {
- using type = ext::boost::fusion::vector_tag;
- };
-
- namespace detail {
- template <>
- struct is_fusion_sequence<ext::boost::fusion::vector_tag> {
- static constexpr bool value = true;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // Iterable (the rest is in detail/common.hpp)
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct drop_front_impl<ext::boost::fusion::vector_tag> {
- template <std::size_t n, typename Xs, std::size_t ...i>
- static constexpr auto drop_front_helper(Xs&& xs, std::index_sequence<i...>) {
- return hana::make<ext::boost::fusion::vector_tag>(
- hana::at_c<n + i>(static_cast<Xs&&>(xs))...
- );
- }
-
- template <typename Xs, typename N>
- static constexpr auto apply(Xs&& xs, N const&) {
- constexpr std::size_t n = N::value;
- constexpr std::size_t len = decltype(hana::length(xs))::value;
- return drop_front_helper<n>(static_cast<Xs&&>(xs),
- std::make_index_sequence<(n < len ? len - n : 0)>{});
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Sequence
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct make_impl<ext::boost::fusion::vector_tag> {
- template <typename ...Xs>
- static constexpr auto apply(Xs&& ...xs) {
- return ::boost::fusion::make_vector(static_cast<Xs&&>(xs)...);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXT_BOOST_FUSION_VECTOR_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/boost/mpl.hpp b/contrib/restricted/boost/boost/hana/ext/boost/mpl.hpp
deleted file mode 100644
index 2188c83be2..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/boost/mpl.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/*!
-@file
-Includes all the adaptors for the Boost.MPL library.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_BOOST_MPL_HPP
-#define BOOST_HANA_EXT_BOOST_MPL_HPP
-
-//! @ingroup group-ext
-//! @defgroup group-ext-mpl Boost.MPL adapters
-//! Adapters for Boost.MPL containers.
-
-#include <boost/hana/ext/boost/mpl/integral_c.hpp>
-#include <boost/hana/ext/boost/mpl/list.hpp>
-#include <boost/hana/ext/boost/mpl/vector.hpp>
-
-#endif // !BOOST_HANA_EXT_BOOST_MPL_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/boost/mpl/integral_c.hpp b/contrib/restricted/boost/boost/hana/ext/boost/mpl/integral_c.hpp
deleted file mode 100644
index 68ddd18486..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/boost/mpl/integral_c.hpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/*!
-@file
-Adapts Boost.MPL IntegralConstants for use with Hana.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_BOOST_MPL_INTEGRAL_C_HPP
-#define BOOST_HANA_EXT_BOOST_MPL_INTEGRAL_C_HPP
-
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/fwd/core/to.hpp>
-
-#include <boost/mpl/integral_c.hpp>
-#include <boost/mpl/integral_c_tag.hpp>
-
-#include <type_traits>
-
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-namespace boost { namespace mpl {
- //! @ingroup group-ext-mpl
- //! Adapter for IntegralConstants from the Boost.MPL.
- //!
- //! Provided models
- //! ---------------
- //! 1. `Constant` and `IntegralConstant`\n
- //! A Boost.MPL IntegralConstant is a model of the `IntegralConstant`
- //! and `Constant` concepts just like `hana::integral_constant`s are.
- //! As a consequence, they are also implicitly a model of the concepts
- //! provided for all models of `Constant`.
- //! @include example/ext/boost/mpl/integral_c/integral_constant.cpp
- template <typename T, T v>
- struct integral_c { };
-}}
-#endif
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace ext { namespace boost { namespace mpl {
- template <typename T>
- struct integral_c_tag { using value_type = T; };
- }}}
-
- template <typename T>
- struct tag_of<T, when<
- std::is_same<
- typename T::tag,
- ::boost::mpl::integral_c_tag
- >::value
- >> {
- using type = ext::boost::mpl::integral_c_tag<
- typename hana::tag_of<typename T::value_type>::type
- >;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // IntegralConstant/Constant
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct IntegralConstant<ext::boost::mpl::integral_c_tag<T>> {
- static constexpr bool value = true;
- };
-
- template <typename T, typename C>
- struct to_impl<ext::boost::mpl::integral_c_tag<T>, C,
- when<hana::IntegralConstant<C>::value>
- > : embedding<is_embedded<typename C::value_type, T>::value> {
- template <typename N>
- static constexpr auto apply(N const&) {
- return ::boost::mpl::integral_c<T, N::value>{};
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXT_BOOST_MPL_INTEGRAL_C_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/boost/mpl/list.hpp b/contrib/restricted/boost/boost/hana/ext/boost/mpl/list.hpp
deleted file mode 100644
index 677b9a85bf..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/boost/mpl/list.hpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/*!
-@file
-Adapts `boost::mpl::list` for use with Hana.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_BOOST_MPL_LIST_HPP
-#define BOOST_HANA_EXT_BOOST_MPL_LIST_HPP
-
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/ext/boost/mpl/integral_c.hpp>
-#include <boost/hana/fwd/at.hpp>
-#include <boost/hana/fwd/core/to.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/drop_front.hpp>
-#include <boost/hana/fwd/equal.hpp>
-#include <boost/hana/fwd/is_empty.hpp>
-#include <boost/hana/fwd/less.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/type.hpp>
-#include <boost/hana/unpack.hpp>
-
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/empty.hpp>
-#include <boost/mpl/equal.hpp>
-#include <boost/mpl/list.hpp>
-#include <boost/mpl/sequence_tag.hpp>
-#include <boost/mpl/size.hpp>
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-namespace boost { namespace mpl {
- //! @ingroup group-ext-mpl
- //! Adapter for Boost.MPL lists.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! It is possible for MPL lists to model a couple of concepts.
- //! However, because they are only able to hold types, they lack
- //! the generality required to model concepts like `Functor`,
- //! `Sequence` and other related concepts.
- //!
- //! 1. `Comparable`\n
- //! Two MPL lists are equal if and only if they contain the same
- //! number of types, and if all those types are equal.
- //! @include example/ext/boost/mpl/list/comparable.cpp
- //!
- //! 2. `Foldable`\n
- //! Folding a MPL list is equivalent to folding it as a `Sequence`.
- //! @include example/ext/boost/mpl/list/foldable.cpp
- //!
- //! 3. `Iterable`\n
- //! Iterating over a MPL list is just iterating over each of the
- //! types it contains, as if it were a `Sequence`.
- //! @include example/ext/boost/mpl/list/iterable.cpp
- //!
- //! 4. `Searchable`\n
- //! A MPL list can be searched as if it were a tuple containing
- //! `hana::type`s.
- //! @include example/ext/boost/mpl/list/searchable.cpp
- //!
- //!
- //! Conversion from any `Foldable`
- //! ------------------------------
- //! A MPL list can be created from any `Foldable`. More precisely,
- //! for a `Foldable` `xs` whose linearization is `[x1, ..., xn]`,
- //! @code
- //! to<ext::boost::mpl::list_tag>(xs) == mpl::list<t1, ..., tn>{}
- //! @endcode
- //! where `tk` is the type of `xk`, or the type contained in `xk` if
- //! `xk` is a `hana::type`.
- //! @warning
- //! The limitations on the size of `mpl::list`s are inherited by
- //! this conversion utility, and hence trying to convert a `Foldable`
- //! containing more than [BOOST_MPL_LIMIT_LIST_SIZE][1] elements is
- //! an error.
- //! @include example/ext/boost/mpl/list/conversion.cpp
- //!
- //! [1]: http://www.boost.org/doc/libs/release/libs/mpl/doc/refmanual/limit-list-size.html
- template <typename ...T>
- struct list { };
-}}
-#endif
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace ext { namespace boost { namespace mpl {
- using list_tag = ::boost::mpl::sequence_tag< ::boost::mpl::list<>>::type;
- }}}
-
- template <typename T>
- struct tag_of<T, when<
- std::is_same<
- typename ::boost::mpl::sequence_tag<T>::type,
- ::boost::mpl::sequence_tag< ::boost::mpl::list<>>::type
- >::value
- >> {
- using type = ext::boost::mpl::list_tag;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Comparable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct equal_impl<ext::boost::mpl::list_tag, ext::boost::mpl::list_tag> {
- template <typename Xs, typename Ys>
- static constexpr auto apply(Xs const&, Ys const&) {
- return typename ::boost::mpl::equal<Xs, Ys>::type{};
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Foldable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct length_impl<ext::boost::mpl::list_tag> {
- template <typename Xs>
- static constexpr auto apply(Xs const&) {
- return hana::size_c< ::boost::mpl::size<Xs>::type::value>;
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Iterable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct at_impl<ext::boost::mpl::list_tag> {
- template <typename Ts, typename N>
- static constexpr auto apply(Ts const&, N const&) {
- constexpr std::size_t n = N::value;
- using T = typename ::boost::mpl::at_c<Ts, n>::type;
- return hana::type_c<T>;
- }
- };
-
- template <>
- struct drop_front_impl<ext::boost::mpl::list_tag> {
- template <std::size_t n, typename Xs, std::size_t ...i>
- static constexpr auto drop_front_helper(Xs const&, std::index_sequence<i...>) {
- return boost::mpl::list<
- typename boost::mpl::at_c<Xs, n + i>::type...
- >{};
- }
-
- template <typename Xs, typename N>
- static constexpr auto apply(Xs const& xs, N const&) {
- constexpr std::size_t n = N::value;
- constexpr std::size_t len = decltype(hana::length(xs))::value;
- return drop_front_helper<n>(xs,
- std::make_index_sequence<(n < len ? len - n : 0)>{});
- }
- };
-
- template <>
- struct is_empty_impl<ext::boost::mpl::list_tag> {
- template <typename Xs>
- static constexpr auto apply(Xs const&)
- { return typename ::boost::mpl::empty<Xs>::type{}; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Conversion from a Foldable
- //////////////////////////////////////////////////////////////////////////
- template <typename F>
- struct to_impl<ext::boost::mpl::list_tag, F, when<hana::Foldable<F>::value>> {
- template <typename Xs>
- static constexpr decltype(auto) apply(Xs&& xs) {
- auto list_type = hana::unpack(static_cast<Xs&&>(xs),
- hana::template_<::boost::mpl::list>);
- return typename decltype(list_type)::type{};
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXT_BOOST_MPL_LIST_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/boost/mpl/vector.hpp b/contrib/restricted/boost/boost/hana/ext/boost/mpl/vector.hpp
deleted file mode 100644
index 29e9972b5d..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/boost/mpl/vector.hpp
+++ /dev/null
@@ -1,185 +0,0 @@
-/*!
-@file
-Adapts `boost::mpl::vector` for use with Hana.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_BOOST_MPL_VECTOR_HPP
-#define BOOST_HANA_EXT_BOOST_MPL_VECTOR_HPP
-
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/ext/boost/mpl/integral_c.hpp>
-#include <boost/hana/fwd/at.hpp>
-#include <boost/hana/fwd/core/to.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/drop_front.hpp>
-#include <boost/hana/fwd/equal.hpp>
-#include <boost/hana/fwd/is_empty.hpp>
-#include <boost/hana/fwd/less.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/type.hpp>
-#include <boost/hana/unpack.hpp>
-
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/empty.hpp>
-#include <boost/mpl/equal.hpp>
-#include <boost/mpl/sequence_tag.hpp>
-#include <boost/mpl/size.hpp>
-#include <boost/mpl/vector.hpp>
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-namespace boost { namespace mpl {
- //! @ingroup group-ext-mpl
- //! Adapter for Boost.MPL vectors.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! It is possible for MPL vectors to model a couple of concepts.
- //! However, because they are only able to hold types, they lack
- //! the generality required to model concepts like `Functor`,
- //! `Sequence` and other related concepts.
- //!
- //! 1. `Comparable`\n
- //! Two MPL vectors are equal if and only if they contain the same
- //! number of types, and if all those types are equal.
- //! @include example/ext/boost/mpl/vector/comparable.cpp
- //!
- //! 2. `Foldable`\n
- //! Folding a MPL vector is equivalent to folding it as a `Sequence`.
- //! @include example/ext/boost/mpl/vector/foldable.cpp
- //!
- //! 3. `Iterable`\n
- //! Iterating over a MPL vector is just iterating over each of the
- //! types it contains, as if it were a `Sequence`.
- //! @include example/ext/boost/mpl/vector/iterable.cpp
- //!
- //! 4. `Searchable`\n
- //! A MPL vector can be searched as if it were a tuple containing
- //! `hana::type`s.
- //! @include example/ext/boost/mpl/vector/searchable.cpp
- //!
- //!
- //! Conversion from any `Foldable`
- //! ------------------------------
- //! A MPL vector can be created from any `Foldable`. More precisely,
- //! for a `Foldable` `xs` whose linearization is `[x1, ..., xn]`,
- //! @code
- //! to<ext::boost::mpl::vector_tag>(xs) == mpl::vector<t1, ..., tn>
- //! @endcode
- //! where `tk` is the type of `xk`, or the type contained in `xk` if
- //! `xk` is a `hana::type`.
- //! @warning
- //! The limitations on the size of `mpl::vector`s are inherited by
- //! this conversion utility, and hence trying to convert a `Foldable`
- //! containing more than [BOOST_MPL_LIMIT_VECTOR_SIZE][1] elements
- //! is an error.
- //! @include example/ext/boost/mpl/vector/conversion.cpp
- //!
- //! [1]: http://www.boost.org/doc/libs/release/libs/mpl/doc/refmanual/limit-vector-size.html
- template <typename ...T>
- struct vector { };
-}}
-#endif
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace ext { namespace boost { namespace mpl {
- using vector_tag = ::boost::mpl::sequence_tag< ::boost::mpl::vector<>>::type;
- }}}
-
- template <typename T>
- struct tag_of<T, when<
- std::is_same<
- typename ::boost::mpl::sequence_tag<T>::type,
- ::boost::mpl::sequence_tag< ::boost::mpl::vector<>>::type
- >::value
- >> {
- using type = ext::boost::mpl::vector_tag;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Comparable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct equal_impl<ext::boost::mpl::vector_tag, ext::boost::mpl::vector_tag> {
- template <typename Xs, typename Ys>
- static constexpr auto apply(Xs const&, Ys const&) {
- return typename ::boost::mpl::equal<Xs, Ys>::type{};
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Foldable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct length_impl<ext::boost::mpl::vector_tag> {
- template <typename Xs>
- static constexpr auto apply(Xs const&) {
- return hana::size_c< ::boost::mpl::size<Xs>::type::value>;
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Iterable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct at_impl<ext::boost::mpl::vector_tag> {
- template <typename Ts, typename N>
- static constexpr auto apply(Ts const&, N const&) {
- constexpr std::size_t n = N::value;
- using T = typename ::boost::mpl::at_c<Ts, n>::type;
- return hana::type_c<T>;
- }
- };
-
- template <>
- struct drop_front_impl<ext::boost::mpl::vector_tag> {
- template <std::size_t n, typename Xs, std::size_t ...i>
- static constexpr auto drop_front_helper(Xs const&, std::index_sequence<i...>) {
- return boost::mpl::vector<
- typename boost::mpl::at_c<Xs, n + i>::type...
- >{};
- }
-
- template <typename Xs, typename N>
- static constexpr auto apply(Xs const& xs, N const&) {
- constexpr std::size_t n = N::value;
- constexpr std::size_t len = decltype(hana::length(xs))::value;
- return drop_front_helper<n>(xs,
- std::make_index_sequence<(n < len ? len - n : 0)>{});
- }
- };
-
- template <>
- struct is_empty_impl<ext::boost::mpl::vector_tag> {
- template <typename xs>
- static constexpr auto apply(xs)
- { return typename ::boost::mpl::empty<xs>::type{}; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Conversion from a Foldable
- //////////////////////////////////////////////////////////////////////////
- template <typename F>
- struct to_impl<ext::boost::mpl::vector_tag, F, when<hana::Foldable<F>::value>> {
- template <typename Xs>
- static constexpr auto apply(Xs const& xs) {
- auto vector_type = hana::unpack(xs, hana::template_<boost::mpl::vector>);
- return typename decltype(vector_type)::type{};
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXT_BOOST_MPL_VECTOR_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/boost/tuple.hpp b/contrib/restricted/boost/boost/hana/ext/boost/tuple.hpp
deleted file mode 100644
index 581c973bda..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/boost/tuple.hpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/*!
-@file
-Adapts `boost::tuple` for use with Hana.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_BOOST_TUPLE_HPP
-#define BOOST_HANA_EXT_BOOST_TUPLE_HPP
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/fwd/at.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/drop_front.hpp>
-#include <boost/hana/fwd/is_empty.hpp>
-#include <boost/hana/fwd/length.hpp>
-#include <boost/hana/integral_constant.hpp>
-
-#include <boost/tuple/tuple.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-namespace boost {
- //! @ingroup group-ext-boost
- //! Adapter for `boost::tuple`s.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! A `boost::tuple` is a model of the `Sequence` concept, and all the
- //! concepts it refines. That makes it essentially the same as a Hana
- //! tuple, although the complexity of some operations might differ from
- //! that of Hana's tuple.
- //!
- //! @include example/ext/boost/tuple.cpp
- template <typename ...T>
- struct tuple { };
-}
-#endif
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace ext { namespace boost { struct tuple_tag; }}
-
- template <typename ...Xs>
- struct tag_of<boost::tuple<Xs...>> {
- using type = ext::boost::tuple_tag;
- };
-
- template <typename H, typename T>
- struct tag_of<boost::tuples::cons<H, T>> {
- using type = ext::boost::tuple_tag;
- };
-
- template <>
- struct tag_of<boost::tuples::null_type> {
- using type = ext::boost::tuple_tag;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Iterable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct at_impl<ext::boost::tuple_tag> {
- template <typename Xs, typename N>
- static constexpr decltype(auto) apply(Xs&& xs, N const&) {
- constexpr std::size_t n = N::value;
- return static_cast<Xs&&>(xs).template get<n>();
- }
- };
-
- template <>
- struct drop_front_impl<ext::boost::tuple_tag> {
- template <std::size_t n, typename Xs, std::size_t ...i>
- static constexpr auto drop_front_helper(Xs&& xs, std::index_sequence<i...>) {
- return hana::make<ext::boost::tuple_tag>(
- hana::at_c<n + i>(static_cast<Xs&&>(xs))...
- );
- }
-
- template <typename Xs, typename N>
- static constexpr auto apply(Xs&& xs, N const&) {
- constexpr std::size_t n = N::value;
- constexpr std::size_t len = decltype(hana::length(xs))::value;
- return drop_front_helper<n>(static_cast<Xs&&>(xs),
- std::make_index_sequence<(n < len ? len - n : 0)>{});
- }
- };
-
- template <>
- struct is_empty_impl<ext::boost::tuple_tag> {
- static constexpr auto apply(boost::tuples::null_type const&)
- { return hana::true_c; }
-
- template <typename H, typename T>
- static constexpr auto apply(boost::tuples::cons<H, T> const&)
- { return hana::false_c; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Foldable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct length_impl<ext::boost::tuple_tag> {
- template <typename Xs>
- static constexpr auto apply(Xs const&) {
- return hana::size_c<boost::tuples::length<Xs>::value>;
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Sequence
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct Sequence<ext::boost::tuple_tag> {
- static constexpr bool value = true;
- };
-
- template <>
- struct make_impl<ext::boost::tuple_tag> {
- template <typename ...Xs>
- static constexpr auto apply(Xs&& ...xs) {
- return boost::tuples::tuple<
- typename detail::decay<Xs>::type...
- >{static_cast<Xs&&>(xs)...};
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXT_BOOST_TUPLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/std.hpp b/contrib/restricted/boost/boost/hana/ext/std.hpp
deleted file mode 100644
index 988ce93241..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/std.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-/*!
-@file
-Includes all the adaptors for the standard library.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_STD_HPP
-#define BOOST_HANA_EXT_STD_HPP
-
-//! @ingroup group-ext
-//! @defgroup group-ext-std Standard library adapters
-//! Adapters for components in the standard library.
-
-#include <boost/hana/ext/std/array.hpp>
-#include <boost/hana/ext/std/integer_sequence.hpp>
-#include <boost/hana/ext/std/integral_constant.hpp>
-#include <boost/hana/ext/std/pair.hpp>
-#include <boost/hana/ext/std/ratio.hpp>
-#include <boost/hana/ext/std/tuple.hpp>
-#include <boost/hana/ext/std/vector.hpp>
-
-#endif // !BOOST_HANA_EXT_STD_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/std/array.hpp b/contrib/restricted/boost/boost/hana/ext/std/array.hpp
deleted file mode 100644
index 59bc49cf8d..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/std/array.hpp
+++ /dev/null
@@ -1,171 +0,0 @@
-/*!
-@file
-Adapts `std::array` for use with Hana.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_STD_ARRAY_HPP
-#define BOOST_HANA_EXT_STD_ARRAY_HPP
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/algorithm.hpp>
-#include <boost/hana/fwd/at.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/drop_front.hpp>
-#include <boost/hana/fwd/equal.hpp>
-#include <boost/hana/fwd/is_empty.hpp>
-#include <boost/hana/fwd/length.hpp>
-#include <boost/hana/fwd/less.hpp>
-#include <boost/hana/integral_constant.hpp>
-
-#include <array>
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-namespace std {
- //! @ingroup group-ext-std
- //! Adaptation of `std::array` for Hana.
- //!
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! 1. `Comparable`\n
- //! `std::array`s are compared as per `std::equal`, except that two arrays
- //! with different sizes compare unequal instead of triggering an error
- //! and the result of the comparison is `constexpr` if both arrays are
- //! `constexpr`.
- //! @include example/ext/std/array/comparable.cpp
- //!
- //! 2. `Orderable`\n
- //! `std::array`s are ordered with the usual lexicographical ordering,
- //! except that two arrays with different size can be ordered instead
- //! of triggering an error and the result of the comparison is `constexpr`
- //! if both arrays are `constexpr`.
- //! @include example/ext/std/array/orderable.cpp
- //!
- //! 3. `Foldable`\n
- //! Folding an array from the left is equivalent to calling
- //! `std::accumulate` on it, except it can be `constexpr`.
- //! @include example/ext/std/array/foldable.cpp
- //!
- //! 4. `Iterable`\n
- //! Iterating over a `std::array` is equivalent to iterating over it with
- //! a normal `for` loop.
- //! @include example/ext/std/array/iterable.cpp
- template <typename T, std::size_t N>
- struct array { };
-}
-#endif
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace ext { namespace std { struct array_tag; }}
-
- template <typename T, std::size_t N>
- struct tag_of<std::array<T, N>> {
- using type = ext::std::array_tag;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Foldable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct length_impl<ext::std::array_tag> {
- template <typename Xs>
- static constexpr auto apply(Xs const&) {
- return hana::size_c<std::tuple_size<Xs>::type::value>;
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Iterable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct at_impl<ext::std::array_tag> {
- template <typename Xs, typename N>
- static constexpr decltype(auto) apply(Xs&& xs, N const&) {
- constexpr std::size_t n = N::value;
- return std::get<n>(static_cast<Xs&&>(xs));
- }
- };
-
- template <>
- struct drop_front_impl<ext::std::array_tag> {
- template <std::size_t n, typename Xs, std::size_t ...i>
- static constexpr auto drop_front_helper(Xs&& xs, std::index_sequence<i...>) {
- using T = typename std::remove_reference<Xs>::type::value_type;
- return std::array<T, sizeof...(i)>{{static_cast<Xs&&>(xs)[n + i]...}};
- }
-
- template <typename Xs, typename N>
- static constexpr auto apply(Xs&& xs, N const&) {
- constexpr std::size_t n = N::value;
- constexpr std::size_t len = std::tuple_size<
- typename std::remove_cv<
- typename std::remove_reference<Xs>::type
- >::type
- >::value;
- return drop_front_helper<n>(static_cast<Xs&&>(xs),
- std::make_index_sequence<(n < len ? len - n : 0)>{});
- }
- };
-
- template <>
- struct is_empty_impl<ext::std::array_tag> {
- template <typename T, std::size_t N>
- static constexpr auto apply(std::array<T, N> const&) {
- return hana::bool_c<N == 0>;
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Comparable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct equal_impl<ext::std::array_tag, ext::std::array_tag> {
- template <typename T, std::size_t n, typename U>
- static constexpr bool apply(std::array<T, n> const& xs, std::array<U, n> const& ys)
- { return detail::equal(&xs[0], &xs[0] + n, &ys[0], &ys[0] + n); }
-
- template <typename T, typename U>
- static constexpr auto apply(std::array<T, 0> const&, std::array<U, 0> const&)
- { return hana::true_c; }
-
- template <typename T, std::size_t n, typename U, std::size_t m>
- static constexpr auto apply(std::array<T, n> const&, std::array<U, m> const&)
- { return hana::false_c; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Orderable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct less_impl<ext::std::array_tag, ext::std::array_tag> {
- template <typename T, std::size_t n, typename U, std::size_t m>
- static constexpr auto apply(std::array<T, n> const& xs, std::array<U, m> const& ys) {
- // This logic is more complex than it needs to be because we can't
- // use `.begin()` and `.end()`, which are not constexpr in C++14,
- // and because `&arr[0]` is UB when the array is empty.
- if (xs.empty()) {
- return !ys.empty();
- } else {
- if (ys.empty()) {
- return false;
- } else {
- return detail::lexicographical_compare(&xs[0], &xs[0] + n,
- &ys[0], &ys[0] + m);
- }
- }
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXT_STD_ARRAY_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/std/integer_sequence.hpp b/contrib/restricted/boost/boost/hana/ext/std/integer_sequence.hpp
deleted file mode 100644
index 83536a3102..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/std/integer_sequence.hpp
+++ /dev/null
@@ -1,140 +0,0 @@
-/*!
-@file
-Adapts `std::integer_sequence` for use with Hana.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_STD_INTEGER_SEQUENCE_HPP
-#define BOOST_HANA_EXT_STD_INTEGER_SEQUENCE_HPP
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/fast_and.hpp>
-#include <boost/hana/ext/std/integral_constant.hpp>
-#include <boost/hana/fwd/at.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/drop_front.hpp>
-#include <boost/hana/fwd/equal.hpp>
-#include <boost/hana/fwd/is_empty.hpp>
-#include <boost/hana/fwd/unpack.hpp>
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-namespace std {
- //! @ingroup group-ext-std
- //! Adaptation of `std::integer_sequence` for Hana.
- //!
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! 1. `Comparable`\n
- //! Two `std::integer_sequence`s are equal if and only if they have the
- //! same number of elements, and if corresponding elements compare equal.
- //! The types of the elements held in both `integer_sequence`s may be
- //! different, as long as they can be compared.
- //! @include example/ext/std/integer_sequence/comparable.cpp
- //!
- //! 2. `Foldable`\n
- //! Folding an `integer_sequence` is equivalent to folding a sequence of
- //! `std::integral_constant`s with the corresponding types.
- //! @include example/ext/std/integer_sequence/foldable.cpp
- //!
- //! 3. `Iterable`\n
- //! Iterating over an `integer_sequence` is equivalent to iterating over
- //! a sequence of the corresponding `std::integral_constant`s.
- //! @include example/ext/std/integer_sequence/iterable.cpp
- //!
- //! 4. `Searchable`\n
- //! Searching through an `integer_sequence` is equivalent to searching
- //! through the corresponding sequence of `std::integral_constant`s.
- //! @include example/ext/std/integer_sequence/searchable.cpp
- template <typename T, T ...v>
- struct integer_sequence { };
-}
-#endif
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace ext { namespace std { struct integer_sequence_tag; }}
-
- template <typename T, T ...v>
- struct tag_of<std::integer_sequence<T, v...>> {
- using type = ext::std::integer_sequence_tag;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Comparable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct equal_impl<ext::std::integer_sequence_tag, ext::std::integer_sequence_tag> {
- template <typename X, X ...xs, typename Y, Y ...ys>
- static constexpr hana::bool_<detail::fast_and<(xs == ys)...>::value>
- apply(std::integer_sequence<X, xs...> const&, std::integer_sequence<Y, ys...> const&)
- { return {}; }
-
- template <typename Xs, typename Ys>
- static constexpr hana::false_ apply(Xs const&, Ys const&, ...)
- { return {}; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Foldable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct unpack_impl<ext::std::integer_sequence_tag> {
- template <typename T, T ...v, typename F>
- static constexpr decltype(auto)
- apply(std::integer_sequence<T, v...> const&, F&& f) {
- return static_cast<F&&>(f)(std::integral_constant<T, v>{}...);
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Iterable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct at_impl<ext::std::integer_sequence_tag> {
- template <typename T, T ...v, typename N>
- static constexpr auto apply(std::integer_sequence<T, v...> const&, N const&) {
- constexpr std::size_t n = N::value;
- constexpr T values_[] = {v...};
- return std::integral_constant<T, values_[n]>{};
- }
- };
-
- template <>
- struct drop_front_impl<ext::std::integer_sequence_tag> {
- template <std::size_t n, typename T, T ...t, std::size_t ...i>
- static constexpr auto drop_front_helper(std::integer_sequence<T, t...>,
- std::index_sequence<i...>)
- {
- constexpr T ts[sizeof...(t)+1] = {t...}; // avoid 0-sized array
- return std::integer_sequence<T, ts[n + i]...>{};
- }
-
- template <typename T, T ...t, typename N>
- static constexpr auto apply(std::integer_sequence<T, t...> ts, N const&) {
- constexpr std::size_t n = N::value;
- constexpr std::size_t len = sizeof...(t);
- return drop_front_helper<n>(ts,
- std::make_index_sequence<(n < len ? len - n : 0)>{});
- }
- };
-
- template <>
- struct is_empty_impl<ext::std::integer_sequence_tag> {
- template <typename T, T ...xs>
- static constexpr auto apply(std::integer_sequence<T, xs...> const&)
- { return hana::bool_c<sizeof...(xs) == 0>; }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXT_STD_INTEGER_SEQUENCE_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/std/integral_constant.hpp b/contrib/restricted/boost/boost/hana/ext/std/integral_constant.hpp
deleted file mode 100644
index f949a66481..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/std/integral_constant.hpp
+++ /dev/null
@@ -1,96 +0,0 @@
-/*!
-@file
-Adapts `std::integral_constant` for use with Hana.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_STD_INTEGRAL_CONSTANT_HPP
-#define BOOST_HANA_EXT_STD_INTEGRAL_CONSTANT_HPP
-
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/fwd/core/to.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/integral_constant.hpp>
-
-#include <type_traits>
-
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-namespace std {
- //! @ingroup group-ext-std
- //! Adapter for `std::integral_constant`s.
- //!
- //! Provided models
- //! ---------------
- //! 1. `Constant` and `IntegralConstant`\n
- //! A `std::integral_constant` is a model of the `IntegralConstant` and
- //! `Constant` concepts, just like `hana::integral_constant`s are. As a
- //! consequence, they are also implicitly a model of the concepts provided
- //! for all models of `Constant`.
- //! @include example/ext/std/integral_constant.cpp
- template <typename T, T v>
- struct integral_constant { };
-}
-#endif
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace ext { namespace std {
- template <typename T>
- struct integral_constant_tag { using value_type = T; };
- }}
-
- namespace detail {
- template <typename T, T v>
- constexpr bool
- is_std_integral_constant(std::integral_constant<T, v>*)
- { return true; }
-
- constexpr bool is_std_integral_constant(...)
- { return false; }
-
-
- template <typename T, T v>
- constexpr bool
- is_hana_integral_constant(hana::integral_constant<T, v>*)
- { return true; }
-
- constexpr bool is_hana_integral_constant(...)
- { return false; }
- }
-
- template <typename T>
- struct tag_of<T, when<
- detail::is_std_integral_constant((T*)0) &&
- !detail::is_hana_integral_constant((T*)0)
- >> {
- using type = ext::std::integral_constant_tag<
- typename hana::tag_of<typename T::value_type>::type
- >;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Constant/IntegralConstant
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct IntegralConstant<ext::std::integral_constant_tag<T>> {
- static constexpr bool value = true;
- };
-
- template <typename T, typename C>
- struct to_impl<ext::std::integral_constant_tag<T>, C, when<
- hana::IntegralConstant<C>::value
- >> : embedding<is_embedded<typename C::value_type, T>::value> {
- template <typename N>
- static constexpr auto apply(N const&) {
- return std::integral_constant<T, N::value>{};
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXT_STD_INTEGRAL_CONSTANT_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/std/pair.hpp b/contrib/restricted/boost/boost/hana/ext/std/pair.hpp
deleted file mode 100644
index a2f429a642..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/std/pair.hpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/*!
-@file
-Adapts `std::pair` for use with Hana.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_STD_PAIR_HPP
-#define BOOST_HANA_EXT_STD_PAIR_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/first.hpp>
-#include <boost/hana/fwd/second.hpp>
-
-#include <utility>
-
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-namespace std {
- //! @ingroup group-ext-std
- //! Adaptation of `std::pair` for Hana.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! A `std::pair` models exactly the same concepts as a `hana::pair`.
- //! Please refer to the documentation of `hana::pair` for details.
- //!
- //! @include example/ext/std/pair.cpp
- template <typename First, typename Second>
- struct pair { };
-}
-#endif
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace ext { namespace std { struct pair_tag; }}
-
- template <typename First, typename Second>
- struct tag_of<std::pair<First, Second>> {
- using type = ext::std::pair_tag;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Product
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct make_impl<ext::std::pair_tag> {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- return std::make_pair(static_cast<X&&>(x),
- static_cast<Y&&>(y));
- }
- };
-
- template <>
- struct first_impl<ext::std::pair_tag> {
- template <typename T, typename U>
- static constexpr T const& apply(std::pair<T, U> const& p)
- { return p.first; }
-
- template <typename T, typename U>
- static constexpr T& apply(std::pair<T, U>& p)
- { return p.first; }
-
- template <typename T, typename U>
- static constexpr T&& apply(std::pair<T, U>&& p)
- { return static_cast<T&&>(p.first); }
- };
-
- template <>
- struct second_impl<ext::std::pair_tag> {
- template <typename T, typename U>
- static constexpr U const& apply(std::pair<T, U> const& p)
- { return p.second; }
-
- template <typename T, typename U>
- static constexpr U& apply(std::pair<T, U>& p)
- { return p.second; }
-
- template <typename T, typename U>
- static constexpr U&& apply(std::pair<T, U>&& p)
- { return static_cast<U&&>(p.second); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXT_STD_PAIR_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/std/ratio.hpp b/contrib/restricted/boost/boost/hana/ext/std/ratio.hpp
deleted file mode 100644
index bf25632f7d..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/std/ratio.hpp
+++ /dev/null
@@ -1,164 +0,0 @@
-/*!
-@file
-Adapts `std::ratio` for use with Hana.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_STD_RATIO_HPP
-#define BOOST_HANA_EXT_STD_RATIO_HPP
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/fwd/core/to.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/div.hpp>
-#include <boost/hana/fwd/equal.hpp>
-#include <boost/hana/fwd/less.hpp>
-#include <boost/hana/fwd/minus.hpp>
-#include <boost/hana/fwd/mod.hpp>
-#include <boost/hana/fwd/mult.hpp>
-#include <boost/hana/fwd/one.hpp>
-#include <boost/hana/fwd/plus.hpp>
-#include <boost/hana/fwd/zero.hpp>
-
-#include <cstdint>
-#include <ratio>
-#include <type_traits>
-
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-namespace std {
- //! @ingroup group-ext-std
- //! Adaptation of `std::ratio` for Hana.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! 1. `Comparable`\n
- //! `std::ratio`s are compared for equality using `std::ratio_equal`.
- //! @include example/ext/std/ratio/comparable.cpp
- //!
- //! 2. `Orderable`\n
- //! `std::ratio`s are ordered using `std::ratio_less`.
- //! @include example/ext/std/ratio/orderable.cpp
- //!
- //! 3. `Monoid`, `Group`, `Ring`, and `EuclideanRing`\n
- //! `std::ratio`s are added, subtracted, multiplied and divided using
- //! `std::ratio_add`, `std::ratio_subtract`, `std::ratio_multiply` and
- //! `std::ratio_divide`, respectively. Furthermore, the neutral element
- //! for the additive operation is `std::ratio<0, 1>{}`, and the neutral
- //! element for the multiplicative operation is `std::ratio<1, 1>{}`.
- //! @include example/ext/std/ratio/arithmetic.cpp
- template <std::intmax_t Num, std::intmax_t Denom>
- class ratio { };
-}
-#endif
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace ext { namespace std { struct ratio_tag; }}
-
- template <std::intmax_t num, std::intmax_t den>
- struct tag_of<std::ratio<num, den>> {
- using type = ext::std::ratio_tag;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Conversion from IntegralConstants
- //////////////////////////////////////////////////////////////////////////
- template <typename C>
- struct to_impl<ext::std::ratio_tag, C, when<
- hana::IntegralConstant<C>::value
- >> {
- template <typename N>
- static constexpr auto apply(N const&) {
- return std::ratio<N::value>{};
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Comparable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct equal_impl<ext::std::ratio_tag, ext::std::ratio_tag> {
- template <typename R1, typename R2>
- static constexpr auto apply(R1 const&, R2 const&)
- { return hana::bool_c<std::ratio_equal<R1, R2>::value>; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Orderable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct less_impl<ext::std::ratio_tag, ext::std::ratio_tag> {
- template <typename R1, typename R2>
- static constexpr auto apply(R1 const&, R2 const&)
- { return hana::bool_c<std::ratio_less<R1, R2>::value>; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Monoid
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct plus_impl<ext::std::ratio_tag, ext::std::ratio_tag> {
- template <typename R1, typename R2>
- static constexpr std::ratio_add<R1, R2> apply(R1 const&, R2 const&)
- { return {}; }
- };
-
- template <>
- struct zero_impl<ext::std::ratio_tag> {
- static constexpr std::ratio<0> apply()
- { return {}; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Group
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct minus_impl<ext::std::ratio_tag, ext::std::ratio_tag> {
- template <typename R1, typename R2>
- static constexpr std::ratio_subtract<R1, R2> apply(R1 const&, R2 const&)
- { return {}; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Ring
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct mult_impl<ext::std::ratio_tag, ext::std::ratio_tag> {
- template <typename R1, typename R2>
- static constexpr std::ratio_multiply<R1, R2> apply(R1 const&, R2 const&)
- { return {}; }
- };
-
- template <>
- struct one_impl<ext::std::ratio_tag> {
- static constexpr std::ratio<1> apply()
- { return {}; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // EuclideanRing
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct div_impl<ext::std::ratio_tag, ext::std::ratio_tag> {
- template <typename R1, typename R2>
- static constexpr std::ratio_divide<R1, R2> apply(R1 const&, R2 const&)
- { return {}; }
- };
-
- template <>
- struct mod_impl<ext::std::ratio_tag, ext::std::ratio_tag> {
- template <typename R1, typename R2>
- static constexpr std::ratio<0> apply(R1 const&, R2 const&)
- { return {}; }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXT_STD_RATIO_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/std/tuple.hpp b/contrib/restricted/boost/boost/hana/ext/std/tuple.hpp
deleted file mode 100644
index 53f8909325..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/std/tuple.hpp
+++ /dev/null
@@ -1,184 +0,0 @@
-/*!
-@file
-Adapts `std::tuple` for use with Hana.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_STD_TUPLE_HPP
-#define BOOST_HANA_EXT_STD_TUPLE_HPP
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/fwd/at.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/drop_front.hpp>
-#include <boost/hana/fwd/empty.hpp>
-#include <boost/hana/fwd/flatten.hpp>
-#include <boost/hana/fwd/front.hpp>
-#include <boost/hana/fwd/is_empty.hpp>
-#include <boost/hana/fwd/length.hpp>
-#include <boost/hana/fwd/lift.hpp>
-#include <boost/hana/integral_constant.hpp>
-
-#include <cstddef>
-#include <tuple>
-#include <type_traits>
-#include <utility>
-
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-namespace std {
- //! @ingroup group-ext-std
- //! Adapter for `std::tuple`s.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! A `std::tuple` is a model of the `Sequence` concept, and all the
- //! concepts it refines. That makes it essentially the same as a Hana
- //! tuple, although the complexity of some operations might differ from
- //! that of Hana's tuple.
- //!
- //! @include example/ext/std/tuple.cpp
- template <typename ...T>
- struct tuple { };
-}
-#endif
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace ext { namespace std { struct tuple_tag; }}
-
- template <typename ...Xs>
- struct tag_of<std::tuple<Xs...>> {
- using type = ext::std::tuple_tag;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // make
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct make_impl<ext::std::tuple_tag> {
- template <typename ...Xs>
- static constexpr decltype(auto) apply(Xs&& ...xs) {
- return std::make_tuple(static_cast<Xs&&>(xs)...);
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Applicative
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct lift_impl<ext::std::tuple_tag> {
- template <typename X>
- static constexpr auto apply(X&& x) {
- return std::tuple<typename detail::decay<X>::type>{
- static_cast<X&&>(x)};
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Monad
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct flatten_impl<ext::std::tuple_tag> {
- template <typename Xs, std::size_t ...i>
- static constexpr decltype(auto)
- flatten_helper(Xs&& xs, std::index_sequence<i...>) {
-#if defined(BOOST_HANA_CONFIG_LIBCPP_HAS_BUG_22806)
- return std::tuple_cat(std::get<i>(xs)...);
-#else
- return std::tuple_cat(std::get<i>(static_cast<Xs&&>(xs))...);
-#endif
- }
-
- template <typename Xs>
- static constexpr decltype(auto) apply(Xs&& xs) {
- using Raw = typename std::remove_reference<Xs>::type;
- constexpr std::size_t Length = std::tuple_size<Raw>::value;
- return flatten_helper(static_cast<Xs&&>(xs),
- std::make_index_sequence<Length>{});
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // MonadPlus
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct empty_impl<ext::std::tuple_tag> {
- static constexpr auto apply()
- { return std::tuple<>{}; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Iterable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct front_impl<ext::std::tuple_tag> {
- template <typename Xs>
- static constexpr decltype(auto) apply(Xs&& xs) {
- return std::get<0>(static_cast<Xs&&>(xs));
- }
- };
-
- template <>
- struct drop_front_impl<ext::std::tuple_tag> {
- template <std::size_t n, typename Xs, std::size_t ...i>
- static constexpr auto drop_front_helper(Xs&& xs, std::index_sequence<i...>) {
- return std::make_tuple(
- hana::at_c<n + i>(static_cast<Xs&&>(xs))...
- );
- }
-
- template <typename Xs, typename N>
- static constexpr auto apply(Xs&& xs, N const&) {
- using Raw = typename std::remove_reference<Xs>::type;
- constexpr std::size_t n = N::value;
- constexpr auto len = std::tuple_size<Raw>::value;
- return drop_front_helper<n>(static_cast<Xs&&>(xs),
- std::make_index_sequence<(n < len ? len - n : 0)>{});
- }
- };
-
- template <>
- struct is_empty_impl<ext::std::tuple_tag> {
- template <typename ...Xs>
- static constexpr auto apply(std::tuple<Xs...> const&)
- { return hana::bool_c<sizeof...(Xs) == 0>; }
- };
-
- template <>
- struct at_impl<ext::std::tuple_tag> {
- template <typename Xs, typename N>
- static constexpr decltype(auto) apply(Xs&& xs, N const&) {
- constexpr std::size_t index = N::value;
- return std::get<index>(static_cast<Xs&&>(xs));
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Foldable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct length_impl<ext::std::tuple_tag> {
- template <typename ...Xs>
- static constexpr auto apply(std::tuple<Xs...> const&) {
- return hana::size_c<sizeof...(Xs)>;
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Sequence
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct Sequence<ext::std::tuple_tag> {
- static constexpr bool value = true;
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXT_STD_TUPLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/ext/std/vector.hpp b/contrib/restricted/boost/boost/hana/ext/std/vector.hpp
deleted file mode 100644
index d286d8f9a8..0000000000
--- a/contrib/restricted/boost/boost/hana/ext/std/vector.hpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/*!
-@file
-Adapts `std::vector` for use with Hana.
-
-@copyright Louis Dionne 2013-2017
-@copyright Gonzalo Brito Gadeschi 2015
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXT_STD_VECTOR_HPP
-#define BOOST_HANA_EXT_STD_VECTOR_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/equal.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/less.hpp>
-
-#include <algorithm>
-#include <iterator>
-#include <memory>
-#include <type_traits>
-#include <utility>
-#include <vector>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace ext { namespace std { struct vector_tag; }}
-
- template <typename T, typename Allocator>
- struct tag_of<std::vector<T, Allocator>> {
- using type = ext::std::vector_tag;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Comparable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct equal_impl<ext::std::vector_tag, ext::std::vector_tag> {
- template <typename T1, typename A1, typename T2, typename A2>
- static bool apply(std::vector<T1, A1> const& v1,
- std::vector<T2, A2> const& v2)
- {
- return std::equal(begin(v1), end(v1),
- begin(v2), end(v2),
- hana::equal);
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Orderable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct less_impl<ext::std::vector_tag, ext::std::vector_tag> {
- template <typename T1, typename A1, typename T2, typename A2>
- static bool apply(std::vector<T1, A1> const& v1,
- std::vector<T2, A2> const& v2)
- {
- return std::lexicographical_compare(begin(v1), end(v1),
- begin(v2), end(v2),
- hana::less);
- }
- };
-
-#if 0
- //////////////////////////////////////////////////////////////////////////
- // Functor
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct transform_impl<ext::std::vector_tag> {
- template <typename V, typename F>
- static auto apply(V&& v, F&& f) {
- using U = std::remove_cv_t<std::remove_reference_t<
- decltype(f(*v.begin()))
- >>;
- using Alloc = typename std::remove_reference_t<V>::allocator_type;
- using NewAlloc = typename std::allocator_traits<Alloc>::
- template rebind_alloc<U>;
- std::vector<U, NewAlloc> result; result.reserve(v.size());
-
- std::transform(begin(v), end(v),
- std::back_inserter(result), std::forward<F>(f));
- return result;
- }
-
- template <typename T, typename Alloc, typename F>
- static auto apply(std::vector<T, Alloc>&& v, F&& f)
- -> std::enable_if_t<
- std::is_same<
- T,
- std::remove_cv_t<std::remove_reference_t<
- decltype(f(*v.begin()))
- >>
- >{}
- , std::vector<T, Alloc>
- >
- {
- // If we receive a rvalue and the function returns elements of
- // the same type, we modify the vector in-place instead of
- // returning a new one.
- std::transform(std::make_move_iterator(begin(v)),
- std::make_move_iterator(end(v)),
- begin(v), std::forward<F>(f));
- return std::move(v);
- }
- };
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXT_STD_VECTOR_HPP
diff --git a/contrib/restricted/boost/boost/hana/extend.hpp b/contrib/restricted/boost/boost/hana/extend.hpp
deleted file mode 100644
index 466e74e777..0000000000
--- a/contrib/restricted/boost/boost/hana/extend.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*!
-@file
-Defines `boost::hana::extend`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXTEND_HPP
-#define BOOST_HANA_EXTEND_HPP
-
-#include <boost/hana/fwd/extend.hpp>
-
-#include <boost/hana/concept/comonad.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/duplicate.hpp>
-#include <boost/hana/transform.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename W_, typename F>
- constexpr decltype(auto) extend_t::operator()(W_&& w, F&& f) const {
- using W = typename hana::tag_of<W_>::type;
- using Extend = BOOST_HANA_DISPATCH_IF(extend_impl<W>,
- hana::Comonad<W>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Comonad<W>::value,
- "hana::extend(w, f) requires 'w' to be a Comonad");
- #endif
-
- return Extend::apply(static_cast<W_&&>(w), static_cast<F&&>(f));
- }
- //! @endcond
-
- template <typename W, bool condition>
- struct extend_impl<W, when<condition>> : default_ {
- template <typename X, typename F>
- static constexpr decltype(auto) apply(X&& x, F&& f) {
- return hana::transform(hana::duplicate(static_cast<X&&>(x)),
- static_cast<F&&>(f));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXTEND_HPP
diff --git a/contrib/restricted/boost/boost/hana/extract.hpp b/contrib/restricted/boost/boost/hana/extract.hpp
deleted file mode 100644
index a9cd58624c..0000000000
--- a/contrib/restricted/boost/boost/hana/extract.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*!
-@file
-Defines `boost::hana::extract`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_EXTRACT_HPP
-#define BOOST_HANA_EXTRACT_HPP
-
-#include <boost/hana/fwd/extract.hpp>
-
-#include <boost/hana/concept/comonad.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename W_>
- constexpr decltype(auto) extract_t::operator()(W_&& w) const {
- using W = typename hana::tag_of<W_>::type;
- using Extract = BOOST_HANA_DISPATCH_IF(extract_impl<W>,
- hana::Comonad<W>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Comonad<W>::value,
- "hana::extract(w) requires 'w' to be a Comonad");
- #endif
-
- return Extract::apply(static_cast<W_&&>(w));
- }
- //! @endcond
-
- template <typename W, bool condition>
- struct extract_impl<W, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...args) = delete;
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_EXTRACT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fill.hpp b/contrib/restricted/boost/boost/hana/fill.hpp
deleted file mode 100644
index de82ac9b8e..0000000000
--- a/contrib/restricted/boost/boost/hana/fill.hpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/*!
-@file
-Defines `boost::hana::fill`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FILL_HPP
-#define BOOST_HANA_FILL_HPP
-
-#include <boost/hana/fwd/fill.hpp>
-
-#include <boost/hana/concept/functor.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/functional/always.hpp>
-#include <boost/hana/transform.hpp>
-#include <boost/hana/unpack.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Value>
- constexpr auto fill_t::operator()(Xs&& xs, Value&& value) const {
- using S = typename hana::tag_of<Xs>::type;
- using Fill = BOOST_HANA_DISPATCH_IF(fill_impl<S>,
- hana::Functor<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Functor<S>::value,
- "hana::fill(xs, value) requires 'xs' to be a Functor");
- #endif
-
- return Fill::apply(static_cast<Xs&&>(xs),
- static_cast<Value&&>(value));
- }
- //! @endcond
-
- template <typename Fun, bool condition>
- struct fill_impl<Fun, when<condition>> : default_ {
- template <typename Xs, typename Value>
- static constexpr auto apply(Xs&& xs, Value&& v) {
- return hana::transform(static_cast<Xs&&>(xs),
- hana::always(static_cast<Value&&>(v))
- );
- }
- };
-
- template <typename S>
- struct fill_impl<S, when<Sequence<S>::value>> {
- //! @cond
- template <typename V>
- struct filler {
- V const& v;
- template <typename ...Xs>
- constexpr auto operator()(Xs const& ...xs) const {
- return hana::make<S>(((void)xs, v)...);
- }
- };
- //! @endcond
-
- template <typename Xs, typename V>
- static constexpr auto apply(Xs const& xs, V const& v) {
- return hana::unpack(xs, filler<V>{v});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FILL_HPP
diff --git a/contrib/restricted/boost/boost/hana/filter.hpp b/contrib/restricted/boost/boost/hana/filter.hpp
deleted file mode 100644
index e8f7d51428..0000000000
--- a/contrib/restricted/boost/boost/hana/filter.hpp
+++ /dev/null
@@ -1,135 +0,0 @@
-/*!
-@file
-Defines `boost::hana::filter`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FILTER_HPP
-#define BOOST_HANA_FILTER_HPP
-
-#include <boost/hana/fwd/filter.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/bool.hpp>
-#include <boost/hana/chain.hpp>
-#include <boost/hana/concept/monad_plus.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/detail/algorithm.hpp>
-#include <boost/hana/detail/array.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/empty.hpp>
-#include <boost/hana/lift.hpp>
-#include <boost/hana/unpack.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Pred>
- constexpr auto filter_t::operator()(Xs&& xs, Pred&& pred) const {
- using M = typename hana::tag_of<Xs>::type;
- using Filter = BOOST_HANA_DISPATCH_IF(filter_impl<M>,
- hana::MonadPlus<M>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::MonadPlus<M>::value,
- "hana::filter(xs, pred) requires 'xs' to be a MonadPlus");
- #endif
-
- return Filter::apply(static_cast<Xs&&>(xs),
- static_cast<Pred&&>(pred));
- }
- //! @endcond
-
- namespace detail {
- template <typename Pred, typename M>
- struct lift_or_empty {
- template <typename X>
- static constexpr auto helper(X&& x, hana::true_)
- { return hana::lift<M>(static_cast<X&&>(x)); }
-
- template <typename X>
- static constexpr auto helper(X&&, hana::false_)
- { return hana::empty<M>(); }
-
- template <typename X>
- constexpr auto operator()(X&& x) const {
- constexpr bool cond = decltype(std::declval<Pred>()(x))::value;
- return helper(static_cast<X&&>(x), hana::bool_c<cond>);
- }
- };
- }
-
- template <typename M, bool condition>
- struct filter_impl<M, when<condition>> : default_ {
- template <typename Xs, typename Pred>
- static constexpr decltype(auto) apply(Xs&& xs, Pred const&) {
- return hana::chain(static_cast<Xs&&>(xs),
- detail::lift_or_empty<Pred, M>{}
- );
- }
- };
-
- namespace detail {
- template <bool ...b>
- struct filter_indices {
- static constexpr auto compute_indices() {
- constexpr bool bs[] = {b..., false}; // avoid empty array
- constexpr std::size_t N = detail::count(bs, bs + sizeof(bs), true);
- detail::array<std::size_t, N> indices{};
- std::size_t* keep = &indices[0];
- for (std::size_t i = 0; i < sizeof...(b); ++i)
- if (bs[i])
- *keep++ = i;
- return indices;
- }
-
- static constexpr auto cached_indices = compute_indices();
- };
-
- template <typename Pred>
- struct make_filter_indices {
- Pred const& pred;
- template <typename ...X>
- auto operator()(X&& ...x) const -> filter_indices<
- static_cast<bool>(detail::decay<
- decltype(pred(static_cast<X&&>(x)))
- >::type::value)...
- > { return {}; }
- };
- }
-
- template <typename S>
- struct filter_impl<S, when<Sequence<S>::value>> {
- template <typename Indices, typename Xs, std::size_t ...i>
- static constexpr auto filter_helper(Xs&& xs, std::index_sequence<i...>) {
- return hana::make<S>(
- hana::at_c<Indices::cached_indices[i]>(static_cast<Xs&&>(xs))...
- );
- }
-
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred const& pred) {
- using Indices = decltype(
- hana::unpack(static_cast<Xs&&>(xs),
- detail::make_filter_indices<Pred>{pred})
- );
-
- return filter_impl::filter_helper<Indices>(
- static_cast<Xs&&>(xs),
- std::make_index_sequence<Indices::cached_indices.size()>{}
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FILTER_HPP
diff --git a/contrib/restricted/boost/boost/hana/find.hpp b/contrib/restricted/boost/boost/hana/find.hpp
deleted file mode 100644
index 4ebc48a2b5..0000000000
--- a/contrib/restricted/boost/boost/hana/find.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*!
-@file
-Defines `boost::hana::find`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FIND_HPP
-#define BOOST_HANA_FIND_HPP
-
-#include <boost/hana/fwd/find.hpp>
-
-#include <boost/hana/concept/searchable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/equal.hpp>
-#include <boost/hana/find_if.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Key>
- constexpr auto find_t::operator()(Xs&& xs, Key const& key) const {
- using S = typename hana::tag_of<Xs>::type;
- using Find = BOOST_HANA_DISPATCH_IF(find_impl<S>,
- hana::Searchable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Searchable<S>::value,
- "hana::find(xs, key) requires 'xs' to be Searchable");
- #endif
-
- return Find::apply(static_cast<Xs&&>(xs), key);
- }
- //! @endcond
-
- namespace detail {
- template <typename T>
- struct equal_to {
- T const& t;
- template <typename U>
- constexpr auto operator()(U const& u) const {
- return hana::equal(t, u);
- }
- };
- }
-
- template <typename S, bool condition>
- struct find_impl<S, when<condition>> : default_ {
- template <typename Xs, typename Key>
- static constexpr auto apply(Xs&& xs, Key const& key) {
- return hana::find_if(static_cast<Xs&&>(xs),
- detail::equal_to<Key>{key});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FIND_HPP
diff --git a/contrib/restricted/boost/boost/hana/find_if.hpp b/contrib/restricted/boost/boost/hana/find_if.hpp
deleted file mode 100644
index de9c3d3eea..0000000000
--- a/contrib/restricted/boost/boost/hana/find_if.hpp
+++ /dev/null
@@ -1,129 +0,0 @@
-/*!
-@file
-Defines `boost::hana::find_if`.
-
-@copyright Louis Dionne 2013-2017
-@copyright Jason Rice 2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FIND_IF_HPP
-#define BOOST_HANA_FIND_IF_HPP
-
-#include <boost/hana/fwd/find_if.hpp>
-
-#include <boost/hana/accessors.hpp>
-#include <boost/hana/at.hpp>
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/iterable.hpp>
-#include <boost/hana/concept/searchable.hpp>
-#include <boost/hana/concept/struct.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/first.hpp>
-#include <boost/hana/functional/compose.hpp>
-#include <boost/hana/index_if.hpp>
-#include <boost/hana/second.hpp>
-#include <boost/hana/transform.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Pred>
- constexpr auto find_if_t::operator()(Xs&& xs, Pred&& pred) const {
- using S = typename hana::tag_of<Xs>::type;
- using FindIf = BOOST_HANA_DISPATCH_IF(find_if_impl<S>,
- hana::Searchable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Searchable<S>::value,
- "hana::find_if(xs, pred) requires 'xs' to be a Searchable");
- #endif
-
- return FindIf::apply(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct find_if_impl<S, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- namespace detail {
- template <typename Xs>
- struct partial_at {
- Xs const& xs;
-
- template <typename I>
- constexpr decltype(auto) operator()(I i) const {
- return hana::at(xs, i);
- }
- };
- }
-
- template <typename Tag>
- struct find_if_impl<Tag, when<Iterable<Tag>::value>> {
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&& pred) {
- using Result = decltype(hana::index_if(
- static_cast<Xs&&>(xs), static_cast<Pred&&>(pred)));
-
- return hana::transform(Result{},
- detail::partial_at<std::decay_t<Xs>>{static_cast<Xs&&>(xs)});
- }
- };
-
- template <typename T, std::size_t N>
- struct find_if_impl<T[N]> {
- template <typename Xs>
- static constexpr auto find_if_helper(Xs&&, hana::false_)
- { return hana::nothing; }
-
- template <typename Xs>
- static constexpr auto find_if_helper(Xs&& xs, hana::true_)
- { return hana::just(static_cast<Xs&&>(xs)[0]); }
-
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&& pred) {
- return find_if_helper(static_cast<Xs&&>(xs),
- hana::bool_c<decltype(
- static_cast<Pred&&>(pred)(static_cast<Xs&&>(xs)[0])
- )::value>
- );
- }
- };
-
- namespace struct_detail {
- template <typename X>
- struct get_member {
- X x;
- template <typename Member>
- constexpr decltype(auto) operator()(Member&& member) && {
- return hana::second(static_cast<Member&&>(member))(
- static_cast<X&&>(x)
- );
- }
- };
- }
-
- template <typename S>
- struct find_if_impl<S, when<hana::Struct<S>::value>> {
- template <typename X, typename Pred>
- static constexpr decltype(auto) apply(X&& x, Pred&& pred) {
- return hana::transform(
- hana::find_if(hana::accessors<S>(),
- hana::compose(static_cast<Pred&&>(pred), hana::first)
- ),
- struct_detail::get_member<X>{static_cast<X&&>(x)}
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FIND_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/first.hpp b/contrib/restricted/boost/boost/hana/first.hpp
deleted file mode 100644
index f364b2242f..0000000000
--- a/contrib/restricted/boost/boost/hana/first.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*!
-@file
-Defines `boost::hana::first`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FIRST_HPP
-#define BOOST_HANA_FIRST_HPP
-
-#include <boost/hana/fwd/first.hpp>
-
-#include <boost/hana/concept/product.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Pair>
- constexpr decltype(auto) first_t::operator()(Pair&& pair) const {
- using P = typename hana::tag_of<Pair>::type;
- using First = BOOST_HANA_DISPATCH_IF(first_impl<P>,
- hana::Product<P>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Product<P>::value,
- "hana::first(pair) requires 'pair' to be a Product");
- #endif
-
- return First::apply(static_cast<Pair&&>(pair));
- }
- //! @endcond
-
- template <typename P, bool condition>
- struct first_impl<P, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FIRST_HPP
diff --git a/contrib/restricted/boost/boost/hana/flatten.hpp b/contrib/restricted/boost/boost/hana/flatten.hpp
deleted file mode 100644
index 6c5ccc99c3..0000000000
--- a/contrib/restricted/boost/boost/hana/flatten.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*!
-@file
-Defines `boost::hana::flatten`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FLATTEN_HPP
-#define BOOST_HANA_FLATTEN_HPP
-
-#include <boost/hana/fwd/flatten.hpp>
-
-#include <boost/hana/concept/monad.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/detail/unpack_flatten.hpp>
-#include <boost/hana/functional/id.hpp>
-#include <boost/hana/fwd/chain.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs>
- constexpr auto flatten_t::operator()(Xs&& xs) const {
- using M = typename hana::tag_of<Xs>::type;
- using Flatten = BOOST_HANA_DISPATCH_IF(flatten_impl<M>,
- hana::Monad<M>::value
- );
-
-#ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Monad<M>::value,
- "hana::flatten(xs) requires 'xs' to be a Monad");
-#endif
-
- return Flatten::apply(static_cast<Xs&&>(xs));
- }
- //! @endcond
-
- template <typename M, bool condition>
- struct flatten_impl<M, when<condition>> : default_ {
- template <typename Xs>
- static constexpr auto apply(Xs&& xs)
- { return hana::chain(static_cast<Xs&&>(xs), hana::id); }
- };
-
- template <typename S>
- struct flatten_impl<S, when<Sequence<S>::value>> {
- template <typename Xs>
- static constexpr auto apply(Xs&& xs) {
- return detail::unpack_flatten(static_cast<Xs&&>(xs), hana::make<S>);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FLATTEN_HPP
diff --git a/contrib/restricted/boost/boost/hana/fold.hpp b/contrib/restricted/boost/boost/hana/fold.hpp
deleted file mode 100644
index a3665de22f..0000000000
--- a/contrib/restricted/boost/boost/hana/fold.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-/*!
-@file
-Defines `boost::hana::fold`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FOLD_HPP
-#define BOOST_HANA_FOLD_HPP
-
-#include <boost/hana/fwd/fold.hpp>
-
-#include <boost/hana/fold_left.hpp>
-
-#endif // !BOOST_HANA_FOLD_HPP
diff --git a/contrib/restricted/boost/boost/hana/fold_left.hpp b/contrib/restricted/boost/boost/hana/fold_left.hpp
deleted file mode 100644
index fc51b84d70..0000000000
--- a/contrib/restricted/boost/boost/hana/fold_left.hpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/*!
-@file
-Defines `boost::hana::fold_left`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FOLD_LEFT_HPP
-#define BOOST_HANA_FOLD_LEFT_HPP
-
-#include <boost/hana/fwd/fold_left.hpp>
-
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/variadic/foldl1.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/unpack.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename State, typename F>
- constexpr decltype(auto) fold_left_t::operator()(Xs&& xs, State&& state, F&& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using FoldLeft = BOOST_HANA_DISPATCH_IF(fold_left_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::fold_left(xs, state, f) requires 'xs' to be Foldable");
- #endif
-
- return FoldLeft::apply(static_cast<Xs&&>(xs),
- static_cast<State&&>(state),
- static_cast<F&&>(f));
- }
-
- template <typename Xs, typename F>
- constexpr decltype(auto) fold_left_t::operator()(Xs&& xs, F&& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using FoldLeft = BOOST_HANA_DISPATCH_IF(fold_left_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::fold_left(xs, f) requires 'xs' to be Foldable");
- #endif
-
- return FoldLeft::apply(static_cast<Xs&&>(xs), static_cast<F&&>(f));
- }
- //! @endcond
-
- namespace detail {
- template <typename F, typename State>
- struct variadic_foldl1 {
- F& f;
- State& state;
- template <typename ...T>
- constexpr decltype(auto) operator()(T&& ...t) const {
- return detail::variadic::foldl1(
- static_cast<F&&>(f),
- static_cast<State&&>(state),
- static_cast<T&&>(t)...
- );
- }
- };
- }
-
- template <typename T, bool condition>
- struct fold_left_impl<T, when<condition>> : default_ {
- // with state
- template <typename Xs, typename S, typename F>
- static constexpr decltype(auto) apply(Xs&& xs, S&& s, F&& f) {
- return hana::unpack(static_cast<Xs&&>(xs),
- detail::variadic_foldl1<F, S>{f, s}
- );
- }
-
- // without state
- template <typename Xs, typename F>
- static constexpr decltype(auto) apply(Xs&& xs, F&& f) {
- return hana::unpack(static_cast<Xs&&>(xs),
- hana::partial(
- detail::variadic::foldl1,
- static_cast<F&&>(f)
- )
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FOLD_LEFT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fold_right.hpp b/contrib/restricted/boost/boost/hana/fold_right.hpp
deleted file mode 100644
index 73bdc6f88d..0000000000
--- a/contrib/restricted/boost/boost/hana/fold_right.hpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/*!
-@file
-Defines `boost::hana::fold_right`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FOLD_RIGHT_HPP
-#define BOOST_HANA_FOLD_RIGHT_HPP
-
-#include <boost/hana/fwd/fold_right.hpp>
-
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/variadic/foldr1.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/fwd/unpack.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename State, typename F>
- constexpr decltype(auto) fold_right_t::operator()(Xs&& xs, State&& state, F&& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using FoldRight = BOOST_HANA_DISPATCH_IF(fold_right_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::fold_right(xs, state, f) requires 'xs' to be Foldable");
- #endif
-
- return FoldRight::apply(static_cast<Xs&&>(xs),
- static_cast<State&&>(state),
- static_cast<F&&>(f));
- }
-
- template <typename Xs, typename F>
- constexpr decltype(auto) fold_right_t::operator()(Xs&& xs, F&& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using FoldRight = BOOST_HANA_DISPATCH_IF(fold_right_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::fold_right(xs, f) requires 'xs' to be Foldable");
- #endif
-
- return FoldRight::apply(static_cast<Xs&&>(xs), static_cast<F&&>(f));
- }
- //! @endcond
-
- namespace detail {
- template <typename F, typename State>
- struct variadic_foldr {
- F& f;
- State& state;
- template <typename ...T>
- constexpr decltype(auto) operator()(T&& ...t) const {
- return detail::variadic::foldr(
- static_cast<F&&>(f),
- static_cast<State&&>(state),
- static_cast<T&&>(t)...
- );
- }
- };
- }
-
- template <typename T, bool condition>
- struct fold_right_impl<T, when<condition>> : default_ {
- // with state
- template <typename Xs, typename S, typename F>
- static constexpr decltype(auto) apply(Xs&& xs, S&& s, F&& f) {
- return hana::unpack(static_cast<Xs&&>(xs),
- detail::variadic_foldr<F, S>{f, s}
- );
- }
-
- // without state
- template <typename Xs, typename F>
- static constexpr decltype(auto) apply(Xs&& xs, F&& f) {
- return hana::unpack(static_cast<Xs&&>(xs),
- hana::partial(
- detail::variadic::foldr1,
- static_cast<F&&>(f)
- )
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FOLD_RIGHT_HPP
diff --git a/contrib/restricted/boost/boost/hana/for_each.hpp b/contrib/restricted/boost/boost/hana/for_each.hpp
deleted file mode 100644
index defc1de4ad..0000000000
--- a/contrib/restricted/boost/boost/hana/for_each.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*!
-@file
-Defines `boost::hana::for_each`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FOR_EACH_HPP
-#define BOOST_HANA_FOR_EACH_HPP
-
-#include <boost/hana/fwd/for_each.hpp>
-
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/unpack.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename F>
- constexpr void for_each_t::operator()(Xs&& xs, F&& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using ForEach = BOOST_HANA_DISPATCH_IF(for_each_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::for_each(xs, f) requires 'xs' to be Foldable");
- #endif
-
- return ForEach::apply(static_cast<Xs&&>(xs), static_cast<F&&>(f));
- }
- //! @endcond
-
- namespace detail {
- template <typename F>
- struct on_each {
- F f;
- template <typename ...Xs>
- constexpr void operator()(Xs&& ...xs) const {
- using Swallow = int[];
- (void)Swallow{0, ((void)(*f)(static_cast<Xs&&>(xs)), 0)...};
- }
- };
- }
-
- template <typename T, bool condition>
- struct for_each_impl<T, when<condition>> : default_ {
- template <typename Xs, typename F>
- static constexpr void apply(Xs&& xs, F&& f) {
- // We use a pointer instead of a reference to avoid a Clang ICE.
- hana::unpack(static_cast<Xs&&>(xs),
- detail::on_each<decltype(&f)>{&f});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FOR_EACH_HPP
diff --git a/contrib/restricted/boost/boost/hana/front.hpp b/contrib/restricted/boost/boost/hana/front.hpp
deleted file mode 100644
index 96d7651a66..0000000000
--- a/contrib/restricted/boost/boost/hana/front.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*!
-@file
-Defines `boost::hana::front`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FRONT_HPP
-#define BOOST_HANA_FRONT_HPP
-
-#include <boost/hana/fwd/front.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/iterable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs>
- constexpr decltype(auto) front_t::operator()(Xs&& xs) const {
- using It = typename hana::tag_of<Xs>::type;
- using Front = BOOST_HANA_DISPATCH_IF(front_impl<It>,
- hana::Iterable<It>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Iterable<It>::value,
- "hana::front(xs) requires 'xs' to be an Iterable");
- #endif
-
- return Front::apply(static_cast<Xs&&>(xs));
- }
- //! @endcond
-
- template <typename It, bool condition>
- struct front_impl<It, when<condition>> : default_ {
- template <typename Xs>
- static constexpr decltype(auto) apply(Xs&& xs)
- { return hana::at_c<0>(static_cast<Xs&&>(xs)); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FRONT_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional.hpp b/contrib/restricted/boost/boost/hana/functional.hpp
deleted file mode 100644
index 8f649431b1..0000000000
--- a/contrib/restricted/boost/boost/hana/functional.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
-@file
-Defines the @ref group-functional module.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_HPP
-#define BOOST_HANA_FUNCTIONAL_HPP
-
-#include <boost/hana/functional/always.hpp>
-#include <boost/hana/functional/apply.hpp>
-#include <boost/hana/functional/arg.hpp>
-#include <boost/hana/functional/capture.hpp>
-#include <boost/hana/functional/compose.hpp>
-#include <boost/hana/functional/curry.hpp>
-#include <boost/hana/functional/demux.hpp>
-#include <boost/hana/functional/fix.hpp>
-#include <boost/hana/functional/flip.hpp>
-#include <boost/hana/functional/id.hpp>
-#include <boost/hana/functional/infix.hpp>
-#include <boost/hana/functional/iterate.hpp>
-#include <boost/hana/functional/lockstep.hpp>
-#include <boost/hana/functional/on.hpp>
-#include <boost/hana/functional/overload.hpp>
-#include <boost/hana/functional/overload_linearly.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/functional/placeholder.hpp>
-#include <boost/hana/functional/reverse_partial.hpp>
-
-#endif // !BOOST_HANA_FUNCTIONAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/always.hpp b/contrib/restricted/boost/boost/hana/functional/always.hpp
deleted file mode 100644
index df41b851e7..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/always.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/*!
-@file
-Defines `boost::hana::always`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_ALWAYS_HPP
-#define BOOST_HANA_FUNCTIONAL_ALWAYS_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/create.hpp>
-
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Return a constant function returning `x` regardless of the
- //! argument(s) it is invoked with.
- //!
- //! Specifically, `always(x)` is a function such that
- //! @code
- //! always(x)(y...) == x
- //! @endcode
- //! for any `y...`. A copy of `x` is made and it is owned by the
- //! `always(x)` function. When `always(x)` is called, it will return
- //! a reference to the `x` it owns. This reference is valid as long
- //! as `always(x)` is in scope.
- //!
- //!
- //! ### Example
- //! @include example/functional/always.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto always = [](auto&& x) {
- return [perfect-capture](auto const& ...y) -> decltype(auto) {
- return forwarded(x);
- };
- };
-#else
- template <typename T>
- struct _always {
- T val_;
-
- template <typename ...Args>
- constexpr T const& operator()(Args const& ...) const&
- { return val_; }
-
- template <typename ...Args>
- constexpr T& operator()(Args const& ...) &
- { return val_; }
-
- template <typename ...Args>
- constexpr T operator()(Args const& ...) &&
- { return std::move(val_); }
- };
-
- constexpr detail::create<_always> always{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_ALWAYS_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/apply.hpp b/contrib/restricted/boost/boost/hana/functional/apply.hpp
deleted file mode 100644
index 8a47a873e6..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/apply.hpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/*!
-@file
-Defines `boost::hana::apply`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_APPLY_HPP
-#define BOOST_HANA_FUNCTIONAL_APPLY_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Invokes a Callable with the given arguments.
- //!
- //! This is equivalent to [std::invoke][1] that will be added in C++17.
- //! However, `apply` is a function object instead of a function, which
- //! makes it possible to pass it to higher-order algorithms.
- //!
- //!
- //! @param f
- //! A [Callable][2] to be invoked with the given arguments.
- //!
- //! @param x...
- //! The arguments to call `f` with. The number of `x...` must match the
- //! arity of `f`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/functional/apply.cpp
- //!
- //! [1]: http://en.cppreference.com/w/cpp/utility/functional/invoke
- //! [2]: http://en.cppreference.com/w/cpp/concept/Callable
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto apply = [](auto&& f, auto&& ...x) -> decltype(auto) {
- return forwarded(f)(forwarded(x)...);
- };
-#else
- struct apply_t {
- template <typename F, typename... Args>
- constexpr auto operator()(F&& f, Args&&... args) const ->
- decltype(static_cast<F&&>(f)(static_cast<Args&&>(args)...))
- {
- return static_cast<F&&>(f)(static_cast<Args&&>(args)...);
- }
-
- template <typename Base, typename T, typename Derived>
- constexpr auto operator()(T Base::*pmd, Derived&& ref) const ->
- decltype(static_cast<Derived&&>(ref).*pmd)
- {
- return static_cast<Derived&&>(ref).*pmd;
- }
-
- template <typename PMD, typename Pointer>
- constexpr auto operator()(PMD pmd, Pointer&& ptr) const ->
- decltype((*static_cast<Pointer&&>(ptr)).*pmd)
- {
- return (*static_cast<Pointer&&>(ptr)).*pmd;
- }
-
- template <typename Base, typename T, typename Derived, typename... Args>
- constexpr auto operator()(T Base::*pmf, Derived&& ref, Args&&... args) const ->
- decltype((static_cast<Derived&&>(ref).*pmf)(static_cast<Args&&>(args)...))
- {
- return (static_cast<Derived&&>(ref).*pmf)(static_cast<Args&&>(args)...);
- }
-
- template <typename PMF, typename Pointer, typename... Args>
- constexpr auto operator()(PMF pmf, Pointer&& ptr, Args&& ...args) const ->
- decltype(((*static_cast<Pointer&&>(ptr)).*pmf)(static_cast<Args&&>(args)...))
- {
- return ((*static_cast<Pointer&&>(ptr)).*pmf)(static_cast<Args&&>(args)...);
- }
- };
-
- constexpr apply_t apply{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_APPLY_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/arg.hpp b/contrib/restricted/boost/boost/hana/functional/arg.hpp
deleted file mode 100644
index 5dd5658eff..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/arg.hpp
+++ /dev/null
@@ -1,141 +0,0 @@
-/*!
-@file
-Defines `boost::hana::arg`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_ARG_HPP
-#define BOOST_HANA_FUNCTIONAL_ARG_HPP
-
-#include <boost/hana/config.hpp>
-
-#include <cstddef>
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Return the `n`th passed argument.
- //!
- //! Specifically, `arg<n>(x1, ..., xn, ..., xm)` is equivalent to `xn`.
- //! Note that indexing starts at 1, so `arg<1>` returns the 1st argument,
- //! `arg<2>` the 2nd and so on. Using `arg<0>` is an error. Passing
- //! less than `n` arguments to `arg<n>` is also an error.
- //!
- //!
- //! @tparam n
- //! An unsigned integer representing the argument to return. `n` must be
- //! positive (meaning nonzero).
- //!
- //! @param x1, ..., xm
- //! A variadic pack of arguments from which the `n`th one is returned.
- //!
- //!
- //! @internal
- //! ### Discussion: could `n` be dynamic?
- //! We could have chosen `arg` to be used like `arg(n)(x...)` instead of
- //! `arg<n>(x...)`. Provided all the arguments were of the same type, it
- //! would then be possible for `n` to only be known at runtime. However,
- //! we would then lose the ability to assert the in-boundedness of `n`
- //! statically.
- //!
- //! ### Rationale for `n` being a non-type template parameter
- //! I claim that the only interesting use case is with a compile-time
- //! `n`, which means that the usage would become `arg(int_<n>)(x...)`,
- //! which is more cumbersome to write than `arg<n>(x...)`. This is open
- //! for discussion.
- //! @endinternal
- //!
- //! ### Example
- //! @include example/functional/arg.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <std::size_t n>
- constexpr auto arg = [](auto&& x1, ..., auto&& xm) -> decltype(auto) {
- return forwarded(xn);
- };
-#else
- template <std::size_t n, typename = void>
- struct arg_t;
-
- template <>
- struct arg_t<1> {
- template <typename X1, typename ...Xn>
- constexpr X1 operator()(X1&& x1, Xn&& ...) const
- { return static_cast<X1&&>(x1); }
- };
-
- template <>
- struct arg_t<2> {
- template <typename X1, typename X2, typename ...Xn>
- constexpr X2 operator()(X1&&, X2&& x2, Xn&& ...) const
- { return static_cast<X2&&>(x2); }
- };
-
- template <>
- struct arg_t<3> {
- template <typename X1, typename X2, typename X3, typename ...Xn>
- constexpr X3 operator()(X1&&, X2&&, X3&& x3, Xn&& ...) const
- { return static_cast<X3&&>(x3); }
- };
-
- template <>
- struct arg_t<4> {
- template <typename X1, typename X2, typename X3, typename X4, typename ...Xn>
- constexpr X4 operator()(X1&&, X2&&, X3&&, X4&& x4, Xn&& ...) const
- { return static_cast<X4&&>(x4); }
- };
-
- template <>
- struct arg_t<5> {
- template <typename X1, typename X2, typename X3, typename X4,
- typename X5, typename ...Xn>
- constexpr X5 operator()(X1&&, X2&&, X3&&, X4&&, X5&& x5, Xn&& ...) const
- { return static_cast<X5&&>(x5); }
- };
-
- template <std::size_t n, typename>
- struct arg_t {
- static_assert(n > 0,
- "invalid usage of boost::hana::arg<n> with n == 0");
-
- template <typename X1, typename X2, typename X3, typename X4,
- typename X5, typename ...Xn>
- constexpr decltype(auto)
- operator()(X1&&, X2&&, X3&&, X4&&, X5&&, Xn&& ...xn) const {
- static_assert(sizeof...(xn) >= n - 5,
- "invalid usage of boost::hana::arg<n> with too few arguments");
-
- // Since compilers will typically try to continue for a bit after
- // an error/static assertion, we must avoid sending the compiler
- // in a very long computation if n == 0.
- return arg_t<n == 0 ? 1 : n - 5>{}(static_cast<Xn&&>(xn)...);
- }
- };
-
- template <std::size_t n>
- struct arg_t<n, std::enable_if_t<(n > 25)>> {
- template <
- typename X1, typename X2, typename X3, typename X4, typename X5,
- typename X6, typename X7, typename X8, typename X9, typename X10,
- typename X11, typename X12, typename X13, typename X14, typename X15,
- typename X16, typename X17, typename X18, typename X19, typename X20,
- typename X21, typename X22, typename X23, typename X24, typename X25,
- typename ...Xn>
- constexpr decltype(auto)
- operator()(X1&&, X2&&, X3&&, X4&&, X5&&,
- X6&&, X7&&, X8&&, X9&&, X10&&,
- X11&&, X12&&, X13&&, X14&&, X15&&,
- X16&&, X17&&, X18&&, X19&&, X20&&,
- X21&&, X22&&, X23&&, X24&&, X25&&, Xn&& ...xn) const
- { return arg_t<n - 25>{}(static_cast<Xn&&>(xn)...); }
- };
-
- template <std::size_t n>
- constexpr arg_t<n> arg{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_ARG_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/capture.hpp b/contrib/restricted/boost/boost/hana/functional/capture.hpp
deleted file mode 100644
index 65b4675833..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/capture.hpp
+++ /dev/null
@@ -1,112 +0,0 @@
-/*!
-@file
-Defines `boost::hana::capture`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_CAPTURE_HPP
-#define BOOST_HANA_FUNCTIONAL_CAPTURE_HPP
-
-#include <boost/hana/basic_tuple.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/functional/partial.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Create a function capturing the given variables.
- //!
- //! Given 0 or more variables, `capture` creates a closure that can be
- //! used to partially apply a function. This is very similar to `partial`,
- //! except that `capture` allows the partially applied function to be
- //! specified later. Specifically, `capture(vars...)` is a function object
- //! taking a function `f` and returning `f` partially applied to `vars...`.
- //! In other words,
- //! @code
- //! capture(vars...)(f)(args...) == f(vars..., args...)
- //! @endcode
- //!
- //! @note
- //! The arity of `f` must match the total number of arguments passed to
- //! it, i.e. `sizeof...(vars) + sizeof...(args)`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/functional/capture.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto capture = [](auto&& ...variables) {
- return [perfect-capture](auto&& f) {
- return [perfect-capture](auto&& ...args) -> decltype(auto) {
- return forwarded(f)(forwarded(variables)..., forwarded(args)...);
- };
- };
- };
-#else
- namespace detail {
- template <typename F, typename Closure, std::size_t ...i>
- constexpr auto apply_capture(F&& f, Closure&& closure, std::index_sequence<i...>) {
- return hana::partial(static_cast<F&&>(f),
- hana::at_c<i>(static_cast<Closure&&>(closure).storage_)...
- );
- }
- }
-
- template <typename ...X>
- struct capture_t;
-
- struct make_capture_t {
- struct secret { };
- template <typename ...X>
- constexpr capture_t<typename detail::decay<X>::type...>
- operator()(X&& ...x) const {
- return {secret{}, static_cast<X&&>(x)...};
- }
- };
-
- template <typename ...X>
- struct capture_t {
- template <typename ...Y>
- constexpr capture_t(make_capture_t::secret, Y&& ...y)
- : storage_{static_cast<Y&&>(y)...}
- { }
-
- basic_tuple<X...> storage_;
-
- template <typename F>
- constexpr auto operator()(F&& f) const& {
- return detail::apply_capture(
- static_cast<F&&>(f), *this,
- std::make_index_sequence<sizeof...(X)>{}
- );
- }
-
- template <typename F>
- constexpr auto operator()(F&& f) & {
- return detail::apply_capture(
- static_cast<F&&>(f), *this,
- std::make_index_sequence<sizeof...(X)>{}
- );
- }
-
- template <typename F>
- constexpr auto operator()(F&& f) && {
- return detail::apply_capture(
- static_cast<F&&>(f), static_cast<capture_t&&>(*this),
- std::make_index_sequence<sizeof...(X)>{}
- );
- }
- };
-
- constexpr make_capture_t capture{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_CAPTURE_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/compose.hpp b/contrib/restricted/boost/boost/hana/functional/compose.hpp
deleted file mode 100644
index bbc53f6ff4..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/compose.hpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/*!
-@file
-Defines `boost::hana::compose`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_COMPOSE_HPP
-#define BOOST_HANA_FUNCTIONAL_COMPOSE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/create.hpp>
-#include <boost/hana/detail/variadic/foldl1.hpp>
-
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Return the composition of two functions or more.
- //!
- //! `compose` is defined inductively. When given more than two functions,
- //! `compose(f, g, h...)` is equivalent to `compose(f, compose(g, h...))`.
- //! When given two functions, `compose(f, g)` is a function such that
- //! @code
- //! compose(f, g)(x, y...) == f(g(x), y...)
- //! @endcode
- //!
- //! If you need composition of the form `f(g(x, y...))`, use `demux` instead.
- //!
- //! @note
- //! `compose` is an associative operation; `compose(f, compose(g, h))`
- //! is equivalent to `compose(compose(f, g), h)`.
- //!
- //! @internal
- //! ### Proof of associativity
- //!
- //! @code
- //! compose(f, compose(g, h))(x, xs...) == f(compose(g, h)(x), xs...)
- //! == f(g(h(x)), xs...)
- //!
- //! compose(compose(f, g), h)(x, xs...) == compose(f, g)(h(x), xs...)
- //! == f(g(h(x)), xs...)
- //! @endcode
- //! @endinternal
- //!
- //! ### Example
- //! @include example/functional/compose.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto compose = [](auto&& f1, auto&& f2, ..., auto&& fn) {
- return [perfect-capture](auto&& x, auto&& ...xs) -> decltype(auto) {
- return forwarded(f1)(
- forwarded(f2)(
- ...
- forwarded(fn)(forwarded(x))
- ),
- forwarded(xs)...
- );
- }
- };
-#else
- template <typename F, typename G>
- struct _compose {
- F f; G g;
-
- template <typename X, typename ...Xs>
- constexpr decltype(auto) operator()(X&& x, Xs&& ...xs) const& {
- return f(
- g(static_cast<X&&>(x)),
- static_cast<Xs&&>(xs)...
- );
- }
-
- template <typename X, typename ...Xs>
- constexpr decltype(auto) operator()(X&& x, Xs&& ...xs) & {
- return f(
- g(static_cast<X&&>(x)),
- static_cast<Xs&&>(xs)...
- );
- }
-
- template <typename X, typename ...Xs>
- constexpr decltype(auto) operator()(X&& x, Xs&& ...xs) && {
- return std::move(f)(
- std::move(g)(static_cast<X&&>(x)),
- static_cast<Xs&&>(xs)...
- );
- }
- };
-
- struct _make_compose {
- template <typename F, typename G, typename ...H>
- constexpr decltype(auto) operator()(F&& f, G&& g, H&& ...h) const {
- return detail::variadic::foldl1(detail::create<_compose>{},
- static_cast<F&&>(f),
- static_cast<G&&>(g),
- static_cast<H&&>(h)...
- );
- }
- };
-
- constexpr _make_compose compose{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_COMPOSE_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/curry.hpp b/contrib/restricted/boost/boost/hana/functional/curry.hpp
deleted file mode 100644
index 762718c208..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/curry.hpp
+++ /dev/null
@@ -1,170 +0,0 @@
-/*!
-@file
-Defines `boost::hana::curry`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_CURRY_HPP
-#define BOOST_HANA_FUNCTIONAL_CURRY_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/functional/apply.hpp>
-#include <boost/hana/functional/partial.hpp>
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Curry a function up to the given number of arguments.
- //!
- //! [Currying][Wikipedia.currying] is a technique in which we consider a
- //! function taking multiple arguments (or, equivalently, a tuple of
- //! arguments), and turn it into a function which takes a single argument
- //! and returns a function to handle the remaining arguments. To help
- //! visualize, let's denote the type of a function `f` which takes
- //! arguments of types `X1, ..., Xn` and returns a `R` as
- //! @code
- //! (X1, ..., Xn) -> R
- //! @endcode
- //!
- //! Then, currying is the process of taking `f` and turning it into an
- //! equivalent function (call it `g`) of type
- //! @code
- //! X1 -> (X2 -> (... -> (Xn -> R)))
- //! @endcode
- //!
- //! This gives us the following equivalence, where `x1`, ..., `xn` are
- //! objects of type `X1`, ..., `Xn` respectively:
- //! @code
- //! f(x1, ..., xn) == g(x1)...(xn)
- //! @endcode
- //!
- //! Currying can be useful in several situations, especially when working
- //! with higher-order functions.
- //!
- //! This `curry` utility is an implementation of currying in C++.
- //! Specifically, `curry<n>(f)` is a function such that
- //! @code
- //! curry<n>(f)(x1)...(xn) == f(x1, ..., xn)
- //! @endcode
- //!
- //! Note that the `n` has to be specified explicitly because the existence
- //! of functions with variadic arguments in C++ make it impossible to know
- //! when currying should stop.
- //!
- //! Unlike usual currying, this implementation also allows a curried
- //! function to be called with several arguments at a time. Hence, the
- //! following always holds
- //! @code
- //! curry<n>(f)(x1, ..., xk) == curry<n - k>(f)(x1)...(xk)
- //! @endcode
- //!
- //! Of course, this requires `k` to be less than or equal to `n`; failure
- //! to satisfy this will trigger a static assertion. This syntax is
- //! supported because it makes curried functions usable where normal
- //! functions are expected.
- //!
- //! Another "extension" is that `curry<0>(f)` is supported: `curry<0>(f)`
- //! is a nullary function; whereas the classical definition for currying
- //! seems to leave this case undefined, as nullary functions don't make
- //! much sense in purely functional languages.
- //!
- //!
- //! Example
- //! -------
- //! @include example/functional/curry.cpp
- //!
- //!
- //! [Wikipedia.currying]: http://en.wikipedia.org/wiki/Currying
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <std::size_t n>
- constexpr auto curry = [](auto&& f) {
- return [perfect-capture](auto&& x1) {
- return [perfect-capture](auto&& x2) {
- ...
- return [perfect-capture](auto&& xn) -> decltype(auto) {
- return forwarded(f)(
- forwarded(x1), forwarded(x2), ..., forwarded(xn)
- );
- };
- };
- };
- };
-#else
- template <std::size_t n, typename F>
- struct curry_t;
-
- template <std::size_t n>
- struct make_curry_t {
- template <typename F>
- constexpr curry_t<n, typename detail::decay<F>::type>
- operator()(F&& f) const { return {static_cast<F&&>(f)}; }
- };
-
- template <std::size_t n>
- constexpr make_curry_t<n> curry{};
-
- namespace curry_detail { namespace {
- template <std::size_t n>
- constexpr make_curry_t<n> curry_or_call{};
-
- template <>
- constexpr auto curry_or_call<0> = apply;
- }}
-
- template <std::size_t n, typename F>
- struct curry_t {
- F f;
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) const& {
- static_assert(sizeof...(x) <= n,
- "too many arguments provided to boost::hana::curry");
- return curry_detail::curry_or_call<n - sizeof...(x)>(
- partial(f, static_cast<X&&>(x)...)
- );
- }
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) & {
- static_assert(sizeof...(x) <= n,
- "too many arguments provided to boost::hana::curry");
- return curry_detail::curry_or_call<n - sizeof...(x)>(
- partial(f, static_cast<X&&>(x)...)
- );
- }
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) && {
- static_assert(sizeof...(x) <= n,
- "too many arguments provided to boost::hana::curry");
- return curry_detail::curry_or_call<n - sizeof...(x)>(
- partial(std::move(f), static_cast<X&&>(x)...)
- );
- }
- };
-
- template <typename F>
- struct curry_t<0, F> {
- F f;
-
- constexpr decltype(auto) operator()() const&
- { return f(); }
-
- constexpr decltype(auto) operator()() &
- { return f(); }
-
- constexpr decltype(auto) operator()() &&
- { return std::move(f)(); }
- };
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_CURRY_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/demux.hpp b/contrib/restricted/boost/boost/hana/functional/demux.hpp
deleted file mode 100644
index f76b68ed48..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/demux.hpp
+++ /dev/null
@@ -1,269 +0,0 @@
-/*!
-@file
-Defines `boost::hana::demux`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_DEMUX_HPP
-#define BOOST_HANA_FUNCTIONAL_DEMUX_HPP
-
-#include <boost/hana/basic_tuple.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Invoke a function with the results of invoking other functions
- //! on its arguments.
- //!
- //! Specifically, `demux(f)(g...)` is a function such that
- //! @code
- //! demux(f)(g...)(x...) == f(g(x...)...)
- //! @endcode
- //!
- //! Each `g` is called with all the arguments, and then `f` is called
- //! with the result of each `g`. Hence, the arity of `f` must match
- //! the number of `g`s.
- //!
- //! This is called `demux` because of a vague similarity between this
- //! device and a demultiplexer in signal processing. `demux` takes what
- //! can be seen as a continuation (`f`), a bunch of functions to split a
- //! signal (`g...`) and zero or more arguments representing the signal
- //! (`x...`). Then, it calls the continuation with the result of
- //! splitting the signal with whatever functions where given.
- //!
- //! @note
- //! When used with two functions only, `demux` is associative. In other
- //! words (and noting `demux(f, g) = demux(f)(g)` to ease the notation),
- //! it is true that `demux(demux(f, g), h) == demux(f, demux(g, h))`.
- //!
- //!
- //! Signature
- //! ---------
- //! The signature of `demux` is
- //! \f[
- //! \mathtt{demux} :
- //! (B_1 \times \dotsb \times B_n \to C)
- //! \to ((A_1 \times \dotsb \times A_n \to B_1)
- //! \times \dotsb
- //! \times (A_1 \times \dotsb \times A_n \to B_n))
- //! \to (A_1 \times \dotsb \times A_n \to C)
- //! \f]
- //!
- //! This can be rewritten more tersely as
- //! \f[
- //! \mathtt{demux} :
- //! \left(\prod_{i=1}^n B_i \to C \right)
- //! \to \prod_{j=1}^n \left(\prod_{i=1}^n A_i \to B_j \right)
- //! \to \left(\prod_{i=1}^n A_i \to C \right)
- //! \f]
- //!
- //!
- //! Link with normal composition
- //! ----------------------------
- //! The signature of `compose` is
- //! \f[
- //! \mathtt{compose} : (B \to C) \times (A \to B) \to (A \to C)
- //! \f]
- //!
- //! A valid observation is that this coincides exactly with the type
- //! of `demux` when used with a single unary function. Actually, both
- //! functions are equivalent:
- //! @code
- //! demux(f)(g)(x) == compose(f, g)(x)
- //! @endcode
- //!
- //! However, let's now consider the curried version of `compose`,
- //! `curry<2>(compose)`:
- //! \f[
- //! \mathtt{curry_2(compose)} : (B \to C) \to ((A \to B) \to (A \to C))
- //! \f]
- //!
- //! For the rest of this explanation, we'll just consider the curried
- //! version of `compose` and so we'll use `compose` instead of
- //! `curry<2>(compose)` to lighten the notation. With currying, we can
- //! now consider `compose` applied to itself:
- //! \f[
- //! \mathtt{compose(compose, compose)} :
- //! (B \to C) \to (A_1 \to A_2 \to B) \to (A_1 \to A_2 \to C)
- //! \f]
- //!
- //! If we uncurry deeply the above expression, we obtain
- //! \f[
- //! \mathtt{compose(compose, compose)} :
- //! (B \to C) \times (A_1 \times A_2 \to B) \to (A_1 \times A_2 \to C)
- //! \f]
- //!
- //! This signature is exactly the same as that of `demux` when given a
- //! single binary function, and indeed they are equivalent definitions.
- //! We can also generalize this further by considering
- //! `compose(compose(compose, compose), compose)`:
- //! \f[
- //! \mathtt{compose(compose(compose, compose), compose)} :
- //! (B \to C) \to (A_1 \to A_2 \to A_3 \to B)
- //! \to (A_1 \to A_2 \to A_3 \to C)
- //! \f]
- //!
- //! which uncurries to
- //! \f[
- //! \mathtt{compose(compose(compose, compose), compose)} :
- //! (B \to C) \times (A_1 \times A_2 \times A_3 \to B)
- //! \to (A_1 \times A_2 \times A_3 \to C)
- //! \f]
- //!
- //! This signature is exactly the same as that of `demux` when given a
- //! single ternary function. Hence, for a single n-ary function `g`,
- //! `demux(f)(g)` is equivalent to the n-times composition of `compose`
- //! with itself, applied to `g` and `f`:
- //! @code
- //! demux(f)(g) == fold_left([compose, ..., compose], id, compose)(g, f)
- //! // ^^^^^^^^^^^^^^^^^^^^^ n times
- //! @endcode
- //!
- //! More information on this insight can be seen [here][1]. Also, I'm
- //! not sure how this insight could be generalized to more than one
- //! function `g`, or if that is even possible.
- //!
- //!
- //! Proof of associativity in the binary case
- //! -----------------------------------------
- //! As explained above, `demux` is associative when it is used with
- //! two functions only. Indeed, given functions `f`, `g` and `h` with
- //! suitable signatures, we have
- //! @code
- //! demux(f)(demux(g)(h))(x...) == f(demux(g)(h)(x...))
- //! == f(g(h(x...)))
- //! @endcode
- //!
- //! On the other hand, we have
- //! @code
- //! demux(demux(f)(g))(h)(x...) == demux(f)(g)(h(x...))
- //! == f(g(h(x...)))
- //! @endcode
- //!
- //! and hence `demux` is associative in the binary case.
- //!
- //!
- //! Example
- //! -------
- //! @include example/functional/demux.cpp
- //!
- //! [1]: http://stackoverflow.com/q/5821089/627587
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto demux = [](auto&& f) {
- return [perfect-capture](auto&& ...g) {
- return [perfect-capture](auto&& ...x) -> decltype(auto) {
- // x... can't be forwarded unless there is a single g
- // function, or that could cause double-moves.
- return forwarded(f)(forwarded(g)(x...)...);
- };
- };
- };
-#else
- template <typename F>
- struct pre_demux_t;
-
- struct make_pre_demux_t {
- struct secret { };
- template <typename F>
- constexpr pre_demux_t<typename detail::decay<F>::type> operator()(F&& f) const {
- return {static_cast<F&&>(f)};
- }
- };
-
- template <typename Indices, typename F, typename ...G>
- struct demux_t;
-
- template <typename F>
- struct pre_demux_t {
- F f;
-
- template <typename ...G>
- constexpr demux_t<std::make_index_sequence<sizeof...(G)>, F,
- typename detail::decay<G>::type...>
- operator()(G&& ...g) const& {
- return {make_pre_demux_t::secret{}, this->f, static_cast<G&&>(g)...};
- }
-
- template <typename ...G>
- constexpr demux_t<std::make_index_sequence<sizeof...(G)>, F,
- typename detail::decay<G>::type...>
- operator()(G&& ...g) && {
- return {make_pre_demux_t::secret{}, static_cast<F&&>(this->f), static_cast<G&&>(g)...};
- }
- };
-
- template <std::size_t ...n, typename F, typename ...G>
- struct demux_t<std::index_sequence<n...>, F, G...> {
- template <typename ...T>
- constexpr demux_t(make_pre_demux_t::secret, T&& ...t)
- : storage_{static_cast<T&&>(t)...}
- { }
-
- basic_tuple<F, G...> storage_;
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) const& {
- return hana::at_c<0>(storage_)(
- hana::at_c<n+1>(storage_)(x...)...
- );
- }
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) & {
- return hana::at_c<0>(storage_)(
- hana::at_c<n+1>(storage_)(x...)...
- );
- }
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) && {
- return static_cast<F&&>(hana::at_c<0>(storage_))(
- static_cast<G&&>(hana::at_c<n+1>(storage_))(x...)...
- );
- }
- };
-
- template <typename F, typename G>
- struct demux_t<std::index_sequence<0>, F, G> {
- template <typename ...T>
- constexpr demux_t(make_pre_demux_t::secret, T&& ...t)
- : storage_{static_cast<T&&>(t)...}
- { }
-
- basic_tuple<F, G> storage_;
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) const& {
- return hana::at_c<0>(storage_)(
- hana::at_c<1>(storage_)(static_cast<X&&>(x)...)
- );
- }
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) & {
- return hana::at_c<0>(storage_)(
- hana::at_c<1>(storage_)(static_cast<X&&>(x)...)
- );
- }
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) && {
- return static_cast<F&&>(hana::at_c<0>(storage_))(
- static_cast<G&&>(hana::at_c<1>(storage_))(static_cast<X&&>(x)...)
- );
- }
- };
-
- constexpr make_pre_demux_t demux{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_DEMUX_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/fix.hpp b/contrib/restricted/boost/boost/hana/functional/fix.hpp
deleted file mode 100644
index 4c636ee10b..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/fix.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/*!
-@file
-Defines `boost::hana::fix`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_FIX_HPP
-#define BOOST_HANA_FUNCTIONAL_FIX_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/create.hpp>
-
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Return a function computing the fixed point of a function.
- //!
- //! `fix` is an implementation of the [Y-combinator][], also called the
- //! fixed-point combinator. It encodes the idea of recursion, and in fact
- //! any recursive function can be written in terms of it.
- //!
- //! Specifically, `fix(f)` is a function such that
- //! @code
- //! fix(f)(x...) == f(fix(f), x...)
- //! @endcode
- //!
- //! This definition allows `f` to use its first argument as a continuation
- //! to call itself recursively. Indeed, if `f` calls its first argument
- //! with `y...`, it is equivalent to calling `f(fix(f), y...)` per the
- //! above equation.
- //!
- //! Most of the time, it is more convenient and efficient to define
- //! recursive functions without using a fixed-point combinator. However,
- //! there are some cases where `fix` provides either more flexibility
- //! (e.g. the ability to change the callback inside `f`) or makes it
- //! possible to write functions that couldn't be defined recursively
- //! otherwise.
- //!
- //! @param f
- //! A function called as `f(self, x...)`, where `x...` are the arguments
- //! in the `fix(f)(x...)` expression and `self` is `fix(f)`.
- //!
- //! ### Example
- //! @include example/functional/fix.cpp
- //!
- //! [Y-combinator]: http://en.wikipedia.org/wiki/Fixed-point_combinator
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto fix = [](auto&& f) {
- return [perfect-capture](auto&& ...x) -> decltype(auto) {
- return forwarded(f)(fix(f), forwarded(x)...);
- };
- };
-#else
- template <typename F>
- struct fix_t;
-
- constexpr detail::create<fix_t> fix{};
-
- template <typename F>
- struct fix_t {
- F f;
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) const&
- { return f(fix(f), static_cast<X&&>(x)...); }
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) &
- { return f(fix(f), static_cast<X&&>(x)...); }
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) &&
- { return std::move(f)(fix(f), static_cast<X&&>(x)...); }
- };
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_FIX_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/flip.hpp b/contrib/restricted/boost/boost/hana/functional/flip.hpp
deleted file mode 100644
index d896f5e8d3..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/flip.hpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/*!
-@file
-Defines `boost::hana::flip`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_FLIP_HPP
-#define BOOST_HANA_FUNCTIONAL_FLIP_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/create.hpp>
-
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Invoke a function with its two first arguments reversed.
- //!
- //! Specifically, `flip(f)` is a function such that
- //! @code
- //! flip(f)(x, y, z...) == f(y, x, z...)
- //! @endcode
- //!
- //! ### Example
- //! @include example/functional/flip.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto flip = [](auto&& f) {
- return [perfect-capture](auto&& x, auto&& y, auto&& ...z) -> decltype(auto) {
- return forwarded(f)(forwarded(y), forwarded(x), forwarded(z)...);
- };
- };
-#else
- template <typename F>
- struct flip_t {
- F f;
-
- template <typename X, typename Y, typename ...Z>
- constexpr decltype(auto) operator()(X&& x, Y&& y, Z&& ...z) const& {
- return f(
- static_cast<Y&&>(y),
- static_cast<X&&>(x),
- static_cast<Z&&>(z)...
- );
- }
-
- template <typename X, typename Y, typename ...Z>
- constexpr decltype(auto) operator()(X&& x, Y&& y, Z&& ...z) & {
- return f(
- static_cast<Y&&>(y),
- static_cast<X&&>(x),
- static_cast<Z&&>(z)...
- );
- }
-
- template <typename X, typename Y, typename ...Z>
- constexpr decltype(auto) operator()(X&& x, Y&& y, Z&& ...z) && {
- return std::move(f)(
- static_cast<Y&&>(y),
- static_cast<X&&>(x),
- static_cast<Z&&>(z)...
- );
- }
- };
-
- constexpr detail::create<flip_t> flip{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_FLIP_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/id.hpp b/contrib/restricted/boost/boost/hana/functional/id.hpp
deleted file mode 100644
index 04c9443b94..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/id.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/*!
-@file
-Defines `boost::hana::id`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_ID_HPP
-#define BOOST_HANA_FUNCTIONAL_ID_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! The identity function -- returns its argument unchanged.
- //!
- //! ### Example
- //! @include example/functional/id.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto id = [](auto&& x) -> decltype(auto) {
- return forwarded(x);
- };
-#else
- struct id_t {
- template <typename T>
- constexpr T operator()(T&& t) const {
- return static_cast<T&&>(t);
- }
- };
-
- constexpr id_t id{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_ID_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/infix.hpp b/contrib/restricted/boost/boost/hana/functional/infix.hpp
deleted file mode 100644
index 7b5d82cbe0..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/infix.hpp
+++ /dev/null
@@ -1,185 +0,0 @@
-/*!
-@file
-Defines `boost::hana::infix`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_INFIX_HPP
-#define BOOST_HANA_FUNCTIONAL_INFIX_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/functional/reverse_partial.hpp>
-
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Return an equivalent function that can also be applied in infix
- //! notation.
- //!
- //! Specifically, `infix(f)` is an object such that:
- //! @code
- //! infix(f)(x1, ..., xn) == f(x1, ..., xn)
- //! x ^infix(f)^ y == f(x, y)
- //! @endcode
- //!
- //! Hence, the returned function can still be applied using the usual
- //! function call syntax, but it also gains the ability to be applied in
- //! infix notation. The infix syntax allows a great deal of expressiveness,
- //! especially when used in combination with some higher order algorithms.
- //! Since `operator^` is left-associative, `x ^infix(f)^ y` is actually
- //! parsed as `(x ^infix(f))^ y`. However, for flexibility, the order in
- //! which both arguments are applied in infix notation does not matter.
- //! Hence, it is always the case that
- //! @code
- //! (x ^ infix(f)) ^ y == x ^ (infix(f) ^ y)
- //! @endcode
- //!
- //! However, note that applying more than one argument in infix
- //! notation to the same side of the operator will result in a
- //! compile-time assertion:
- //! @code
- //! (infix(f) ^ x) ^ y; // compile-time assertion
- //! y ^ (x ^ infix(f)); // compile-time assertion
- //! @endcode
- //!
- //! Additionally, a function created with `infix` may be partially applied
- //! in infix notation. Specifically,
- //! @code
- //! (x ^ infix(f))(y1, ..., yn) == f(x, y1, ..., yn)
- //! (infix(f) ^ y)(x1, ..., xn) == f(x1, ..., xn, y)
- //! @endcode
- //!
- //! @internal
- //! ### Rationales
- //! 1. The `^` operator was chosen because it is left-associative and
- //! has a low enough priority so that most expressions will render
- //! the expected behavior.
- //! 2. The operator can't be customimzed because that would require more
- //! sophistication in the implementation; I want to keep it as simple
- //! as possible. There is also an advantage in having a uniform syntax
- //! for infix application.
- //! @endinternal
- //!
- //! @param f
- //! The function which gains the ability to be applied in infix notation.
- //! The function must be at least binary; a compile-time error will be
- //! triggered otherwise.
- //!
- //! ### Example
- //! @include example/functional/infix.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto infix = [](auto f) {
- return unspecified;
- };
-#else
- namespace infix_detail {
- // This needs to be in the same namespace as `operator^` so it can be
- // found by ADL.
- template <bool left, bool right, typename F>
- struct infix_t {
- F f;
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) const&
- { return f(static_cast<X&&>(x)...); }
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) &
- { return f(static_cast<X&&>(x)...); }
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) &&
- { return std::move(f)(static_cast<X&&>(x)...); }
- };
-
- template <bool left, bool right>
- struct make_infix {
- template <typename F>
- constexpr infix_t<left, right, typename detail::decay<F>::type>
- operator()(F&& f) const { return {static_cast<F&&>(f)}; }
- };
-
- template <bool left, bool right>
- struct Infix;
- struct Object;
-
- template <typename T>
- struct dispatch { using type = Object; };
-
- template <bool left, bool right, typename F>
- struct dispatch<infix_t<left, right, F>> {
- using type = Infix<left, right>;
- };
-
- template <typename, typename>
- struct bind_infix;
-
- // infix(f) ^ y
- template <>
- struct bind_infix<Infix<false, false>, Object> {
- template <typename F, typename Y>
- static constexpr decltype(auto) apply(F&& f, Y&& y) {
- return make_infix<false, true>{}(
- hana::reverse_partial(
- static_cast<F&&>(f), static_cast<Y&&>(y)
- )
- );
- }
- };
-
- // (x^infix(f)) ^ y
- template <>
- struct bind_infix<Infix<true, false>, Object> {
- template <typename F, typename Y>
- static constexpr decltype(auto) apply(F&& f, Y&& y) {
- return static_cast<F&&>(f)(static_cast<Y&&>(y));
- }
- };
-
- // x ^ infix(f)
- template <>
- struct bind_infix<Object, Infix<false, false>> {
- template <typename X, typename F>
- static constexpr decltype(auto) apply(X&& x, F&& f) {
- return make_infix<true, false>{}(
- hana::partial(static_cast<F&&>(f), static_cast<X&&>(x))
- );
- }
- };
-
- // x ^ (infix(f)^y)
- template <>
- struct bind_infix<Object, Infix<false, true>> {
- template <typename X, typename F>
- static constexpr decltype(auto) apply(X&& x, F&& f) {
- return static_cast<F&&>(f)(static_cast<X&&>(x));
- }
- };
-
- template <typename T>
- using strip = typename std::remove_cv<
- typename std::remove_reference<T>::type
- >::type;
-
- template <typename X, typename Y>
- constexpr decltype(auto) operator^(X&& x, Y&& y) {
- return bind_infix<
- typename dispatch<strip<X>>::type,
- typename dispatch<strip<Y>>::type
- >::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- } // end namespace infix_detail
-
- constexpr infix_detail::make_infix<false, false> infix{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_INFIX_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/iterate.hpp b/contrib/restricted/boost/boost/hana/functional/iterate.hpp
deleted file mode 100644
index 9a4ce3e9b2..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/iterate.hpp
+++ /dev/null
@@ -1,201 +0,0 @@
-/*!
-@file
-Defines `boost::hana::iterate`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_ITERATE_HPP
-#define BOOST_HANA_FUNCTIONAL_ITERATE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/functional/partial.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Applies another function `n` times to its argument.
- //!
- //! Given a function `f` and an argument `x`, `iterate<n>(f, x)` returns
- //! the result of applying `f` `n` times to its argument. In other words,
- //! @code
- //! iterate<n>(f, x) == f(f( ... f(x)))
- //! ^^^^^^^^^^ n times total
- //! @endcode
- //!
- //! If `n == 0`, `iterate<n>(f, x)` returns the `x` argument unchanged
- //! and `f` is never applied. It is important to note that the function
- //! passed to `iterate<n>` must be a unary function. Indeed, since `f`
- //! will be called with the result of the previous `f` application, it
- //! may only take a single argument.
- //!
- //! In addition to what's documented above, `iterate` can also be
- //! partially applied to the function argument out-of-the-box. In
- //! other words, `iterate<n>(f)` is a function object applying `f`
- //! `n` times to the argument it is called with, which means that
- //! @code
- //! iterate<n>(f)(x) == iterate<n>(f, x)
- //! @endcode
- //!
- //! This is provided for convenience, and it turns out to be especially
- //! useful in conjunction with higher-order algorithms.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a function \f$ f : T \to T \f$ and `x` and argument of data
- //! type `T`, the signature is
- //! \f$
- //! \mathtt{iterate_n} : (T \to T) \times T \to T
- //! \f$
- //!
- //! @tparam n
- //! An unsigned integer representing the number of times that `f`
- //! should be applied to its argument.
- //!
- //! @param f
- //! A function to apply `n` times to its argument.
- //!
- //! @param x
- //! The initial value to call `f` with.
- //!
- //!
- //! Example
- //! -------
- //! @include example/functional/iterate.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <std::size_t n>
- constexpr auto iterate = [](auto&& f) {
- return [perfect-capture](auto&& x) -> decltype(auto) {
- return f(f( ... f(forwarded(x))));
- };
- };
-#else
- template <std::size_t n, typename = when<true>>
- struct iterate_t;
-
- template <>
- struct iterate_t<0> {
- template <typename F, typename X>
- constexpr X operator()(F&&, X&& x) const
- { return static_cast<X&&>(x); }
- };
-
- template <>
- struct iterate_t<1> {
- template <typename F, typename X>
- constexpr decltype(auto) operator()(F&& f, X&& x) const {
- return f(static_cast<X&&>(x));
- }
- };
-
- template <>
- struct iterate_t<2> {
- template <typename F, typename X>
- constexpr decltype(auto) operator()(F&& f, X&& x) const {
- return f(f(static_cast<X&&>(x)));
- }
- };
-
- template <>
- struct iterate_t<3> {
- template <typename F, typename X>
- constexpr decltype(auto) operator()(F&& f, X&& x) const {
- return f(f(f(static_cast<X&&>(x))));
- }
- };
-
- template <>
- struct iterate_t<4> {
- template <typename F, typename X>
- constexpr decltype(auto) operator()(F&& f, X&& x) const {
- return f(f(f(f(static_cast<X&&>(x)))));
- }
- };
-
- template <>
- struct iterate_t<5> {
- template <typename F, typename X>
- constexpr decltype(auto) operator()(F&& f, X&& x) const {
- return f(f(f(f(f(static_cast<X&&>(x))))));
- }
- };
-
- template <std::size_t n>
- struct iterate_t<n, when<(n >= 6) && (n < 12)>> {
- template <typename F, typename X>
- constexpr decltype(auto) operator()(F&& f, X&& x) const {
- return iterate_t<n - 6>{}(f,
- f(f(f(f(f(f(static_cast<X&&>(x)))))))
- );
- }
- };
-
- template <std::size_t n>
- struct iterate_t<n, when<(n >= 12) && (n < 24)>> {
- template <typename F, typename X>
- constexpr decltype(auto) operator()(F&& f, X&& x) const {
- return iterate_t<n - 12>{}(f,
- f(f(f(f(f(f(f(f(f(f(f(f(
- static_cast<X&&>(x)
- ))))))))))))
- );
- }
- };
-
- template <std::size_t n>
- struct iterate_t<n, when<(n >= 24) && (n < 48)>> {
- template <typename F, typename X>
- constexpr decltype(auto) operator()(F&& f, X&& x) const {
- return iterate_t<n - 24>{}(f,
- f(f(f(f(f(f(f(f(f(f(f(f(
- f(f(f(f(f(f(f(f(f(f(f(f(
- static_cast<X&&>(x)
- ))))))))))))
- ))))))))))))
- );
- }
- };
-
- template <std::size_t n>
- struct iterate_t<n, when<(n >= 48)>> {
- template <typename F, typename X>
- constexpr decltype(auto) operator()(F&& f, X&& x) const {
- return iterate_t<n - 48>{}(f,
- f(f(f(f(f(f(f(f(f(f(f(f(
- f(f(f(f(f(f(f(f(f(f(f(f(
- f(f(f(f(f(f(f(f(f(f(f(f(
- f(f(f(f(f(f(f(f(f(f(f(f(
- static_cast<X&&>(x)
- ))))))))))))
- ))))))))))))
- ))))))))))))
- ))))))))))))
- );
- }
- };
-
- template <std::size_t n>
- struct make_iterate_t {
- template <typename F>
- constexpr decltype(auto) operator()(F&& f) const
- { return hana::partial(iterate_t<n>{}, static_cast<F&&>(f)); }
-
- template <typename F, typename X>
- constexpr decltype(auto) operator()(F&& f, X&& x) const {
- return iterate_t<n>{}(static_cast<F&&>(f),
- static_cast<X&&>(x));
- }
- };
-
- template <std::size_t n>
- constexpr make_iterate_t<n> iterate{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_ITERATE_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/lockstep.hpp b/contrib/restricted/boost/boost/hana/functional/lockstep.hpp
deleted file mode 100644
index 2f60781883..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/lockstep.hpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/*!
-@file
-Defines `boost::hana::lockstep`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_LOCKSTEP_HPP
-#define BOOST_HANA_FUNCTIONAL_LOCKSTEP_HPP
-
-#include <boost/hana/basic_tuple.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Invoke a function with the result of invoking other functions on its
- //! arguments, in lockstep.
- //!
- //! Specifically, `lockstep(f)(g1, ..., gN)` is a function such that
- //! @code
- //! lockstep(f)(g1, ..., gN)(x1, ..., xN) == f(g1(x1), ..., gN(xN))
- //! @endcode
- //!
- //! Since each `g` is invoked on its corresponding argument in lockstep,
- //! the number of arguments must match the number of `g`s.
- //!
- //!
- //! Example
- //! -------
- //! @include example/functional/lockstep.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto lockstep = [](auto&& f, auto&& ...g) {
- return [perfect-capture](auto&& ...x) -> decltype(auto) {
- return forwarded(f)(forwarded(g)(forwarded(x))...);
- };
- };
-#else
- template <typename Indices, typename F, typename ...G>
- struct lockstep_t;
-
- template <typename F>
- struct pre_lockstep_t;
-
- struct make_pre_lockstep_t {
- struct secret { };
- template <typename F>
- constexpr pre_lockstep_t<typename detail::decay<F>::type> operator()(F&& f) const {
- return {static_cast<F&&>(f)};
- }
- };
-
- template <std::size_t ...n, typename F, typename ...G>
- struct lockstep_t<std::index_sequence<n...>, F, G...> {
- template <typename ...T>
- constexpr lockstep_t(make_pre_lockstep_t::secret, T&& ...t)
- : storage_{static_cast<T&&>(t)...}
- { }
-
- basic_tuple<F, G...> storage_;
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) const& {
- return hana::at_c<0>(storage_)(
- hana::at_c<n+1>(storage_)(static_cast<X&&>(x))...
- );
- }
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) & {
- return hana::at_c<0>(storage_)(
- hana::at_c<n+1>(storage_)(static_cast<X&&>(x))...
- );
- }
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) && {
- return static_cast<F&&>(hana::at_c<0>(storage_))(
- static_cast<G&&>(hana::at_c<n+1>(storage_))(static_cast<X&&>(x))...
- );
- }
- };
-
- template <typename F>
- struct pre_lockstep_t {
- F f;
-
- template <typename ...G>
- constexpr lockstep_t<std::make_index_sequence<sizeof...(G)>, F,
- typename detail::decay<G>::type...>
- operator()(G&& ...g) const& {
- return {make_pre_lockstep_t::secret{}, this->f, static_cast<G&&>(g)...};
- }
-
- template <typename ...G>
- constexpr lockstep_t<std::make_index_sequence<sizeof...(G)>, F,
- typename detail::decay<G>::type...>
- operator()(G&& ...g) && {
- return {make_pre_lockstep_t::secret{}, static_cast<F&&>(this->f),
- static_cast<G&&>(g)...};
- }
- };
-
- constexpr make_pre_lockstep_t lockstep{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_LOCKSTEP_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/on.hpp b/contrib/restricted/boost/boost/hana/functional/on.hpp
deleted file mode 100644
index 59561870a3..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/on.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/*!
-@file
-Defines `boost::hana::on`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_ON_HPP
-#define BOOST_HANA_FUNCTIONAL_ON_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/create.hpp>
-#include <boost/hana/functional/infix.hpp>
-
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Invoke a function with the result of invoking another function on
- //! each argument.
- //!
- //! Specifically, `on(f, g)` is a function such that
- //! @code
- //! on(f, g)(x...) == f(g(x)...)
- //! @endcode
- //!
- //! For convenience, `on` also supports infix application as provided
- //! by `infix`.
- //!
- //!
- //! @note
- //! `on` is associative, i.e. `on(f, on(g, h))` is equivalent to
- //! `on(on(f, g), h)`.
- //!
- //! @internal
- //! ### Proof of associativity
- //!
- //! @code
- //! on(f, on(g, h))(xs...) == f(on(g, h)(xs)...)
- //! == f(g(h(xs))...)
- //!
- //! on(on(f, g), h)(xs...) == on(f, g)(h(xs)...)
- //! == f(g(h(xs))...)
- //! @endcode
- //! @endinternal
- //!
- //!
- //! ### Example
- //! @include example/functional/on.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto on = infix([](auto&& f, auto&& g) {
- return [perfect-capture](auto&& ...x) -> decltype(auto) {
- return forwarded(f)(g(forwarded(x))...);
- };
- });
-#else
- template <typename F, typename G>
- struct on_t {
- F f; G g;
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) const& {
- return f(g(static_cast<X&&>(x))...);
- }
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) & {
- return f(g(static_cast<X&&>(x))...);
- }
-
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) && {
- return std::move(f)(g(static_cast<X&&>(x))...);
- }
- };
-
- constexpr auto on = infix(detail::create<on_t>{});
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_ON_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/overload.hpp b/contrib/restricted/boost/boost/hana/functional/overload.hpp
deleted file mode 100644
index d8ce96a5ac..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/overload.hpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/*!
-@file
-Defines `boost::hana::overload`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_OVERLOAD_HPP
-#define BOOST_HANA_FUNCTIONAL_OVERLOAD_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Pick one of several functions to call based on overload resolution.
- //!
- //! Specifically, `overload(f1, f2, ..., fn)` is a function object such
- //! that
- //! @code
- //! overload(f1, f2, ..., fn)(x...) == fk(x...)
- //! @endcode
- //!
- //! where `fk` is the function of `f1, ..., fn` that would be called if
- //! overload resolution was performed amongst that set of functions only.
- //! If more than one function `fk` would be picked by overload resolution,
- //! then the call is ambiguous.
- //!
- //! ### Example
- //! @include example/functional/overload.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto overload = [](auto&& f1, auto&& f2, ..., auto&& fn) {
- return [perfect-capture](auto&& ...x) -> decltype(auto) {
- return forwarded(fk)(forwarded(x)...);
- };
- };
-#else
- template <typename F, typename ...G>
- struct overload_t
- : overload_t<F>::type
- , overload_t<G...>::type
- {
- using type = overload_t;
- using overload_t<F>::type::operator();
- using overload_t<G...>::type::operator();
-
- template <typename F_, typename ...G_>
- constexpr explicit overload_t(F_&& f, G_&& ...g)
- : overload_t<F>::type(static_cast<F_&&>(f))
- , overload_t<G...>::type(static_cast<G_&&>(g)...)
- { }
- };
-
- template <typename F>
- struct overload_t<F> { using type = F; };
-
- template <typename R, typename ...Args>
- struct overload_t<R(*)(Args...)> {
- using type = overload_t;
- R (*fptr_)(Args...);
-
- explicit constexpr overload_t(R (*fp)(Args...))
- : fptr_(fp)
- { }
-
- constexpr R operator()(Args ...args) const
- { return fptr_(static_cast<Args&&>(args)...); }
- };
-
- struct make_overload_t {
- template <typename ...F,
- typename Overload = typename overload_t<
- typename detail::decay<F>::type...
- >::type
- >
- constexpr Overload operator()(F&& ...f) const {
- return Overload(static_cast<F&&>(f)...);
- }
- };
-
- constexpr make_overload_t overload{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_OVERLOAD_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/overload_linearly.hpp b/contrib/restricted/boost/boost/hana/functional/overload_linearly.hpp
deleted file mode 100644
index e4129d1169..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/overload_linearly.hpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/*!
-@file
-Defines `boost::hana::overload_linearly`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_OVERLOAD_LINEARLY_HPP
-#define BOOST_HANA_FUNCTIONAL_OVERLOAD_LINEARLY_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Call the first function that produces a valid call expression.
- //!
- //! Given functions `f1, ..., fn`, `overload_linearly(f1, ..., fn)` is
- //! a new function that calls the first `fk` producing a valid call
- //! expression with the given arguments. Specifically,
- //! @code
- //! overload_linearly(f1, ..., fn)(args...) == fk(args...)
- //! @endcode
- //!
- //! where `fk` is the _first_ function such that `fk(args...)` is a valid
- //! expression.
- //!
- //!
- //! Example
- //! -------
- //! @include example/functional/overload_linearly.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto overload_linearly = [](auto&& f1, auto&& f2, ..., auto&& fn) {
- return [perfect-capture](auto&& ...x) -> decltype(auto) {
- return forwarded(fk)(forwarded(x)...);
- };
- };
-#else
- template <typename F, typename G>
- struct overload_linearly_t {
- F f;
- G g;
-
- private:
- template <typename ...Args, typename =
- decltype(std::declval<F const&>()(std::declval<Args>()...))>
- constexpr F const& which(int) const& { return f; }
-
- template <typename ...Args, typename =
- decltype(std::declval<F&>()(std::declval<Args>()...))>
- constexpr F& which(int) & { return f; }
-
- template <typename ...Args, typename =
- decltype(std::declval<F&&>()(std::declval<Args>()...))>
- constexpr F which(int) && { return static_cast<F&&>(f); }
-
- template <typename ...Args>
- constexpr G const& which(long) const& { return g; }
-
- template <typename ...Args>
- constexpr G& which(long) & { return g; }
-
- template <typename ...Args>
- constexpr G which(long) && { return static_cast<G&&>(g); }
-
- public:
- template <typename ...Args>
- constexpr decltype(auto) operator()(Args&& ...args) const&
- { return which<Args...>(int{})(static_cast<Args&&>(args)...); }
-
- template <typename ...Args>
- constexpr decltype(auto) operator()(Args&& ...args) &
- { return which<Args...>(int{})(static_cast<Args&&>(args)...); }
-
- template <typename ...Args>
- constexpr decltype(auto) operator()(Args&& ...args) &&
- { return which<Args...>(int{})(static_cast<Args&&>(args)...); }
- };
-
- struct make_overload_linearly_t {
- template <typename F, typename G>
- constexpr overload_linearly_t<
- typename detail::decay<F>::type,
- typename detail::decay<G>::type
- > operator()(F&& f, G&& g) const {
- return {static_cast<F&&>(f), static_cast<G&&>(g)};
- }
-
- template <typename F, typename G, typename ...H>
- constexpr decltype(auto) operator()(F&& f, G&& g, H&& ...h) const {
- return (*this)(static_cast<F&&>(f),
- (*this)(static_cast<G&&>(g), static_cast<H&&>(h)...));
- }
-
- template <typename F>
- constexpr typename detail::decay<F>::type operator()(F&& f) const {
- return static_cast<F&&>(f);
- }
- };
-
- constexpr make_overload_linearly_t overload_linearly{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_OVERLOAD_LINEARLY_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/partial.hpp b/contrib/restricted/boost/boost/hana/functional/partial.hpp
deleted file mode 100644
index cfe981dddf..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/partial.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*!
-@file
-Defines `boost::hana::partial`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_PARTIAL_HPP
-#define BOOST_HANA_FUNCTIONAL_PARTIAL_HPP
-
-#include <boost/hana/basic_tuple.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Partially apply a function to some arguments.
- //!
- //! Given a function `f` and some arguments, `partial` returns a new
- //! function corresponding to the partially applied function `f`. This
- //! allows providing some arguments to a function and letting the rest
- //! of the arguments be provided later. Specifically, `partial(f, x...)`
- //! is a function such that
- //! @code
- //! partial(f, x...)(y...) == f(x..., y...)
- //! @endcode
- //!
- //! @note
- //! The arity of `f` must match the total number of arguments passed to
- //! it, i.e. `sizeof...(x) + sizeof...(y)`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/functional/partial.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto partial = [](auto&& f, auto&& ...x) {
- return [perfect-capture](auto&& ...y) -> decltype(auto) {
- return forwarded(f)(forwarded(x)..., forwarded(y)...);
- };
- };
-#else
- template <typename Indices, typename F, typename ...X>
- struct partial_t;
-
- struct make_partial_t {
- struct secret { };
- template <typename F, typename ...X>
- constexpr partial_t<
- std::make_index_sequence<sizeof...(X)>,
- typename detail::decay<F>::type,
- typename detail::decay<X>::type...
- >
- operator()(F&& f, X&& ...x) const {
- return {secret{}, static_cast<F&&>(f), static_cast<X&&>(x)...};
- }
- };
-
- template <std::size_t ...n, typename F, typename ...X>
- struct partial_t<std::index_sequence<n...>, F, X...> {
- partial_t() = default;
-
- template <typename ...T>
- constexpr partial_t(make_partial_t::secret, T&& ...t)
- : storage_{static_cast<T&&>(t)...}
- { }
-
- basic_tuple<F, X...> storage_;
-
- template <typename ...Y>
- constexpr decltype(auto) operator()(Y&& ...y) const& {
- return hana::at_c<0>(storage_)(
- hana::at_c<n+1>(storage_)...,
- static_cast<Y&&>(y)...
- );
- }
-
- template <typename ...Y>
- constexpr decltype(auto) operator()(Y&& ...y) & {
- return hana::at_c<0>(storage_)(
- hana::at_c<n+1>(storage_)...,
- static_cast<Y&&>(y)...
- );
- }
-
- template <typename ...Y>
- constexpr decltype(auto) operator()(Y&& ...y) && {
- return static_cast<F&&>(hana::at_c<0>(storage_))(
- static_cast<X&&>(hana::at_c<n+1>(storage_))...,
- static_cast<Y&&>(y)...
- );
- }
- };
-
- constexpr make_partial_t partial{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_PARTIAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/placeholder.hpp b/contrib/restricted/boost/boost/hana/functional/placeholder.hpp
deleted file mode 100644
index 59dea42bfb..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/placeholder.hpp
+++ /dev/null
@@ -1,263 +0,0 @@
-/*!
-@file
-Defines `boost::hana::_`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_PLACEHOLDER_HPP
-#define BOOST_HANA_FUNCTIONAL_PLACEHOLDER_HPP
-
-#include <boost/hana/basic_tuple.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/create.hpp>
-#include <boost/hana/detail/decay.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Create simple functions representing C++ operators inline.
- //!
- //! Specifically, `_` is an object used as a placeholder to build
- //! function objects representing calls to C++ operators. It works
- //! by overloading the operators between `_` and any object so that
- //! they return a function object which actually calls the corresponding
- //! operator on its argument(s). Hence, for any supported operator `@`:
- //! @code
- //! (_ @ _)(x, y) == x @ y
- //! @endcode
- //!
- //! Operators may also be partially applied to one argument inline:
- //! @code
- //! (x @ _)(y) == x @ y
- //! (_ @ y)(x) == x @ y
- //! @endcode
- //!
- //! When invoked with more arguments than required, functions created with
- //! `_` will discard the superfluous instead of triggering an error:
- //! @code
- //! (_ @ _)(x, y, z...) == x @ y
- //! @endcode
- //!
- //! This makes functions created with `_` easier to use in higher-order
- //! algorithms, which sometime provide more information than necessary
- //! to their callbacks.
- //!
- //! ### Supported operators
- //! - Arithmetic: binary `+`, binary `-`, `/`, `*`, `%`, unary `+`, unary `-`
- //! - Bitwise: `~`, `&`, `|`, `^`, `<<`, `>>`
- //! - Comparison: `==`, `!=`, `<`, `<=`, `>`, `>=`
- //! - %Logical: `||`, `&&`, `!`
- //! - Member access: `*` (dereference), `[]` (array subscript)
- //! - Other: `()` (function call)
- //!
- //! More complex functionality like the ability to compose placeholders
- //! into larger function objects inline are not supported. This is on
- //! purpose; you should either use C++14 generic lambdas or a library
- //! like [Boost.Phoenix][] if you need bigger guns. The goal here is
- //! to save you a couple of characters in simple situations.
- //!
- //! ### Example
- //! @include example/functional/placeholder.cpp
- //!
- //! [Boost.Phoenix]: http://www.boost.org/doc/libs/release/libs/phoenix/doc/html/index.html
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr unspecified _{};
-#else
- namespace placeholder_detail {
- template <typename I>
- struct subscript {
- I i;
-
- template <typename Xs, typename ...Z>
- constexpr auto operator()(Xs&& xs, Z const& ...) const&
- -> decltype(static_cast<Xs&&>(xs)[i])
- { return static_cast<Xs&&>(xs)[i]; }
-
- template <typename Xs, typename ...Z>
- constexpr auto operator()(Xs&& xs, Z const& ...) &
- -> decltype(static_cast<Xs&&>(xs)[i])
- { return static_cast<Xs&&>(xs)[i]; }
-
- template <typename Xs, typename ...Z>
- constexpr auto operator()(Xs&& xs, Z const& ...) &&
- -> decltype(static_cast<Xs&&>(xs)[std::declval<I>()])
- { return static_cast<Xs&&>(xs)[std::move(i)]; }
- };
-
- template <typename F, typename Xs, std::size_t ...i>
- constexpr decltype(auto) invoke_impl(F&& f, Xs&& xs, std::index_sequence<i...>) {
- return static_cast<F&&>(f)(hana::at_c<i>(static_cast<Xs&&>(xs).storage_)...);
- }
-
- template <typename ...X>
- struct invoke;
-
- struct placeholder {
- struct secret { };
-
- template <typename X>
- constexpr decltype(auto) operator[](X&& x) const
- { return detail::create<subscript>{}(static_cast<X&&>(x)); }
-
- template <typename ...X>
- constexpr invoke<typename detail::decay<X>::type...>
- operator()(X&& ...x) const {
- return {secret{}, static_cast<X&&>(x)...};
- }
- };
-
- template <typename ...X>
- struct invoke {
- template <typename ...Y>
- constexpr invoke(placeholder::secret, Y&& ...y)
- : storage_{static_cast<Y&&>(y)...}
- { }
-
- basic_tuple<X...> storage_;
-
- template <typename F, typename ...Z>
- constexpr auto operator()(F&& f, Z const& ...) const& -> decltype(
- static_cast<F&&>(f)(std::declval<X const&>()...)
- ) {
- return invoke_impl(static_cast<F&&>(f), *this,
- std::make_index_sequence<sizeof...(X)>{});
- }
-
- template <typename F, typename ...Z>
- constexpr auto operator()(F&& f, Z const& ...) & -> decltype(
- static_cast<F&&>(f)(std::declval<X&>()...)
- ) {
- return invoke_impl(static_cast<F&&>(f), *this,
- std::make_index_sequence<sizeof...(X)>{});
- }
-
- template <typename F, typename ...Z>
- constexpr auto operator()(F&& f, Z const& ...) && -> decltype(
- static_cast<F&&>(f)(std::declval<X&&>()...)
- ) {
- return invoke_impl(static_cast<F&&>(f), static_cast<invoke&&>(*this),
- std::make_index_sequence<sizeof...(X)>{});
- }
- };
-
-#define BOOST_HANA_PLACEHOLDER_BINARY_OP(op, op_name) \
- template <typename X> \
- struct op_name ## _left { \
- X x; \
- \
- template <typename Y, typename ...Z> \
- constexpr auto operator()(Y&& y, Z const& ...) const& -> decltype( \
- std::declval<X const&>() op static_cast<Y&&>(y)) \
- { return x op static_cast<Y&&>(y); } \
- \
- template <typename Y, typename ...Z> \
- constexpr auto operator()(Y&& y, Z const& ...) & -> decltype( \
- std::declval<X&>() op static_cast<Y&&>(y)) \
- { return x op static_cast<Y&&>(y); } \
- \
- template <typename Y, typename ...Z> \
- constexpr auto operator()(Y&& y, Z const& ...) && -> decltype( \
- std::declval<X>() op static_cast<Y&&>(y)) \
- { return std::move(x) op static_cast<Y&&>(y); } \
- }; \
- \
- template <typename Y> \
- struct op_name ## _right { \
- Y y; \
- \
- template <typename X, typename ...Z> \
- constexpr auto operator()(X&& x, Z const& ...) const& -> decltype( \
- static_cast<X&&>(x) op std::declval<Y const&>()) \
- { return static_cast<X&&>(x) op y; } \
- \
- template <typename X, typename ...Z> \
- constexpr auto operator()(X&& x, Z const& ...) & -> decltype( \
- static_cast<X&&>(x) op std::declval<Y&>()) \
- { return static_cast<X&&>(x) op y; } \
- \
- template <typename X, typename ...Z> \
- constexpr auto operator()(X&& x, Z const& ...) && -> decltype( \
- static_cast<X&&>(x) op std::declval<Y>()) \
- { return static_cast<X&&>(x) op std::move(y); } \
- }; \
- \
- struct op_name { \
- template <typename X, typename Y, typename ...Z> \
- constexpr auto operator()(X&& x, Y&& y, Z const& ...) const -> decltype(\
- static_cast<X&&>(x) op static_cast<Y&&>(y)) \
- { return static_cast<X&&>(x) op static_cast<Y&&>(y); } \
- }; \
- \
- template <typename X> \
- constexpr decltype(auto) operator op (X&& x, placeholder) \
- { return detail::create<op_name ## _left>{}(static_cast<X&&>(x)); } \
- \
- template <typename Y> \
- constexpr decltype(auto) operator op (placeholder, Y&& y) \
- { return detail::create<op_name ## _right>{}(static_cast<Y&&>(y)); } \
- \
- inline constexpr decltype(auto) operator op (placeholder, placeholder) \
- { return op_name{}; } \
-/**/
-
-#define BOOST_HANA_PLACEHOLDER_UNARY_OP(op, op_name) \
- struct op_name { \
- template <typename X, typename ...Z> \
- constexpr auto operator()(X&& x, Z const& ...) const \
- -> decltype(op static_cast<X&&>(x)) \
- { return op static_cast<X&&>(x); } \
- }; \
- \
- inline constexpr decltype(auto) operator op (placeholder) \
- { return op_name{}; } \
-/**/
- // Arithmetic
- BOOST_HANA_PLACEHOLDER_UNARY_OP(+, unary_plus)
- BOOST_HANA_PLACEHOLDER_UNARY_OP(-, unary_minus)
- BOOST_HANA_PLACEHOLDER_BINARY_OP(+, plus)
- BOOST_HANA_PLACEHOLDER_BINARY_OP(-, minus)
- BOOST_HANA_PLACEHOLDER_BINARY_OP(*, times)
- BOOST_HANA_PLACEHOLDER_BINARY_OP(/, divide)
- BOOST_HANA_PLACEHOLDER_BINARY_OP(%, modulo)
-
- // Bitwise
- BOOST_HANA_PLACEHOLDER_UNARY_OP(~, bitwise_not)
- BOOST_HANA_PLACEHOLDER_BINARY_OP(&, bitwise_and)
- BOOST_HANA_PLACEHOLDER_BINARY_OP(|, bitwise_or)
- BOOST_HANA_PLACEHOLDER_BINARY_OP(^, bitwise_xor)
- BOOST_HANA_PLACEHOLDER_BINARY_OP(<<, left_shift)
- BOOST_HANA_PLACEHOLDER_BINARY_OP(>>, right_shift)
-
- // Comparison
- BOOST_HANA_PLACEHOLDER_BINARY_OP(==, equal)
- BOOST_HANA_PLACEHOLDER_BINARY_OP(!=, not_equal)
- BOOST_HANA_PLACEHOLDER_BINARY_OP(<, less)
- BOOST_HANA_PLACEHOLDER_BINARY_OP(<=, less_equal)
- BOOST_HANA_PLACEHOLDER_BINARY_OP(>, greater)
- BOOST_HANA_PLACEHOLDER_BINARY_OP(>=, greater_equal)
-
- // Logical
- BOOST_HANA_PLACEHOLDER_BINARY_OP(||, logical_or)
- BOOST_HANA_PLACEHOLDER_BINARY_OP(&&, logical_and)
- BOOST_HANA_PLACEHOLDER_UNARY_OP(!, logical_not)
-
- // Member access (array subscript is a member function)
- BOOST_HANA_PLACEHOLDER_UNARY_OP(*, dereference)
-
- // Other (function call is a member function)
-
-#undef BOOST_HANA_PREFIX_PLACEHOLDER_OP
-#undef BOOST_HANA_BINARY_PLACEHOLDER_OP
- } // end namespace placeholder_detail
-
- constexpr placeholder_detail::placeholder _{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_PLACEHOLDER_HPP
diff --git a/contrib/restricted/boost/boost/hana/functional/reverse_partial.hpp b/contrib/restricted/boost/boost/hana/functional/reverse_partial.hpp
deleted file mode 100644
index 60fc59e400..0000000000
--- a/contrib/restricted/boost/boost/hana/functional/reverse_partial.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/*!
-@file
-Defines `boost::hana::reverse_partial`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUNCTIONAL_REVERSE_PARTIAL_HPP
-#define BOOST_HANA_FUNCTIONAL_REVERSE_PARTIAL_HPP
-
-#include <boost/hana/basic_tuple.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-functional
- //! Partially apply a function to some arguments.
- //!
- //! Given a function `f` and some arguments, `reverse_partial` returns a
- //! new function corresponding to `f` whose last arguments are partially
- //! applied. Specifically, `reverse_partial(f, x...)` is a function such
- //! that
- //! @code
- //! reverse_partial(f, x...)(y...) == f(y..., x...)
- //! @endcode
- //!
- //! @note
- //! The arity of `f` must match the total number of arguments passed to
- //! it, i.e. `sizeof...(x) + sizeof...(y)`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/functional/reverse_partial.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto reverse_partial = [](auto&& f, auto&& ...x) {
- return [perfect-capture](auto&& ...y) -> decltype(auto) {
- return forwarded(f)(forwarded(y)..., forwarded(x)...);
- };
- };
-#else
- template <typename Indices, typename F, typename ...X>
- struct reverse_partial_t;
-
- struct make_reverse_partial_t {
- struct secret { };
- template <typename F, typename ...X>
- constexpr reverse_partial_t<
- std::make_index_sequence<sizeof...(X)>,
- typename detail::decay<F>::type,
- typename detail::decay<X>::type...
- > operator()(F&& f, X&& ...x) const {
- return {secret{}, static_cast<F&&>(f), static_cast<X&&>(x)...};
- }
- };
-
- template <std::size_t ...n, typename F, typename ...X>
- struct reverse_partial_t<std::index_sequence<n...>, F, X...> {
- reverse_partial_t() = default;
-
- template <typename ...T>
- constexpr reverse_partial_t(make_reverse_partial_t::secret, T&& ...t)
- : storage_{static_cast<T&&>(t)...}
- { }
-
- basic_tuple<F, X...> storage_;
-
- template <typename ...Y>
- constexpr decltype(auto) operator()(Y&& ...y) const& {
- return hana::at_c<0>(storage_)(
- static_cast<Y&&>(y)...,
- hana::at_c<n+1>(storage_)...
- );
- }
-
- template <typename ...Y>
- constexpr decltype(auto) operator()(Y&& ...y) & {
- return hana::at_c<0>(storage_)(
- static_cast<Y&&>(y)...,
- hana::at_c<n+1>(storage_)...
- );
- }
-
- template <typename ...Y>
- constexpr decltype(auto) operator()(Y&& ...y) && {
- return static_cast<F&&>(hana::at_c<0>(storage_))(
- static_cast<Y&&>(y)...,
- static_cast<X&&>(hana::at_c<n+1>(storage_))...
- );
- }
- };
-
- constexpr make_reverse_partial_t reverse_partial{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUNCTIONAL_REVERSE_PARTIAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/fuse.hpp b/contrib/restricted/boost/boost/hana/fuse.hpp
deleted file mode 100644
index 960aaee1bc..0000000000
--- a/contrib/restricted/boost/boost/hana/fuse.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*!
-@file
-Defines `boost::hana::fuse`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FUSE_HPP
-#define BOOST_HANA_FUSE_HPP
-
-#include <boost/hana/fwd/fuse.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/unpack.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace detail {
- template <typename F>
- struct fused {
- F f;
- template <typename Xs>
- constexpr decltype(auto) operator()(Xs&& xs) const&
- { return hana::unpack(static_cast<Xs&&>(xs), f); }
-
- template <typename Xs>
- constexpr decltype(auto) operator()(Xs&& xs) &
- { return hana::unpack(static_cast<Xs&&>(xs), f); }
-
- template <typename Xs>
- constexpr decltype(auto) operator()(Xs&& xs) &&
- { return hana::unpack(static_cast<Xs&&>(xs), static_cast<F&&>(f)); }
- };
- }
-
- //! @cond
- template <typename F>
- constexpr auto fuse_t::operator()(F&& f) const {
- return detail::fused<typename detail::decay<F>::type>{static_cast<F&&>(f)};
- }
- //! @endcond
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FUSE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/accessors.hpp b/contrib/restricted/boost/boost/hana/fwd/accessors.hpp
deleted file mode 100644
index ca337d1965..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/accessors.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::accessors`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ACCESSORS_HPP
-#define BOOST_HANA_FWD_ACCESSORS_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns a `Sequence` of pairs representing the accessors of the
- //! data structure.
- //! @ingroup group-Struct
- //!
- //! Given a `Struct` `S`, `accessors<S>()` is a `Sequence` of `Product`s
- //! where the first element of each pair is the "name" of a member of
- //! the `Struct`, and the second element of each pair is a function that
- //! can be used to access that member when given an object of the proper
- //! data type. As described in the global documentation for `Struct`, the
- //! accessor functions in this sequence must be move-independent.
- //!
- //!
- //! Example
- //! -------
- //! @include example/accessors.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename S>
- constexpr auto accessors = []() {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct accessors_impl : accessors_impl<S, when<true>> { };
-
- template <typename S>
- struct accessors_t;
-
- template <typename S>
- constexpr accessors_t<S> accessors{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ACCESSORS_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/adapt_adt.hpp b/contrib/restricted/boost/boost/hana/fwd/adapt_adt.hpp
deleted file mode 100644
index a7658ca628..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/adapt_adt.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*!
-@file
-Documents the `BOOST_HANA_ADAPT_ADT` macro.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ADAPT_ADT_HPP
-#define BOOST_HANA_FWD_ADAPT_ADT_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- // Note:
- // The weird definition as a variable seems to exploit a glitch in Doxygen
- // which makes the macro appear in the related objects of Struct (as we
- // want it to).
-
- //! Defines a model of `Struct` with the given accessors.
- //! @ingroup group-Struct
- //!
- //! Using this macro at _global scope_ will define a model of the `Struct`
- //! concept for the given type. This can be used to easily adapt existing
- //! user-defined types in a ad-hoc manner. Unlike `BOOST_HANA_ADAPT_STRUCT`,
- //! this macro requires specifying the way to retrieve each member by
- //! providing a function that does the extraction.
- //!
- //! @note
- //! This macro only works if the tag of the user-defined type `T` is `T`
- //! itself. This is the case unless you specifically asked for something
- //! different; see `tag_of`'s documentation.
- //!
- //!
- //! Example
- //! -------
- //! @include example/adapt_adt.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- auto BOOST_HANA_ADAPT_ADT(...) = ;
- #define BOOST_HANA_ADAPT_ADT(Name, ...) see documentation
-#else
- // defined in <boost/hana/adapt_adt.hpp>
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ADAPT_ADT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/adapt_struct.hpp b/contrib/restricted/boost/boost/hana/fwd/adapt_struct.hpp
deleted file mode 100644
index b03da6463b..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/adapt_struct.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*!
-@file
-Documents the `BOOST_HANA_ADAPT_STRUCT` macro.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ADAPT_STRUCT_HPP
-#define BOOST_HANA_FWD_ADAPT_STRUCT_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- // Note:
- // The weird definition as a variable seems to exploit a glitch in Doxygen
- // which makes the macro appear in the related objects of Struct (as we
- // want it to).
-
- //! Defines a model of `Struct` with the given members.
- //! @ingroup group-Struct
- //!
- //! Using this macro at _global scope_ will define a model of the `Struct`
- //! concept for the given type. This can be used to easily adapt existing
- //! user-defined types in a ad-hoc manner. Unlike the
- //! `BOOST_HANA_DEFINE_STRUCT` macro, this macro does not
- //! require the types of the members to be specified.
- //!
- //! @note
- //! This macro only works if the tag of the user-defined type `T` is `T`
- //! itself. This is the case unless you specifically asked for something
- //! different; see `tag_of`'s documentation.
- //!
- //!
- //! Example
- //! -------
- //! @include example/adapt_struct.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- auto BOOST_HANA_ADAPT_STRUCT(...) = ;
- #define BOOST_HANA_ADAPT_STRUCT(Name, ...) see documentation
-#else
- // defined in <boost/hana/adapt_struct.hpp>
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ADAPT_STRUCT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/adjust.hpp b/contrib/restricted/boost/boost/hana/fwd/adjust.hpp
deleted file mode 100644
index 8fec6f0b3d..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/adjust.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::adjust`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ADJUST_HPP
-#define BOOST_HANA_FWD_ADJUST_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Apply a function on all the elements of a structure that compare
- //! equal to some value.
- //! @ingroup group-Functor
- //!
- //!
- //! Signature
- //! ---------
- //! Given `F` a Functor and `U` a type that can be compared with `T`'s,
- //! the signature is
- //! \f$
- //! \mathtt{adjust} : F(T) \times U \times (T \to T) \to F(T)
- //! \f$
- //!
- //! @param xs
- //! The structure to adjust with `f`.
- //!
- //! @param value
- //! An object that is compared with each element `x` of the structure.
- //! Elements of the structure that compare equal to `value` are adjusted
- //! with the `f` function.
- //!
- //! @param f
- //! A function called as `f(x)` on the element(s) of the structure that
- //! compare equal to `value`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/adjust.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto adjust = [](auto&& xs, auto&& value, auto&& f) {
- return tag-dispatched;
- };
-#else
- template <typename Xs, typename = void>
- struct adjust_impl : adjust_impl<Xs, when<true>> { };
-
- struct adjust_t {
- template <typename Xs, typename Value, typename F>
- constexpr auto operator()(Xs&& xs, Value&& value, F&& f) const;
- };
-
- constexpr adjust_t adjust{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ADJUST_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/adjust_if.hpp b/contrib/restricted/boost/boost/hana/fwd/adjust_if.hpp
deleted file mode 100644
index 3042dc72c9..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/adjust_if.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::adjust_if`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ADJUST_IF_HPP
-#define BOOST_HANA_FWD_ADJUST_IF_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Apply a function on all the elements of a structure satisfying a predicate.
- //! @ingroup group-Functor
- //!
- //! Given a Functor, a predicate `pred` and a function `f`, `adjust_if`
- //! will _adjust_ the elements of the Functor that satisfy the predicate
- //! with the function `f`. In other words, `adjust_if` will return a new
- //! Functor equal to the original one, except that the elements satisfying
- //! the predicate will be transformed with the given function. Elements
- //! for which the predicate is not satisfied are left untouched, and they
- //! are kept as-is in the resulting Functor.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a `Functor` `F` and a `Logical` `Bool`, the signature is
- //! \f$
- //! \mathtt{adjust\_if} : F(T) \times (T \to Bool) \times (T \to T) \to F(T)
- //! \f$
- //!
- //! @param xs
- //! The structure to adjust with `f`.
- //!
- //! @param pred
- //! A function called as `pred(x)` for each element of the Functor,
- //! and returning whether `f` should be applied on that element.
- //!
- //! @param f
- //! A function called as `f(x)` on the element(s) of the Functor that
- //! satisfy the predicate.
- //!
- //!
- //! Example
- //! -------
- //! @include example/adjust_if.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto adjust_if = [](auto&& xs, auto const& pred, auto const& f) {
- return tag-dispatched;
- };
-#else
- template <typename Xs, typename = void>
- struct adjust_if_impl : adjust_if_impl<Xs, when<true>> { };
-
- struct adjust_if_t {
- template <typename Xs, typename Pred, typename F>
- constexpr auto operator()(Xs&& xs, Pred const& pred, F const& f) const;
- };
-
- constexpr adjust_if_t adjust_if{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ADJUST_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/all.hpp b/contrib/restricted/boost/boost/hana/fwd/all.hpp
deleted file mode 100644
index eca239ebef..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/all.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::all`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ALL_HPP
-#define BOOST_HANA_FWD_ALL_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns whether all the keys of the structure are true-valued.
- //! @ingroup group-Searchable
- //!
- //! The keys of the structure must be `Logical`s. If the structure is not
- //! finite, a false-valued key must appear at a finite "index" in order
- //! for this method to finish.
- //!
- //!
- //! Example
- //! -------
- //! @include example/all.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto all = [](auto&& xs) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct all_impl : all_impl<S, when<true>> { };
-
- struct all_t {
- template <typename Xs>
- constexpr auto operator()(Xs&& xs) const;
- };
-
- constexpr all_t all{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ALL_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/all_of.hpp b/contrib/restricted/boost/boost/hana/fwd/all_of.hpp
deleted file mode 100644
index 3aabf29063..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/all_of.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::all_of`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ALL_OF_HPP
-#define BOOST_HANA_FWD_ALL_OF_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns whether all the keys of the structure satisfy the `predicate`.
- //! @ingroup group-Searchable
- //!
- //! If the structure is not finite, `predicate` has to return a false-
- //! valued `Logical` after looking at a finite number of keys for this
- //! method to finish.
- //!
- //!
- //! @param xs
- //! The structure to search.
- //!
- //! @param predicate
- //! A function called as `predicate(k)`, where `k` is a key of the
- //! structure, and returning a `Logical`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/all_of.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto all_of = [](auto&& xs, auto&& predicate) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct all_of_impl : all_of_impl<S, when<true>> { };
-
- struct all_of_t {
- template <typename Xs, typename Pred>
- constexpr auto operator()(Xs&& xs, Pred&& pred) const;
- };
-
- constexpr all_of_t all_of{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ALL_OF_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/and.hpp b/contrib/restricted/boost/boost/hana/fwd/and.hpp
deleted file mode 100644
index 026cacabaf..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/and.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::and_`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_AND_HPP
-#define BOOST_HANA_FWD_AND_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Return whether all the arguments are true-valued.
- //! @ingroup group-Logical
- //!
- //! `and_` can be called with one argument or more. When called with
- //! two arguments, `and_` uses tag-dispatching to find the right
- //! implementation. Otherwise,
- //! @code
- //! and_(x) == x
- //! and_(x, y, ...z) == and_(and_(x, y), z...)
- //! @endcode
- //!
- //!
- //! Example
- //! -------
- //! @include example/and.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto and_ = [](auto&& x, auto&& ...y) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename L, typename = void>
- struct and_impl : and_impl<L, when<true>> { };
-
- struct and_t {
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) const;
-
- template <typename X, typename ...Y>
- constexpr decltype(auto) operator()(X&& x, Y&& ...y) const;
- };
-
- constexpr and_t and_{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_AND_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/any.hpp b/contrib/restricted/boost/boost/hana/fwd/any.hpp
deleted file mode 100644
index 6281236ad6..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/any.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::any`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ANY_HPP
-#define BOOST_HANA_FWD_ANY_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns whether any key of the structure is true-valued.
- //! @ingroup group-Searchable
- //!
- //! The keys of the structure must be `Logical`s. If the structure is not
- //! finite, a true-valued key must appear at a finite "index" in order for
- //! this method to finish.
- //!
- //!
- //! Example
- //! -------
- //! @include example/any.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto any = [](auto&& xs) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct any_impl : any_impl<S, when<true>> { };
-
- struct any_t {
- template <typename Xs>
- constexpr auto operator()(Xs&& xs) const;
- };
-
- constexpr any_t any{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ANY_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/any_of.hpp b/contrib/restricted/boost/boost/hana/fwd/any_of.hpp
deleted file mode 100644
index a9408bd1b5..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/any_of.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::any_of`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ANY_OF_HPP
-#define BOOST_HANA_FWD_ANY_OF_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns whether any key of the structure satisfies the `predicate`.
- //! @ingroup group-Searchable
- //!
- //! If the structure is not finite, `predicate` has to be satisfied
- //! after looking at a finite number of keys for this method to finish.
- //!
- //!
- //! @param xs
- //! The structure to search.
- //!
- //! @param predicate
- //! A function called as `predicate(k)`, where `k` is a key of the
- //! structure, and returning a `Logical`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/any_of.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto any_of = [](auto&& xs, auto&& predicate) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct any_of_impl : any_of_impl<S, when<true>> { };
-
- struct any_of_t {
- template <typename Xs, typename Pred>
- constexpr auto operator()(Xs&& xs, Pred&& pred) const;
- };
-
- constexpr any_of_t any_of{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ANY_OF_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/ap.hpp b/contrib/restricted/boost/boost/hana/fwd/ap.hpp
deleted file mode 100644
index 6f7b147090..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/ap.hpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::ap`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_AP_HPP
-#define BOOST_HANA_FWD_AP_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Lifted application.
- //! @ingroup group-Applicative
- //!
- //! Specifically, `ap` applies a structure containing functions to a
- //! structure containing values, and returns a new structure containing
- //! values. The exact way in which the functions are applied to the values
- //! depends on the `Applicative`.
- //!
- //! `ap` can be called with two arguments or more; the functions in the `f`
- //! structure are curried and then applied to the values in each `x...`
- //! structure using the binary form of `ap`. Note that this requires the
- //! number of `x...` must match the arity of the functions in the `f`
- //! structure. In other words, `ap(f, x1, ..., xN)` is equivalent to
- //! @code
- //! ((f' <ap> x1) <ap> x2) ... <ap> xN
- //! @endcode
- //! where `f'` is `f` but containing curried functions instead and
- //! `x <ap> y` is just `ap(x, y)` written in infix notation to emphasize
- //! the left associativity.
- //!
- //!
- //! Signature
- //! ---------
- //! Given an Applicative `A`, the signature is
- //! @f$ \mathtt{ap} : A(T_1 \times \cdots \times T_n \to U)
- //! \times A(T_1) \times \cdots \times A(T_n)
- //! \to A(U) @f$.
- //!
- //! @param f
- //! A structure containing function(s).
- //!
- //! @param x...
- //! Structure(s) containing value(s) and on which `f` is applied. The
- //! number of structures must match the arity of the functions in the
- //! `f` structure.
- //!
- //!
- //! Example
- //! -------
- //! @include example/ap.cpp
- //!
- //! @todo
- //! Consider giving access to all the arguments to the tag-dispatched
- //! implementation for performance purposes.
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto ap = [](auto&& f, auto&& ...x) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename A, typename = void>
- struct ap_impl : ap_impl<A, when<true>> { };
-
- struct ap_t {
- template <typename F, typename X>
- constexpr decltype(auto) operator()(F&& f, X&& x) const;
-
- template <typename F, typename ...Xs>
- constexpr decltype(auto) operator()(F&& f, Xs&& ...xs) const;
- };
-
- constexpr ap_t ap{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_AP_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/append.hpp b/contrib/restricted/boost/boost/hana/fwd/append.hpp
deleted file mode 100644
index 94b2105c93..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/append.hpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::append`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_APPEND_HPP
-#define BOOST_HANA_FWD_APPEND_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Append an element to a monadic structure.
- //! @ingroup group-MonadPlus
- //!
- //! Given an element `x` and a monadic structure `xs`, `append` returns a
- //! new monadic structure which is the result of lifting `x` into the
- //! monadic structure and then combining that (to the right) with `xs`.
- //! In other words,
- //! @code
- //! append(xs, x) == concat(xs, lift<Xs>(x))
- //! @endcode
- //! where `Xs` is the tag of `xs`. For sequences, this has the intuitive
- //! behavior of simply appending an element to the end of the sequence,
- //! hence the name.
- //!
- //! > #### Rationale for not calling this `push_back`
- //! > See the rationale for using `prepend` instead of `push_front`.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a MonadPlus `M`, the signature is
- //! @f$ \mathtt{append} : M(T) \times T \to M(T) @f$.
- //!
- //! @param xs
- //! A monadic structure that will be combined to the left of the element.
- //!
- //! @param x
- //! An element to combine to the right of the monadic structure.
- //!
- //!
- //! Example
- //! -------
- //! @include example/append.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto append = [](auto&& xs, auto&& x) {
- return tag-dispatched;
- };
-#else
- template <typename M, typename = void>
- struct append_impl : append_impl<M, when<true>> { };
-
- struct append_t {
- template <typename Xs, typename X>
- constexpr auto operator()(Xs&& xs, X&& x) const;
- };
-
- constexpr append_t append{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_APPEND_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/at.hpp b/contrib/restricted/boost/boost/hana/fwd/at.hpp
deleted file mode 100644
index ea03114ed7..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/at.hpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::at` and `boost::hana::at_c`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_AT_HPP
-#define BOOST_HANA_FWD_AT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns the `n`th element of an iterable.
- //! @ingroup group-Iterable
- //!
- //! Given an `Iterable` and an `IntegralConstant` index, `at` returns the
- //! element located at the index in the linearization of the iterable.
- //! Specifically, given an iterable `xs` with a linearization of
- //! `[x1, ..., xN]`, `at(xs, k)` is equivalent to `xk`.
- //!
- //! If the `Iterable` actually stores the elements it contains, `at` is
- //! required to return a lvalue reference, a lvalue reference to const
- //! or a rvalue reference to the matching element, where the type of
- //! reference must match that of the iterable passed to `at`. If the
- //! `Iterable` does not store the elements it contains (i.e. it generates
- //! them on demand), this requirement is dropped.
- //!
- //!
- //! @param xs
- //! The iterable in which an element is retrieved. The iterable must
- //! contain at least `n + 1` elements.
- //!
- //! @param n
- //! A non-negative `IntegralConstant` representing the 0-based index of
- //! the element to return. It is an error to call `at` with an index that
- //! out of bounds of the iterable.
- //!
- //!
- //! Example
- //! -------
- //! @include example/at.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto at = [](auto&& xs, auto const& n) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename It, typename = void>
- struct at_impl : at_impl<It, when<true>> { };
-
- struct at_t {
- template <typename Xs, typename N>
- constexpr decltype(auto) operator()(Xs&& xs, N const& n) const;
- };
-
- constexpr at_t at{};
-#endif
-
- //! Equivalent to `at`; provided for convenience.
- //! @ingroup group-Iterable
- //!
- //!
- //! @note
- //! `hana::at_c<n>` is an overloaded function, not a function object.
- //! Hence, it can't be passed to higher-order algorithms. This is done
- //! for compile-time performance reasons.
- //!
- //!
- //! Example
- //! -------
- //! @include example/at_c.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <std::size_t n>
- constexpr auto at_c = [](auto&& xs) {
- return hana::at(forwarded(xs), hana::size_c<n>);
- };
-#else
- template <std::size_t n, typename Xs>
- constexpr decltype(auto) at_c(Xs&& xs);
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_AT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/at_key.hpp b/contrib/restricted/boost/boost/hana/fwd/at_key.hpp
deleted file mode 100644
index 29134565a5..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/at_key.hpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::at_key`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_AT_KEY_HPP
-#define BOOST_HANA_FWD_AT_KEY_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns the value associated to the given key in a structure, or fail.
- //! @ingroup group-Searchable
- //!
- //! Given a `key` and a `Searchable` structure, `at_key` returns the first
- //! value whose key is equal to the given `key`, and fails at compile-time
- //! if no such key exists. This requires the `key` to be compile-time
- //! `Comparable`, exactly like for `find`. `at_key` satisfies the following:
- //! @code
- //! at_key(xs, key) == find(xs, key).value()
- //! @endcode
- //!
- //! If the `Searchable` actually stores the elements it contains, `at_key`
- //! is required to return a lvalue reference, a lvalue reference to const
- //! or a rvalue reference to the found value, where the type of reference
- //! must match that of the structure passed to `at_key`. If the `Searchable`
- //! does not store the elements it contains (i.e. it generates them on
- //! demand), this requirement is dropped.
- //!
- //!
- //! @param xs
- //! The structure to be searched.
- //!
- //! @param key
- //! A key to be searched for in the structure. The key has to be
- //! `Comparable` with the other keys of the structure. In the current
- //! version of the library, the comparison of `key` with any other key
- //! of the structure must return a compile-time `Logical`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/at_key.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto at_key = [](auto&& xs, auto const& key) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct at_key_impl : at_key_impl<S, when<true>> { };
-
- struct at_key_t {
- template <typename Xs, typename Key>
- constexpr decltype(auto) operator()(Xs&& xs, Key const& key) const;
- };
-
- constexpr at_key_t at_key{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_AT_KEY_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/back.hpp b/contrib/restricted/boost/boost/hana/fwd/back.hpp
deleted file mode 100644
index 8356cddeab..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/back.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::back`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_BACK_HPP
-#define BOOST_HANA_FWD_BACK_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns the last element of a non-empty and finite iterable.
- //! @ingroup group-Iterable
- //!
- //! Given a non-empty and finite iterable `xs` with a linearization of
- //! `[x1, ..., xN]`, `back(xs)` is equal to `xN`. Equivalently, `back(xs)`
- //! must be equivalent to `at_c<N-1>(xs)`, and that regardless of the
- //! value category of `xs` (`back` must respect the reference semantics
- //! of `at`).
- //!
- //!
- //! Example
- //! -------
- //! @include example/back.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto back = [](auto&& xs) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename It, typename = void>
- struct back_impl : back_impl<It, when<true>> { };
-
- struct back_t {
- template <typename Xs>
- constexpr decltype(auto) operator()(Xs&& xs) const;
- };
-
- constexpr back_t back{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_BACK_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/basic_tuple.hpp b/contrib/restricted/boost/boost/hana/fwd/basic_tuple.hpp
deleted file mode 100644
index 8444f0f50e..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/basic_tuple.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::basic_tuple`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_BASIC_TUPLE_HPP
-#define BOOST_HANA_FWD_BASIC_TUPLE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-datatypes
- //! Stripped down version of `hana::tuple`.
- //!
- //! Whereas `hana::tuple` aims to provide an interface somewhat close to a
- //! `std::tuple`, `basic_tuple` provides the strict minimum required to
- //! implement a closure with maximum compile-time efficiency.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! `Sequence`, and all the concepts it refines
- template <typename ...Xs>
- struct basic_tuple;
-
- //! Tag representing `hana::basic_tuple`.
- //! @relates hana::basic_tuple
- struct basic_tuple_tag { };
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- //! Function object for creating a `basic_tuple`.
- //! @relates hana::basic_tuple
- //!
- //! Given zero or more objects `xs...`, `make<basic_tuple_tag>` returns a
- //! new `basic_tuple` containing those objects. The elements are held by
- //! value inside the resulting tuple, and they are hence copied or moved
- //! in. This is analogous to `std::make_tuple` for creating `basic_tuple`s.
- //!
- //!
- //! Example
- //! -------
- //! @include example/basic_tuple/make.cpp
- template <>
- constexpr auto make<basic_tuple_tag> = [](auto&& ...xs) {
- return basic_tuple<std::decay_t<decltype(xs)>...>{forwarded(xs)...};
- };
-#endif
-
- //! Alias to `make<basic_tuple_tag>`; provided for convenience.
- //! @relates hana::basic_tuple
- //!
- //!
- //! Example
- //! -------
- //! @include example/basic_tuple/make.cpp
- constexpr auto make_basic_tuple = make<basic_tuple_tag>;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_BASIC_TUPLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/bool.hpp b/contrib/restricted/boost/boost/hana/fwd/bool.hpp
deleted file mode 100644
index 123c992c62..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/bool.hpp
+++ /dev/null
@@ -1,15 +0,0 @@
-/*!
-@file
-Includes boost/hana/fwd/integral_constant.hpp.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_BOOL_HPP
-#define BOOST_HANA_FWD_BOOL_HPP
-
-#include <boost/hana/fwd/integral_constant.hpp>
-
-#endif // !BOOST_HANA_FWD_BOOL_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/cartesian_product.hpp b/contrib/restricted/boost/boost/hana/fwd/cartesian_product.hpp
deleted file mode 100644
index a3a48f23f3..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/cartesian_product.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::cartesian_product`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CARTESIAN_PRODUCT_HPP
-#define BOOST_HANA_FWD_CARTESIAN_PRODUCT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Computes the cartesian product of a sequence of sequences.
- //! @ingroup group-Sequence
- //!
- //! Given a sequence of sequences, `cartesian_product` returns a new
- //! sequence of sequences containing the cartesian product of the
- //! original sequences. For this method to finish, a finite number
- //! of finite sequences must be provided.
- //!
- //! @note
- //! All the sequences must have the same tag, and that tag must also match
- //! that of the top-level sequence.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a `Sequence` `S(T)`, the signature is
- //! \f[
- //! \mathtt{cartesian\_product} : S(S(T)) \to S(S(T))
- //! \f]
- //!
- //! @param xs
- //! A sequence of sequences of which the cartesian product is computed.
- //!
- //!
- //! Example
- //! -------
- //! @include example/cartesian_product.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto cartesian_product = [](auto&& xs) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct cartesian_product_impl : cartesian_product_impl<S, when<true>> { };
-
- struct cartesian_product_t {
- template <typename Xs>
- constexpr auto operator()(Xs&& xs) const;
- };
-
- constexpr cartesian_product_t cartesian_product{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CARTESIAN_PRODUCT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/chain.hpp b/contrib/restricted/boost/boost/hana/fwd/chain.hpp
deleted file mode 100644
index aa7f311057..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/chain.hpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::chain`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CHAIN_HPP
-#define BOOST_HANA_FWD_CHAIN_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Feed a monadic value into a monadic computation.
- //! @ingroup group-Monad
- //!
- //! Given a monadic value and a monadic function, `chain` feeds the
- //! monadic value into the function, thus performing some Monad-specific
- //! effects, and returns the result. An implementation of `chain` must
- //! satisfy
- //! @code
- //! chain(xs, f) == flatten(transform(xs, f))
- //! @endcode
- //!
- //!
- //! Signature
- //! ---------
- //! For a monad `M`, given a monadic value of type `M(A)` and a monadic
- //! function @f$ f : A \to M(B) @f$, `chain` has the signature
- //! @f$
- //! \mathtt{chain} : M(A) \times (A \to M(B)) \to M(B)
- //! @f$.
- //!
- //! @param xs
- //! A monadic value to be fed to the function `f`.
- //!
- //! @param f
- //! A function taking a normal value in the `xs` structure, and returning
- //! a monadic value. This function is called as `f(x)`, where `x` is an
- //! element of the structure `xs`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/chain.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto chain = [](auto&& xs, auto&& f) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename M, typename = void>
- struct chain_impl : chain_impl<M, when<true>> { };
-
- struct chain_t {
- template <typename Xs, typename F>
- constexpr decltype(auto) operator()(Xs&& xs, F&& f) const;
- };
-
- constexpr chain_t chain{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CHAIN_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/comparing.hpp b/contrib/restricted/boost/boost/hana/fwd/comparing.hpp
deleted file mode 100644
index 376ab173c7..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/comparing.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::comparing`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_COMPARING_HPP
-#define BOOST_HANA_FWD_COMPARING_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns a function performing `equal` after applying a transformation
- //! to both arguments.
- //! @ingroup group-Comparable
- //!
- //! `comparing` creates an equivalence relation based on the result of
- //! applying a function to some objects, which is especially useful in
- //! conjunction with algorithms that accept a custom predicate that must
- //! represent an equivalence relation.
- //!
- //! Specifically, `comparing` is such that
- //! @code
- //! comparing(f) == equal ^on^ f
- //! @endcode
- //! or, equivalently,
- //! @code
- //! comparing(f)(x, y) == equal(f(x), f(y))
- //! @endcode
- //!
- //! @note
- //! This is not a tag-dispatched method (hence it can't be customized),
- //! but just a convenience function provided with the `Comparable` concept.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a Logical `Bool` and a Comparable `B`, the signature is
- //! @f$ \mathtt{comparing} : (A \to B) \to (A \times A \to Bool) @f$.
- //!
- //!
- //! Example
- //! -------
- //! @include example/comparing.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto comparing = [](auto&& f) {
- return [perfect-capture](auto&& x, auto&& y) {
- return equal(f(forwarded(x)), f(forwarded(y)));
- };
- };
-#else
- struct comparing_t {
- template <typename F>
- constexpr auto operator()(F&& f) const;
- };
-
- constexpr comparing_t comparing{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_COMPARING_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concat.hpp b/contrib/restricted/boost/boost/hana/fwd/concat.hpp
deleted file mode 100644
index 140c847909..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concat.hpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::concat`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCAT_HPP
-#define BOOST_HANA_FWD_CONCAT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Combine two monadic structures together.
- //! @ingroup group-MonadPlus
- //!
- //! Given two monadic structures, `concat` combines them together and
- //! returns a new monadic structure. The exact definition of `concat`
- //! will depend on the exact model of MonadPlus at hand, but for
- //! sequences it corresponds intuitively to simple concatenation.
- //!
- //! Also note that combination is not required to be commutative.
- //! In other words, there is no requirement that
- //! @code
- //! concat(xs, ys) == concat(ys, xs)
- //! @endcode
- //! and indeed it does not hold in general.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a `MonadPlus` `M`, the signature of `concat` is
- //! @f$ \mathtt{concat} : M(T) \times M(T) \to M(T) @f$.
- //!
- //! @param xs, ys
- //! Two monadic structures to combine together.
- //!
- //!
- //! Example
- //! -------
- //! @include example/concat.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto concat = [](auto&& xs, auto&& ys) {
- return tag-dispatched;
- };
-#else
- template <typename M, typename = void>
- struct concat_impl : concat_impl<M, when<true>> { };
-
- struct concat_t {
- template <typename Xs, typename Ys>
- constexpr auto operator()(Xs&& xs, Ys&& ys) const;
- };
-
- constexpr concat_t concat{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCAT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/applicative.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/applicative.hpp
deleted file mode 100644
index 2c8677940c..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/applicative.hpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Applicative`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_APPLICATIVE_HPP
-#define BOOST_HANA_FWD_CONCEPT_APPLICATIVE_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Applicative Applicative
- //! The `Applicative` concept represents `Functor`s with the ability
- //! to lift values and combine computations.
- //!
- //! A `Functor` can only take a normal function and map it over a
- //! structure containing values to obtain a new structure containing
- //! values. Intuitively, an `Applicative` can also take a value and
- //! lift it into the structure. In addition, an `Applicative` can take
- //! a structure containing functions and apply it to a structure
- //! containing values to obtain a new structure containing values.
- //! By currying the function(s) inside the structure, it is then
- //! also possible to apply n-ary functions to n structures containing
- //! values.
- //!
- //! @note
- //! This documentation does not go into much details about the nature
- //! of applicatives. However, the [Typeclassopedia][1] is a nice
- //! Haskell-oriented resource where such information can be found.
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! `lift` and `ap` satisfying the laws below. An `Applicative` must
- //! also be a `Functor`.
- //!
- //!
- //! Laws
- //! ----
- //! Given an `Applicative` `F`, the following laws must be satisfied:
- //! 1. Identity\n
- //! For all objects `xs` of tag `F(A)`,
- //! @code
- //! ap(lift<F>(id), xs) == xs
- //! @endcode
- //!
- //! 2. Composition\n
- //! For all objects `xs` of tag `F(A)` and functions-in-an-applicative
- //! @f$ fs : F(B \to C) @f$,
- //! @f$ gs : F(A \to B) @f$,
- //! @code
- //! ap(ap(lift<F>(compose), fs, gs), xs) == ap(fs, ap(gs, xs))
- //! @endcode
- //!
- //! 3. Homomorphism\n
- //! For all objects `x` of tag `A` and functions @f$ f : A \to B @f$,
- //! @code
- //! ap(lift<F>(f), lift<F>(x)) == lift<F>(f(x))
- //! @endcode
- //!
- //! 4. Interchange\n
- //! For all objects `x` of tag `A` and functions-in-an-applicative
- //! @f$ fs : F(A \to B) @f$,
- //! @code
- //! ap(fs, lift<F>(x)) == ap(lift<F>(apply(-, x)), fs)
- //! @endcode
- //! where `apply(-, x)` denotes the partial application of the `apply`
- //! function from the @ref group-functional module to the `x` argument.
- //!
- //! As a consequence of these laws, the model of `Functor` for `F` will
- //! satisfy the following for all objects `xs` of tag `F(A)` and functions
- //! @f$ f : A \to B @f$:
- //! @code
- //! transform(xs, f) == ap(lift<F>(f), xs)
- //! @endcode
- //!
- //!
- //! Refined concept
- //! ---------------
- //! 1. `Functor` (free model)\n
- //! As a consequence of the laws, any `Applicative F` can be made a
- //! `Functor` by setting
- //! @code
- //! transform(xs, f) = ap(lift<F>(f), xs)
- //! @endcode
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::lazy`, `hana::optional`, `hana::tuple`
- //!
- //!
- //! @anchor applicative-transformation
- //! Structure-preserving functions
- //! ------------------------------
- //! An _applicative transformation_ is a function @f$ t : F(X) \to G(X) @f$
- //! between two Applicatives `F` and `G`, where `X` can be any tag, and
- //! which preserves the operations of an Applicative. In other words, for
- //! all objects `x` of tag `X`, functions-in-an-applicative
- //! @f$ fs : F(X \to Y) @f$ and objects `xs` of tag `F(X)`,
- //! @code
- //! t(lift<F>(x)) == lift<G>(x)
- //! t(ap(fs, xs)) == ap(t(fs), t(xs))
- //! @endcode
- //!
- //! [1]: https://wiki.haskell.org/Typeclassopedia#Applicative
- template <typename A>
- struct Applicative;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_APPLICATIVE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/comonad.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/comonad.hpp
deleted file mode 100644
index b2693078b0..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/comonad.hpp
+++ /dev/null
@@ -1,111 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Comonad`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_COMONAD_HPP
-#define BOOST_HANA_FWD_CONCEPT_COMONAD_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- // Note: We use a multiline C++ comment because there's a double backslash
- // symbol in the documentation (for LaTeX), which triggers
- // warning: multi-line comment [-Wcomment]
- // on GCC.
-
- /*!
- @ingroup group-concepts
- @defgroup group-Comonad Comonad
- The `Comonad` concept represents context-sensitive computations and
- data.
-
- Formally, the Comonad concept is dual to the Monad concept.
- But unless you're a mathematician, you don't care about that and it's
- fine. So intuitively, a Comonad represents context sensitive values
- and computations. First, Comonads make it possible to extract
- context-sensitive values from their context with `extract`.
- In contrast, Monads make it possible to wrap raw values into
- a given context with `lift` (from Applicative).
-
- Secondly, Comonads make it possible to apply context-sensitive values
- to functions accepting those, and to return the result as a
- context-sensitive value using `extend`. In contrast, Monads make
- it possible to apply a monadic value to a function accepting a normal
- value and returning a monadic value, and to return the result as a
- monadic value (with `chain`).
-
- Finally, Comonads make it possible to wrap a context-sensitive value
- into an extra layer of context using `duplicate`, while Monads make
- it possible to take a value with an extra layer of context and to
- strip it with `flatten`.
-
- Whereas `lift`, `chain` and `flatten` from Applicative and Monad have
- signatures
- \f{align*}{
- \mathtt{lift}_M &: T \to M(T) \\
- \mathtt{chain} &: M(T) \times (T \to M(U)) \to M(U) \\
- \mathtt{flatten} &: M(M(T)) \to M(T)
- \f}
-
- `extract`, `extend` and `duplicate` from Comonad have signatures
- \f{align*}{
- \mathtt{extract} &: W(T) \to T \\
- \mathtt{extend} &: W(T) \times (W(T) \to U) \to W(U) \\
- \mathtt{duplicate} &: W(T) \to W(W(T))
- \f}
-
- Notice how the "arrows" are reversed. This symmetry is essentially
- what we mean by Comonad being the _dual_ of Monad.
-
- @note
- The [Typeclassopedia][1] is a nice Haskell-oriented resource for further
- reading about Comonads.
-
-
- Minimal complete definition
- ---------------------------
- `extract` and (`extend` or `duplicate`) satisfying the laws below.
- A `Comonad` must also be a `Functor`.
-
-
- Laws
- ----
- For all Comonads `w`, the following laws must be satisfied:
- @code
- extract(duplicate(w)) == w
- transform(duplicate(w), extract) == w
- duplicate(duplicate(w)) == transform(duplicate(w), duplicate)
- @endcode
-
- @note
- There are several equivalent ways of defining Comonads, and this one
- is just one that was picked arbitrarily for simplicity.
-
-
- Refined concept
- ---------------
- 1. Functor\n
- Every Comonad is also required to be a Functor. At first, one might think
- that it should instead be some imaginary concept CoFunctor. However, it
- turns out that a CoFunctor is the same as a `Functor`, hence the
- requirement that a `Comonad` also is a `Functor`.
-
-
- Concrete models
- ---------------
- `hana::lazy`
-
- [1]: https://wiki.haskell.org/Typeclassopedia#Comonad
-
- */
- template <typename W>
- struct Comonad;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_COMONAD_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/comparable.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/comparable.hpp
deleted file mode 100644
index 9624c87038..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/comparable.hpp
+++ /dev/null
@@ -1,160 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Comparable`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_COMPARABLE_HPP
-#define BOOST_HANA_FWD_CONCEPT_COMPARABLE_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Comparable Comparable
- //! The `Comparable` concept defines equality and inequality.
- //!
- //! Intuitively, `Comparable` objects must define a binary predicate named
- //! `equal` that returns whether both objects represent the same abstract
- //! value. In other words, `equal` must check for deep equality. Since
- //! "representing the same abstract value" is difficult to express
- //! formally, the exact meaning of equality is partially left to
- //! interpretation by the programmer with the following guidelines:\n
- //! 1. Equality should be compatible with copy construction; copy
- //! constructing a value yields an `equal` value.
- //! 2. Equality should be independent of representation; an object
- //! representing a fraction as `4/8` should be `equal` to an object
- //! representing a fraction as `2/4`, because they both represent
- //! the mathematical object `1/2`.
- //!
- //! Moreover, `equal` must exhibit properties that make it intuitive to
- //! use for determining the equivalence of objects, which is formalized
- //! by the laws for `Comparable`.
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! 1. `equal`\n
- //! When `equal` is defined, `not_equal` is implemented by default as its
- //! complement. For all objects `x`, `y` of a `Comparable` tag,
- //! @code
- //! not_equal(x, y) == not_(equal(x, y))
- //! @endcode
- //!
- //!
- //! Laws
- //! ----
- //! `equal` must define an [equivalence relation][1], and `not_equal` must
- //! be its complement. In other words, for all objects `a`, `b`, `c` with
- //! a `Comparable` tag, the following must hold:
- //! @code
- //! equal(a, a) // Reflexivity
- //! if equal(a, b) then equal(b, a) // Symmetry
- //! if equal(a, b) && equal(b, c) then equal(a, c) // Transitivity
- //! not_equal(a, b) is equivalent to not_(equal(a, b))
- //! @endcode
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::integral_constant`, `hana::map`, `hana::optional`, `hana::pair`,
- //! `hana::range`, `hana::set`, `hana::string`, `hana::tuple`,
- //! `hana::type`
- //!
- //!
- //! Free model for `EqualityComparable` data types
- //! ----------------------------------------------
- //! Two data types `T` and `U` that model the cross-type EqualityComparable
- //! concept presented in [N3351][2] automatically model the `Comparable`
- //! concept by setting
- //! @code
- //! equal(x, y) = (x == y)
- //! @endcode
- //! Note that this also makes EqualityComparable types in the
- //! [usual sense][3] models of `Comparable` in the same way.
- //!
- //!
- //! Equality-preserving functions
- //! -----------------------------
- //! Let `A` and `B` be two `Comparable` tags. A function @f$f : A \to B@f$
- //! is said to be equality-preserving if it preserves the structure of the
- //! `Comparable` concept, which can be rigorously stated as follows. For
- //! all objects `x`, `y` of tag `A`,
- //! @code
- //! if equal(x, y) then equal(f(x), f(y))
- //! @endcode
- //! Equivalently, we simply require that `f` is a function in the usual
- //! mathematical sense. Another property is [injectivity][4], which can be
- //! viewed as being a "lossless" mapping. This property can be stated as
- //! @code
- //! if equal(f(x), f(y)) then equal(x, y)
- //! @endcode
- //! This is equivalent to saying that `f` maps distinct elements to
- //! distinct elements, hence the "lossless" analogy. In other words, `f`
- //! will not collapse distinct elements from its domain into a single
- //! element in its image, thus losing information.
- //!
- //! These functions are very important, especially equality-preserving
- //! ones, because they allow us to reason simply about programs. Also
- //! note that the property of being equality-preserving is taken for
- //! granted in mathematics because it is part of the definition of a
- //! function. We feel it is important to make the distinction here
- //! because programming has evolved differently and as a result
- //! programmers are used to work with functions that do not preserve
- //! equality.
- //!
- //!
- //! Cross-type version of the methods
- //! ---------------------------------
- //! The `equal` and `not_equal` methods are "overloaded" to handle
- //! distinct tags with certain properties. Specifically, they are
- //! defined for _distinct_ tags `A` and `B` such that
- //! 1. `A` and `B` share a common tag `C`, as determined by the
- //! `common` metafunction
- //! 2. `A`, `B` and `C` are all `Comparable` when taken individually
- //! 3. @f$ \mathtt{to<C>} : A \to C @f$ and @f$\mathtt{to<C>} : B \to C@f$
- //! are both equality-preserving and injective (i.e. they are embeddings),
- //! as determined by the `is_embedding` metafunction.
- //!
- //! The method definitions for tags satisfying the above properties are
- //! @code
- //! equal(x, y) = equal(to<C>(x), to<C>(y))
- //! not_equal(x, y) = not_equal(to<C>(x), to<C>(y))
- //! @endcode
- //!
- //!
- //! Important note: special behavior of `equal`
- //! -------------------------------------------
- //! In the context of programming with heterogeneous values, it is useful
- //! to have unrelated objects compare `false` instead of triggering an
- //! error. For this reason, `equal` adopts a special behavior for
- //! unrelated objects of tags `T` and `U` that do not satisfy the above
- //! requirements for the cross-type overloads. Specifically, when `T` and
- //! `U` are unrelated (i.e. `T` can't be converted to `U` and vice-versa),
- //! comparing objects with those tags yields a compile-time false value.
- //! This has the effect that unrelated objects like `float` and
- //! `std::string` will compare false, while comparing related objects that
- //! can not be safely embedded into the same super structure (like
- //! `long long` and `float` because of the precision loss) will trigger a
- //! compile-time assertion. Also note that for any tag `T` for which the
- //! minimal complete definition of `Comparable` is not provided, a
- //! compile-time assertion will also be triggered because `T` and `T`
- //! trivially share the common tag `T`, which is the expected behavior.
- //! This design choice aims to provide more flexibility for comparing
- //! objects, while still rejecting usage patterns that are most likely
- //! programming errors.
- //!
- //!
- //! [1]: http://en.wikipedia.org/wiki/Equivalence_relation#Definition
- //! [2]: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3351.pdf
- //! [3]: http://en.cppreference.com/w/cpp/concept/EqualityComparable
- //! [4]: http://en.wikipedia.org/wiki/Injective_function
- template <typename T>
- struct Comparable;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_COMPARABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/constant.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/constant.hpp
deleted file mode 100644
index bab44a7cb2..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/constant.hpp
+++ /dev/null
@@ -1,210 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Constant`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_CONSTANT_HPP
-#define BOOST_HANA_FWD_CONCEPT_CONSTANT_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Constant Constant
- //! The `Constant` concept represents data that can be manipulated at
- //! compile-time.
- //!
- //! At its core, `Constant` is simply a generalization of the principle
- //! behind `std::integral_constant` to all types that can be constructed
- //! at compile-time, i.e. to all types with a `constexpr` constructor
- //! (also called [Literal types][1]). More specifically, a `Constant` is
- //! an object from which a `constexpr` value may be obtained (through the
- //! `value` method) regardless of the `constexpr`ness of the object itself.
- //!
- //! All `Constant`s must be somewhat equivalent, in the following sense.
- //! Let `C(T)` and `D(U)` denote the tags of `Constant`s holding objects
- //! of type `T` and `U`, respectively. Then, an object with tag `D(U)`
- //! must be convertible to an object with tag `C(T)` whenever `U` is
- //! convertible to `T`, as determined by `is_convertible`. The
- //! interpretation here is that a `Constant` is just a box holding
- //! an object of some type, and it should be possible to swap between
- //! boxes whenever the objects inside the boxes can be swapped.
- //!
- //! Because of this last requirement, one could be tempted to think that
- //! specialized "boxes" like `std::integral_constant` are prevented from
- //! being `Constant`s because they are not able to hold objects of any
- //! type `T` (`std::integral_constant` may only hold integral types).
- //! This is false; the requirement should be interpreted as saying that
- //! whenever `C(T)` is _meaningful_ (e.g. only when `T` is integral for
- //! `std::integral_constant`) _and_ there exists a conversion from `U`
- //! to `T`, then a conversion from `D(U)` to `C(T)` should also exist.
- //! The precise requirements for being a `Constant` are embodied in the
- //! following laws.
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! `value` and `to`, satisfying the laws below.
- //!
- //!
- //! Laws
- //! ----
- //! Let `c` be an object of with tag `C`, which represents a `Constant`
- //! holding an object with tag `T`. The first law ensures that the value
- //! of the wrapped object is always a constant expression by requiring
- //! the following to be well-formed:
- //! @code
- //! constexpr auto x = hana::value<decltype(c)>();
- //! @endcode
- //!
- //! This means that the `value` function must return an object that can
- //! be constructed at compile-time. It is important to note how `value`
- //! only receives the type of the object and not the object itself.
- //! This is the core of the `Constant` concept; it means that the only
- //! information required to implement `value` must be stored in the _type_
- //! of its argument, and hence be available statically.
- //!
- //! The second law that must be satisfied ensures that `Constant`s are
- //! basically dumb boxes, which makes it possible to provide models for
- //! many concepts without much work from the user. The law simply asks
- //! for the following expression to be valid:
- //! @code
- //! to<C>(i)
- //! @endcode
- //! where, `i` is an _arbitrary_ `Constant` holding an internal value
- //! with a tag that can be converted to `T`, as determined by the
- //! `hana::is_convertible` metafunction. In other words, whenever `U` is
- //! convertible to `T`, a `Constant` holding a `U` is convertible to
- //! a `Constant` holding a `T`, if such a `Constant` can be created.
- //!
- //! Finally, the tag `C` must provide a nested `value_type` alias to `T`,
- //! which allows us to query the tag of the inner value held by objects
- //! with tag `C`. In other words, the following must be true for any
- //! object `c` with tag `C`:
- //! @code
- //! std::is_same<
- //! C::value_type,
- //! tag_of<decltype(hana::value(c))>::type
- //! >::value
- //! @endcode
- //!
- //!
- //! Refined concepts
- //! ----------------
- //! In certain cases, a `Constant` can automatically be made a model of
- //! another concept. In particular, if a `Constant` `C` is holding an
- //! object of tag `T`, and if `T` models a concept `X`, then `C` may
- //! in most cases model `X` by simply performing whatever operation is
- //! required on its underlying value, and then wrapping the result back
- //! in a `C`.
- //!
- //! More specifically, if a `Constant` `C` has an underlying value
- //! (`C::value_type`) which is a model of `Comparable`, `Orderable`,
- //! `Logical`, or `Monoid` up to `EuclideanRing`, then `C` must also
- //! be a model of those concepts. In other words, when `C::value_type`
- //! models one of the listed concepts, `C` itself must also model that
- //! concept. However, note that free models are provided for all of
- //! those concepts, so no additional work must be done.
- //!
- //! While it would be possible in theory to provide models for concepts
- //! like `Foldable` too, only a couple of concepts are useful to have as
- //! `Constant` in practice. Providing free models for the concepts listed
- //! above is useful because it allows various types of integral constants
- //! (`std::integral_constant`, `mpl::integral_c`, etc...) to easily have
- //! models for them just by defining the `Constant` concept.
- //!
- //! @remark
- //! An interesting observation is that `Constant` is actually the
- //! canonical embedding of the subcategory of `constexpr` things
- //! into the Hana category, which contains everything in this library.
- //! Hence, whatever is true in that subcategory is also true here, via
- //! this functor. This is why we can provide models of any concept that
- //! works on `constexpr` things for Constants, by simply passing them
- //! through that embedding.
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::integral_constant`
- //!
- //!
- //! Provided conversion to the tag of the underlying value
- //! ------------------------------------------------------
- //! Any `Constant` `c` holding an underlying value of tag `T` is
- //! convertible to any tag `U` such that `T` is convertible to `U`.
- //! Specifically, the conversion is equivalent to
- //! @code
- //! to<U>(c) == to<U>(value<decltype(c)>())
- //! @endcode
- //!
- //! Also, those conversions are marked as an embedding whenever the
- //! conversion of underlying types is an embedding. This is to allow
- //! Constants to inter-operate with `constexpr` objects easily:
- //! @code
- //! plus(int_c<1>, 1) == 2
- //! @endcode
- //!
- //! Strictly speaking, __this is sometimes a violation__ of what it means
- //! to be an embedding. Indeed, while there exists an embedding from any
- //! Constant to a `constexpr` object (since Constant is just the canonical
- //! inclusion), there is no embedding from a Constant to a runtime
- //! object since we would lose the ability to define the `value` method
- //! (the `constexpr`ness of the object would have been lost). Since there
- //! is no way to distinguish `constexpr` and non-`constexpr` objects based
- //! on their type, Hana has no way to know whether the conversion is to a
- //! `constexpr` object of not. In other words, the `to` method has no way
- //! to differentiate between
- //! @code
- //! constexpr int i = hana::to<int>(int_c<1>);
- //! @endcode
- //! which is an embedding, and
- //! @code
- //! int i = hana::to<int>(int_c<1>);
- //! @endcode
- //!
- //! which isn't. To be on the safer side, we could mark the conversion
- //! as not-an-embedding. However, if e.g. the conversion from
- //! `integral_constant_tag<int>` to `int` was not marked as an embedding,
- //! we would have to write `plus(to<int>(int_c<1>), 1)` instead of just
- //! `plus(int_c<1>, 1)`, which is cumbersome. Hence, the conversion is
- //! marked as an embedding, but this also means that code like
- //! @code
- //! int i = 1;
- //! plus(int_c<1>, i);
- //! @endcode
- //! will be considered valid, which implicitly loses the fact that
- //! `int_c<1>` is a Constant, and hence does not follow the usual rules
- //! for cross-type operations in Hana.
- //!
- //!
- //! Provided common data type
- //! -------------------------
- //! Because of the requirement that `Constant`s be interchangeable when
- //! their contents are compatible, two `Constant`s `A` and `B` will have
- //! a common data type whenever `A::value_type` and `B::value_type` have
- //! one. Their common data type is an unspecified `Constant` `C` such
- //! that `C::value_type` is exactly `common_t<A::value_type, B::value_type>`.
- //! A specialization of the `common` metafunction is provided for
- //! `Constant`s to reflect this.
- //!
- //! In the same vein, a common data type is also provided from any
- //! constant `A` to a type `T` such that `A::value_type` and `T` share
- //! a common type. The common type between `A` and `T` is obviously the
- //! common type between `A::value_type` and `T`. As explained above in
- //! the section on conversions, this is sometimes a violation of the
- //! definition of a common type, because there must be an embedding
- //! to the common type, which is not always the case. For the same
- //! reasons as explained above, this common type is still provided.
- //!
- //!
- //! [1]: http://en.cppreference.com/w/cpp/concept/LiteralType
- template <typename C>
- struct Constant;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_CONSTANT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/euclidean_ring.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/euclidean_ring.hpp
deleted file mode 100644
index 8b8744c29d..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/euclidean_ring.hpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::EuclideanRing`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_EUCLIDEAN_RING_HPP
-#define BOOST_HANA_FWD_CONCEPT_EUCLIDEAN_RING_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-EuclideanRing Euclidean Ring
- //! The `EuclideanRing` concept represents a commutative `Ring` that
- //! can also be endowed with a division algorithm.
- //!
- //! A Ring defines a binary operation often called _multiplication_ that
- //! can be used to combine two elements of the ring into a new element of
- //! the ring. An [Euclidean ring][1], also called an Euclidean domain, adds
- //! the ability to define a special function that generalizes the Euclidean
- //! division of integers.
- //!
- //! However, an Euclidean ring must also satisfy one more property, which
- //! is that of having no non-zero zero divisors. In a Ring `(R, +, *)`, it
- //! follows quite easily from the axioms that `x * 0 == 0` for any ring
- //! element `x`. However, there is nothing that mandates `0` to be the
- //! only ring element sending other elements to `0`. Hence, in some Rings,
- //! it is possible to have elements `x` and `y` such that `x * y == 0`
- //! while not having `x == 0` nor `y == 0`. We call these elements divisors
- //! of zero, or zero divisors. For example, this situation arises in the
- //! Ring of integers modulo 4 (the set `{0, 1, 2, 3}`) with addition and
- //! multiplication `mod 4` as binary operations. In this case, we have that
- //! @code
- //! 2 * 2 == 4
- //! == 0 (mod 4)
- //! @endcode
- //! even though `2 != 0 (mod 4)`.
- //!
- //! Following this line of thought, an Euclidean ring requires its only
- //! zero divisor is zero itself. In other words, the multiplication in an
- //! Euclidean won't send two non-zero elements to zero. Also note that
- //! since multiplication in a `Ring` is not necessarily commutative, it
- //! is not always the case that
- //! @code
- //! x * y == 0 implies y * x == 0
- //! @endcode
- //! To be rigorous, we should then distinguish between elements that are
- //! zero divisors when multiplied to the right and to the left.
- //! Fortunately, the concept of an Euclidean ring requires the Ring
- //! multiplication to be commutative. Hence,
- //! @code
- //! x * y == y * x
- //! @endcode
- //! and we do not have to distinguish between left and right zero divisors.
- //!
- //! Typical examples of Euclidean rings include integers and polynomials
- //! over a field. The method names used here refer to the Euclidean ring
- //! of integers under the usual addition, multiplication and division
- //! operations.
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! `div` and `mod` satisfying the laws below
- //!
- //!
- //! Laws
- //! ----
- //! To simplify the reading, we will use the `+`, `*`, `/` and `%`
- //! operators with infix notation to denote the application of the
- //! corresponding methods in Monoid, Group, Ring and EuclideanRing.
- //! For all objects `a` and `b` of an `EuclideanRing` `R`, the
- //! following laws must be satisfied:
- //! @code
- //! a * b == b * a // commutativity
- //! (a / b) * b + a % b == a if b is non-zero
- //! zero<R>() % b == zero<R>() if b is non-zero
- //! @endcode
- //!
- //!
- //! Refined concepts
- //! ----------------
- //! `Monoid`, `Group`, `Ring`
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::integral_constant`
- //!
- //!
- //! Free model for non-boolean integral data types
- //! ----------------------------------------------
- //! A data type `T` is integral if `std::is_integral<T>::%value` is true.
- //! For a non-boolean integral data type `T`, a model of `EuclideanRing`
- //! is automatically defined by using the `Ring` model provided for
- //! arithmetic data types and setting
- //! @code
- //! div(x, y) = (x / y)
- //! mod(x, y) = (x % y)
- //! @endcode
- //!
- //! @note
- //! The rationale for not providing an EuclideanRing model for `bool` is
- //! the same as for not providing Monoid, Group and Ring models.
- //!
- //!
- //! [1]: https://en.wikipedia.org/wiki/Euclidean_domain
- template <typename R>
- struct EuclideanRing;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_EUCLIDEAN_RING_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/foldable.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/foldable.hpp
deleted file mode 100644
index 09de170455..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/foldable.hpp
+++ /dev/null
@@ -1,141 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Foldable`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_FOLDABLE_HPP
-#define BOOST_HANA_FWD_CONCEPT_FOLDABLE_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Foldable Foldable
- //! The `Foldable` concept represents data structures that can be reduced
- //! to a single value.
- //!
- //! Generally speaking, folding refers to the concept of summarizing a
- //! complex structure as a single value, by successively applying a
- //! binary operation which reduces two elements of the structure to a
- //! single value. Folds come in many flavors; left folds, right folds,
- //! folds with and without an initial reduction state, and their monadic
- //! variants. This concept is able to express all of these fold variants.
- //!
- //! Another way of seeing `Foldable` is as data structures supporting
- //! internal iteration with the ability to accumulate a result. By
- //! internal iteration, we mean that the _loop control_ is in the hand
- //! of the structure, not the caller. Hence, it is the structure who
- //! decides when the iteration stops, which is normally when the whole
- //! structure has been consumed. Since C++ is an eager language, this
- //! requires `Foldable` structures to be finite, or otherwise one would
- //! need to loop indefinitely to consume the whole structure.
- //!
- //! @note
- //! While the fact that `Foldable` only works for finite structures may
- //! seem overly restrictive in comparison to the Haskell definition of
- //! `Foldable`, a finer grained separation of the concepts should
- //! mitigate the issue. For iterating over possibly infinite data
- //! structures, see the `Iterable` concept. For searching a possibly
- //! infinite data structure, see the `Searchable` concept.
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! `fold_left` or `unpack`
- //!
- //! However, please note that a minimal complete definition provided
- //! through `unpack` will be much more compile-time efficient than one
- //! provided through `fold_left`.
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::map`, `hana::optional`, `hana::pair`, `hana::set`,
- //! `hana::range`, `hana::tuple`
- //!
- //!
- //! @anchor Foldable-lin
- //! The linearization of a `Foldable`
- //! ---------------------------------
- //! Intuitively, for a `Foldable` structure `xs`, the _linearization_ of
- //! `xs` is the sequence of all the elements in `xs` as if they had been
- //! put in a list:
- //! @code
- //! linearization(xs) = [x1, x2, ..., xn]
- //! @endcode
- //!
- //! Note that it is always possible to produce such a linearization
- //! for a finite `Foldable` by setting
- //! @code
- //! linearization(xs) = fold_left(xs, [], flip(prepend))
- //! @endcode
- //! for an appropriate definition of `[]` and `prepend`. The notion of
- //! linearization is useful for expressing various properties of
- //! `Foldable` structures, and is used across the documentation. Also
- //! note that `Iterable`s define an [extended version](@ref Iterable-lin)
- //! of this allowing for infinite structures.
- //!
- //!
- //! Compile-time Foldables
- //! ----------------------
- //! A compile-time `Foldable` is a `Foldable` whose total length is known
- //! at compile-time. In other words, it is a `Foldable` whose `length`
- //! method returns a `Constant` of an unsigned integral type. When
- //! folding a compile-time `Foldable`, the folding can be unrolled,
- //! because the final number of steps of the algorithm is known at
- //! compile-time.
- //!
- //! Additionally, the `unpack` method is only available to compile-time
- //! `Foldable`s. This is because the return _type_ of `unpack` depends
- //! on the number of objects in the structure. Being able to resolve
- //! `unpack`'s return type at compile-time hence requires the length of
- //! the structure to be known at compile-time too.
- //!
- //! __In the current version of the library, only compile-time `Foldable`s
- //! are supported.__ While it would be possible in theory to support
- //! runtime `Foldable`s too, doing so efficiently requires more research.
- //!
- //!
- //! Provided conversion to `Sequence`s
- //! ----------------------------------
- //! Given a tag `S` which is a `Sequence`, an object whose tag is a model
- //! of the `Foldable` concept can be converted to an object of tag `S`.
- //! In other words, a `Foldable` can be converted to a `Sequence` `S`, by
- //! simply taking the linearization of the `Foldable` and creating the
- //! sequence with that. More specifically, given a `Foldable` `xs` with a
- //! linearization of `[x1, ..., xn]` and a `Sequence` tag `S`, `to<S>(xs)`
- //! is equivalent to `make<S>(x1, ..., xn)`.
- //! @include example/foldable/to.cpp
- //!
- //!
- //! Free model for builtin arrays
- //! -----------------------------
- //! Builtin arrays whose size is known can be folded as-if they were
- //! homogeneous tuples. However, note that builtin arrays can't be
- //! made more than `Foldable` (e.g. `Iterable`) because they can't
- //! be empty and they also can't be returned from functions.
- //!
- //!
- //! @anchor monadic-folds
- //! Primer on monadic folds
- //! -----------------------
- //! A monadic fold is a fold in which subsequent calls to the binary
- //! function are chained with the monadic `chain` operator of the
- //! corresponding Monad. This allows a structure to be folded in a
- //! custom monadic context. For example, performing a monadic fold with
- //! the `hana::optional` monad would require the binary function to return
- //! the result as a `hana::optional`, and the fold would abort and return
- //! `nothing` whenever one of the accumulation step would fail (i.e.
- //! return `nothing`). If, however, all the reduction steps succeed,
- //! then `just` the result would be returned. Different monads will of
- //! course result in different effects.
- template <typename T>
- struct Foldable;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_FOLDABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/functor.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/functor.hpp
deleted file mode 100644
index f46ad24c73..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/functor.hpp
+++ /dev/null
@@ -1,139 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Functor`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_FUNCTOR_HPP
-#define BOOST_HANA_FWD_CONCEPT_FUNCTOR_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Functor Functor
- //! The `Functor` concept represents types that can be mapped over.
- //!
- //! Intuitively, a [Functor][1] is some kind of box that can hold generic
- //! data and map a function over this data to create a new, transformed
- //! box. Because we are only interested in mapping a function over the
- //! contents of a black box, the only real requirement for being a functor
- //! is to provide a function which can do the mapping, along with a couple
- //! of guarantees that the mapping is well-behaved. Those requirements are
- //! made precise in the laws below. The pattern captured by `Functor` is
- //! very general, which makes it widely useful. A lot of objects can be
- //! made `Functor`s in one way or another, the most obvious example being
- //! sequences with the usual mapping of the function on each element.
- //! While this documentation will not go into much more details about
- //! the nature of functors, the [Typeclassopedia][2] is a nice
- //! Haskell-oriented resource for such information.
- //!
- //! Functors are parametric data types which are parameterized over the
- //! data type of the objects they contain. Like everywhere else in Hana,
- //! this parametricity is only at the documentation level and it is not
- //! enforced.
- //!
- //! In this library, the mapping function is called `transform` after the
- //! `std::transform` algorithm, but other programming languages have given
- //! it different names (usually `map`).
- //!
- //! @note
- //! The word _functor_ comes from functional programming, where the
- //! concept has been used for a while, notably in the Haskell programming
- //! language. Haskell people borrowed the term from [category theory][3],
- //! which, broadly speaking, is a field of mathematics dealing with
- //! abstract structures and transformations between those structures.
- //!
- //!
- //! Minimal complete definitions
- //! ----------------------------
- //! 1. `transform`\n
- //! When `transform` is specified, `adjust_if` is defined analogously to
- //! @code
- //! adjust_if(xs, pred, f) = transform(xs, [](x){
- //! if pred(x) then f(x) else x
- //! })
- //! @endcode
- //!
- //! 2. `adjust_if`\n
- //! When `adjust_if` is specified, `transform` is defined analogously to
- //! @code
- //! transform(xs, f) = adjust_if(xs, always(true), f)
- //! @endcode
- //!
- //!
- //! Laws
- //! ----
- //! Let `xs` be a Functor with tag `F(A)`,
- //! \f$ f : A \to B \f$ and
- //! \f$ g : B \to C \f$.
- //! The following laws must be satisfied:
- //! @code
- //! transform(xs, id) == xs
- //! transform(xs, compose(g, f)) == transform(transform(xs, f), g)
- //! @endcode
- //! The first line says that mapping the identity function should not do
- //! anything, which precludes the functor from doing something nasty
- //! behind the scenes. The second line states that mapping the composition
- //! of two functions is the same as mapping the first function, and then
- //! the second on the result. While the usual functor laws are usually
- //! restricted to the above, this library includes other convenience
- //! methods and they should satisfy the following equations.
- //! Let `xs` be a Functor with tag `F(A)`,
- //! \f$ f : A \to A \f$,
- //! \f$ \mathrm{pred} : A \to \mathrm{Bool} \f$
- //! for some `Logical` `Bool`, and `oldval`, `newval`, `value` objects
- //! of tag `A`. Then,
- //! @code
- //! adjust(xs, value, f) == adjust_if(xs, equal.to(value), f)
- //! adjust_if(xs, pred, f) == transform(xs, [](x){
- //! if pred(x) then f(x) else x
- //! })
- //! replace_if(xs, pred, value) == adjust_if(xs, pred, always(value))
- //! replace(xs, oldval, newval) == replace_if(xs, equal.to(oldval), newval)
- //! fill(xs, value) == replace_if(xs, always(true), value)
- //! @endcode
- //! The default definition of the methods will satisfy these equations.
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::lazy`, `hana::optional`, `hana::tuple`
- //!
- //!
- //! Structure-preserving functions for Functors
- //! -------------------------------------------
- //! A mapping between two functors which also preserves the functor
- //! laws is called a natural transformation (the term comes from
- //! category theory). A natural transformation is a function `f`
- //! from a functor `F` to a functor `G` such that for every other
- //! function `g` with an appropriate signature and for every object
- //! `xs` of tag `F(X)`,
- //! @code
- //! f(transform(xs, g)) == transform(f(xs), g)
- //! @endcode
- //!
- //! There are several examples of such transformations, like `to<tuple_tag>`
- //! when applied to an optional value. Indeed, for any function `g` and
- //! `hana::optional` `opt`,
- //! @code
- //! to<tuple_tag>(transform(opt, g)) == transform(to<tuple_tag>(opt), g)
- //! @endcode
- //!
- //! Of course, natural transformations are not limited to the `to<...>`
- //! functions. However, note that any conversion function between Functors
- //! should be natural for the behavior of the conversion to be intuitive.
- //!
- //!
- //! [1]: http://en.wikipedia.org/wiki/Functor
- //! [2]: https://wiki.haskell.org/Typeclassopedia#Functor
- //! [3]: http://en.wikipedia.org/wiki/Category_theory
- template <typename F>
- struct Functor;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_FUNCTOR_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/group.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/group.hpp
deleted file mode 100644
index 6afec94502..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/group.hpp
+++ /dev/null
@@ -1,111 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Group`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_GROUP_HPP
-#define BOOST_HANA_FWD_CONCEPT_GROUP_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Group Group
- //! The `Group` concept represents `Monoid`s where all objects have
- //! an inverse w.r.t. the `Monoid`'s binary operation.
- //!
- //! A [Group][1] is an algebraic structure built on top of a `Monoid`
- //! which adds the ability to invert the action of the `Monoid`'s binary
- //! operation on any element of the set. Specifically, a `Group` is a
- //! `Monoid` `(S, +)` such that every element `s` in `S` has an inverse
- //! (say `s'`) which is such that
- //! @code
- //! s + s' == s' + s == identity of the Monoid
- //! @endcode
- //!
- //! There are many examples of `Group`s, one of which would be the
- //! additive `Monoid` on integers, where the inverse of any integer
- //! `n` is the integer `-n`. The method names used here refer to
- //! exactly this model.
- //!
- //!
- //! Minimal complete definitions
- //! ----------------------------
- //! 1. `minus`\n
- //! When `minus` is specified, the `negate` method is defaulted by setting
- //! @code
- //! negate(x) = minus(zero<G>(), x)
- //! @endcode
- //!
- //! 2. `negate`\n
- //! When `negate` is specified, the `minus` method is defaulted by setting
- //! @code
- //! minus(x, y) = plus(x, negate(y))
- //! @endcode
- //!
- //!
- //! Laws
- //! ----
- //! For all objects `x` of a `Group` `G`, the following laws must be
- //! satisfied:
- //! @code
- //! plus(x, negate(x)) == zero<G>() // right inverse
- //! plus(negate(x), x) == zero<G>() // left inverse
- //! @endcode
- //!
- //!
- //! Refined concept
- //! ---------------
- //! `Monoid`
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::integral_constant`
- //!
- //!
- //! Free model for non-boolean arithmetic data types
- //! ------------------------------------------------
- //! A data type `T` is arithmetic if `std::is_arithmetic<T>::%value` is
- //! true. For a non-boolean arithmetic data type `T`, a model of `Group`
- //! is automatically defined by setting
- //! @code
- //! minus(x, y) = (x - y)
- //! negate(x) = -x
- //! @endcode
- //!
- //! @note
- //! The rationale for not providing a Group model for `bool` is the same
- //! as for not providing a `Monoid` model.
- //!
- //!
- //! Structure-preserving functions
- //! ------------------------------
- //! Let `A` and `B` be two `Group`s. A function `f : A -> B` is said to
- //! be a [Group morphism][2] if it preserves the group structure between
- //! `A` and `B`. Rigorously, for all objects `x, y` of data type `A`,
- //! @code
- //! f(plus(x, y)) == plus(f(x), f(y))
- //! @endcode
- //! Because of the `Group` structure, it is easy to prove that the
- //! following will then also be satisfied:
- //! @code
- //! f(negate(x)) == negate(f(x))
- //! f(zero<A>()) == zero<B>()
- //! @endcode
- //! Functions with these properties interact nicely with `Group`s, which
- //! is why they are given such a special treatment.
- //!
- //!
- //! [1]: http://en.wikipedia.org/wiki/Group_(mathematics)
- //! [2]: http://en.wikipedia.org/wiki/Group_homomorphism
- template <typename G>
- struct Group;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_GROUP_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/hashable.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/hashable.hpp
deleted file mode 100644
index 2fc4977ba9..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/hashable.hpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Hashable`.
-
-@copyright Louis Dionne 2016
-@copyright Jason Rice 2016
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_HASHABLE_HPP
-#define BOOST_HANA_FWD_CONCEPT_HASHABLE_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Hashable Hashable
- //! The `Hashable` concept represents objects that can be normalized to
- //! a type-level hash.
- //!
- //! In day to day programming, hashes are very important as a way to
- //! efficiently lookup objects in maps. While the implementation of
- //! maps is very different, the same idea of using hashes for efficient
- //! lookup applies in metaprogramming. The `Hashable` concept represents
- //! objects that can be summarized (possibly with loss of information) to
- //! a type, in a way suitable for use in hash-based data structures. Of
- //! course, in order for a hash to be well-behaved, it must obey some laws
- //! that are explained below.
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! `hash`, satisfying the laws below
- //!
- //!
- //! Laws
- //! ----
- //! First, `hana::hash` must return a `hana::type`. Furthermore, for any
- //! two `Hashable` objects `x` and `y`, it must be the case that
- //! @code
- //! x == y implies hash(x) == hash(y)
- //! @endcode
- //!
- //! where `==` denotes `hana::equal`. In other words, any two objects that
- //! compare equal (with `hana::equal`) must also have the same hash.
- //! However, the reverse is not true, and two different objects may have
- //! the same hash. This situation of two different objects having the same
- //! hash is called a _collision_.
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::integral_constant`, `hana::type`, `hana::string`
- //!
- //!
- //! Free model for `IntegralConstant`s
- //! ----------------------------------
- //! Any `IntegralConstant` is `Hashable`, by normalizing its value to a
- //! `hana::integral_constant`. The type of the value held in the normalized
- //! `integral_constant` is `unsigned long long` for unsigned integral
- //! types, and `signed long long` for signed integral types.
- template <typename T>
- struct Hashable;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_HASHABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/integral_constant.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/integral_constant.hpp
deleted file mode 100644
index 161062e2be..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/integral_constant.hpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::IntegralConstant`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_INTEGRAL_CONSTANT_HPP
-#define BOOST_HANA_FWD_CONCEPT_INTEGRAL_CONSTANT_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! The `IntegralConstant` concept represents compile-time integral values.
- //!
- //! The `IntegralConstant` concept represents objects that hold a
- //! `constexpr` value of an integral type. In other words, it describes
- //! the essential functionality provided by `std::integral_constant`.
- //! An `IntegralConstant` is also just a special kind of `Constant`
- //! whose inner value is of an integral type.
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! The requirements for being an `IntegralConstant` are quite simple.
- //! First, an `IntegralConstant` `C` must be a `Constant` such that
- //! `Tag::value_type` is an integral type, where `Tag` is the tag of `C`.
- //!
- //! Secondly, `C` must have a nested `static constexpr` member named
- //! `value`, such that the following code is valid:
- //! @code
- //! constexpr auto v = C::value;
- //! @endcode
- //! Because of the requirement that `Tag::value_type` be an integral type,
- //! it follows that `C::value` must be an integral value.
- //!
- //! Finally, it is necessary to specialize the `IntegralConstant` template
- //! in the `boost::hana` namespace to tell Hana that a type is a model
- //! of `IntegralConstant`:
- //! @code
- //! namespace boost { namespace hana {
- //! template <>
- //! struct IntegralConstant<your_custom_tag> {
- //! static constexpr bool value = true;
- //! };
- //! }}
- //! @endcode
- //!
- //!
- //! Refined concept
- //! ---------------
- //! 1. `Constant` (free implementation of `value`)\n
- //! The `value` function required to be a `Constant` can be implemented
- //! as follows for `IntegralConstant`s:
- //! @code
- //! value<C>() == C::value
- //! @endcode
- //! The `to` function must still be provided explicitly for the model
- //! of `Constant` to be complete.
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::integral_constant`
- template <typename C>
- struct IntegralConstant;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_INTEGRAL_CONSTANT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/iterable.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/iterable.hpp
deleted file mode 100644
index 59c8520b62..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/iterable.hpp
+++ /dev/null
@@ -1,149 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Iterable`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_ITERABLE_HPP
-#define BOOST_HANA_FWD_CONCEPT_ITERABLE_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Iterable Iterable
- //! The `Iterable` concept represents data structures supporting external
- //! iteration.
- //!
- //! Intuitively, an `Iterable` can be seen as a kind of container whose
- //! elements can be pulled out one at a time. An `Iterable` also provides
- //! a way to know when the _container_ is empty, i.e. when there are no
- //! more elements to pull out.
- //!
- //! Whereas `Foldable` represents data structures supporting internal
- //! iteration with the ability to accumulate a result, the `Iterable`
- //! concept allows inverting the control of the iteration. This is more
- //! flexible than `Foldable`, since it allows iterating over only some
- //! part of the structure. This, in turn, allows `Iterable` to work on
- //! infinite structures, while trying to fold such a structure would
- //! never finish.
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! `at`, `drop_front` and `is_empty`
- //!
- //!
- //! @anchor Iterable-lin
- //! The linearization of an `Iterable`
- //! ----------------------------------
- //! Intuitively, for an `Iterable` structure `xs`, the _linearization_ of
- //! `xs` is the sequence of all the elements in `xs` as if they had been
- //! put in a (possibly infinite) list:
- //! @code
- //! linearization(xs) = [x1, x2, x3, ...]
- //! @endcode
- //!
- //! The `n`th element of the linearization of an `Iterable` can be
- //! accessed with the `at` function. In other words, `at(xs, n) == xn`.
- //!
- //! Note that this notion is precisely the extension of the [linearization]
- //! (@ref Foldable-lin) notion of `Foldable`s to the infinite case. This
- //! notion is useful for expressing various properties of `Iterable`s,
- //! and is used for that elsewhere in the documentation.
- //!
- //!
- //! Compile-time `Iterable`s
- //! ------------------------
- //! A _compile-time_ `Iterable` is an `Iterable` for which `is_empty`
- //! returns a compile-time `Logical`. These structures allow iteration
- //! to be done at compile-time, in the sense that the "loop" doing the
- //! iteration can be unrolled because the total length of the structure
- //! is kown at compile-time.
- //!
- //! In particular, note that being a compile-time `Iterable` has nothing
- //! to do with being finite or infinite. For example, it would be possible
- //! to create a sequence representing the Pythagorean triples as
- //! `integral_constant`s. Such a sequence would be infinite, but iteration
- //! on the sequence would still be done at compile-time. However, if one
- //! tried to iterate over _all_ the elements of the sequence, the compiler
- //! would loop indefinitely, in contrast to your program looping
- //! indefinitely if the sequence was a runtime one.
- //!
- //! __In the current version of the library, only compile-time `Iterable`s
- //! are supported.__ While it would be possible in theory to support
- //! runtime `Iterable`s, doing it efficiently is the subject of some
- //! research. In particular, follow [this issue][1] for the current
- //! status of runtime `Iterable`s.
- //!
- //!
- //! Laws
- //! ----
- //! First, we require the equality of two `Iterable`s to be related to the
- //! equality of the elements in their linearizations. More specifically,
- //! if `xs` and `ys` are two `Iterable`s of data type `It`, then
- //! @code
- //! xs == ys => at(xs, i) == at(ys, i) for all i
- //! @endcode
- //!
- //! This conveys that two `Iterable`s must have the same linearization
- //! in order to be considered equal.
- //!
- //! Secondly, since every `Iterable` is also a `Searchable`, we require
- //! the models of `Iterable` and `Searchable` to be consistent. This is
- //! made precise by the following laws. For any `Iterable` `xs` with a
- //! linearization of `[x1, x2, x3, ...]`,
- //! @code
- //! any_of(xs, equal.to(z)) <=> xi == z
- //! @endcode
- //! for some _finite_ index `i`. Furthermore,
- //! @code
- //! find_if(xs, pred) == just(the first xi such that pred(xi) is satisfied)
- //! @endcode
- //! or `nothing` if no such `xi` exists.
- //!
- //!
- //! Refined concepts
- //! ----------------
- //! 1. `Searchable` (free model)\n
- //! Any `Iterable` gives rise to a model of `Searchable`, where the keys
- //! and the values are both the elements in the structure. Searching for
- //! a key is just doing a linear search through the elements of the
- //! structure.
- //! @include example/iterable/searchable.cpp
- //!
- //! 2. `Foldable` for finite `Iterable`s\n
- //! Every finite `Iterable` gives rise to a model of `Foldable`. For
- //! these models to be consistent, we require the models of both `Foldable`
- //! and `Iterable` to have the same linearization.
- //!
- //! @note
- //! As explained above, `Iterable`s are also `Searchable`s and their
- //! models have to be consistent. By the laws presented here, it also
- //! means that the `Foldable` model for finite `Iterable`s has to be
- //! consistent with the `Searchable` model.
- //!
- //! For convenience, finite `Iterable`s must only provide a definition of
- //! `length` to model the `Foldable` concept; defining the more powerful
- //! `unpack` or `fold_left` is not necessary (but still possible). The
- //! default implementation of `unpack` derived from `Iterable` + `length`
- //! uses the fact that `at(xs, i)` denotes the `i`th element of `xs`'s
- //! linearization, and that the linearization of a finite `Iterable` must
- //! be the same as its linearization as a `Foldable`.
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::tuple`, `hana::string`, `hana::range`
- //!
- //!
- //! [1]: https://github.com/boostorg/hana/issues/40
- template <typename It>
- struct Iterable;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_ITERABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/logical.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/logical.hpp
deleted file mode 100644
index f9cfde986c..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/logical.hpp
+++ /dev/null
@@ -1,166 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Logical`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_LOGICAL_HPP
-#define BOOST_HANA_FWD_CONCEPT_LOGICAL_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Logical Logical
- //! The `Logical` concept represents types with a truth value.
- //!
- //! Intuitively, a `Logical` is just a `bool`, or something that can act
- //! like one. However, in the context of programming with heterogeneous
- //! objects, it becomes extremely important to distinguish between those
- //! objects whose truth value is known at compile-time, and those whose
- //! truth value is only known at runtime. The reason why this is so
- //! important is because it is possible to branch at compile-time on
- //! a condition whose truth value is known at compile-time, and hence
- //! the return type of the enclosing function can depend on that truth
- //! value. However, if the truth value is only known at runtime, then
- //! the compiler has to compile both branches (because any or both of
- //! them may end up being used), which creates the additional requirement
- //! that both branches must evaluate to the same type.
- //!
- //! More specifically, `Logical` (almost) represents a [boolean algebra][1],
- //! which is a mathematical structure encoding the usual properties that
- //! allow us to reason with `bool`. The exact properties that must be
- //! satisfied by any model of `Logical` are rigorously stated in the laws
- //! below.
- //!
- //!
- //! Truth, falsity and logical equivalence
- //! --------------------------------------
- //! A `Logical` `x` is said to be _true-valued_, or sometimes also just
- //! _true_ as an abuse of notation, if
- //! @code
- //! if_(x, true, false) == true
- //! @endcode
- //!
- //! Similarly, `x` is _false-valued_, or sometimes just _false_, if
- //! @code
- //! if_(x, true, false) == false
- //! @endcode
- //!
- //! This provides a standard way of converting any `Logical` to a straight
- //! `bool`. The notion of truth value suggests another definition, which
- //! is that of logical equivalence. We will say that two `Logical`s `x`
- //! and `y` are _logically equivalent_ if they have the same truth value.
- //! To denote that some expressions `p` and `q` of a Logical data type are
- //! logically equivalent, we will sometimes also write
- //! @code
- //! p if and only if q
- //! @endcode
- //! which is very common in mathematics. The intuition behind this notation
- //! is that whenever `p` is true-valued, then `q` should be; but when `p`
- //! is false-valued, then `q` should be too. Hence, `p` should be
- //! true-valued when (and only when) `q` is true-valued.
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! `eval_if`, `not_` and `while_`
- //!
- //! All the other functions can be defined in those terms:
- //! @code
- //! if_(cond, x, y) = eval_if(cond, lazy(x), lazy(y))
- //! and_(x, y) = if_(x, y, x)
- //! or_(x, y) = if_(x, x, y)
- //! etc...
- //! @endcode
- //!
- //!
- //! Laws
- //! ----
- //! As outlined above, the `Logical` concept almost represents a boolean
- //! algebra. The rationale for this laxity is to allow things like integers
- //! to act like `Logical`s, which is aligned with C++, even though they do
- //! not form a boolean algebra. Even though we depart from the usual
- //! axiomatization of boolean algebras, we have found through experience
- //! that the definition of a Logical given here is largely compatible with
- //! intuition.
- //!
- //! The following laws must be satisfied for any data type `L` modeling
- //! the `Logical` concept. Let `a`, `b` and `c` be objects of a `Logical`
- //! data type, and let `t` and `f` be arbitrary _true-valued_ and
- //! _false-valued_ `Logical`s of that data type, respectively. Then,
- //! @code
- //! // associativity
- //! or_(a, or_(b, c)) == or_(or_(a, b), c)
- //! and_(a, and_(b, c)) == and_(and_(a, b), c)
- //!
- //! // equivalence through commutativity
- //! or_(a, b) if and only if or_(b, a)
- //! and_(a, b) if and only if and_(b, a)
- //!
- //! // absorption
- //! or_(a, and_(a, b)) == a
- //! and_(a, or_(a, b)) == a
- //!
- //! // left identity
- //! or_(a, f) == a
- //! and_(a, t) == a
- //!
- //! // distributivity
- //! or_(a, and_(b, c)) == and_(or_(a, b), or_(a, c))
- //! and_(a, or_(b, c)) == or_(and_(a, b), and_(a, c))
- //!
- //! // complements
- //! or_(a, not_(a)) is true-valued
- //! and_(a, not_(a)) is false-valued
- //! @endcode
- //!
- //! > #### Why is the above not a boolean algebra?
- //! > If you look closely, you will find that we depart from the usual
- //! > boolean algebras because:
- //! > 1. we do not require the elements representing truth and falsity to
- //! > be unique
- //! > 2. we do not enforce commutativity of the `and_` and `or_` operations
- //! > 3. because we do not enforce commutativity, the identity laws become
- //! > left-identity laws
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::integral_constant`
- //!
- //!
- //! Free model for arithmetic data types
- //! ------------------------------------
- //! A data type `T` is arithmetic if `std::is_arithmetic<T>::%value` is
- //! true. For an arithmetic data type `T`, a model of `Logical` is
- //! provided automatically by using the result of the builtin implicit
- //! conversion to `bool` as a truth value. Specifically, the minimal
- //! complete definition for those data types is
- //! @code
- //! eval_if(cond, then, else_) = cond ? then(id) : else(id)
- //! not_(cond) = static_cast<T>(cond ? false : true)
- //! while_(pred, state, f) = equivalent to a normal while loop
- //! @endcode
- //!
- //! > #### Rationale for not providing a model for all contextually convertible to bool data types
- //! > The `not_` method can not be implemented in a meaningful way for all
- //! > of those types. For example, one can not cast a pointer type `T*`
- //! > to bool and then back again to `T*` in a meaningful way. With an
- //! > arithmetic type `T`, however, it is possible to cast from `T` to
- //! > bool and then to `T` again; the result will be `0` or `1` depending
- //! > on the truth value. If you want to use a pointer type or something
- //! > similar in a conditional, it is suggested to explicitly convert it
- //! > to bool by using `to<bool>`.
- //!
- //!
- //! [1]: http://en.wikipedia.org/wiki/Boolean_algebra_(structure)
- template <typename L>
- struct Logical;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_LOGICAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/metafunction.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/metafunction.hpp
deleted file mode 100644
index 72884911f3..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/metafunction.hpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Metafunction`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_METAFUNCTION_HPP
-#define BOOST_HANA_FWD_CONCEPT_METAFUNCTION_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Metafunction Metafunction
- //! A `Metafunction` is a function that takes `hana::type`s as inputs and
- //! returns a `hana::type` as output.
- //!
- //! A `Metafunction` is an object satisfying the [FunctionObject][1]
- //! concept, but with additional requirements. First, it must be possible
- //! to apply a `Metafunction` to arguments whose tag is `type_tag`, and
- //! the result of such an application must be an object whose tag is also
- //! `type_tag`. Note that `hana::type` and `hana::basic_type` are the
- //! only such types.
- //!
- //! Secondly, a `Metafunction` must provide a nested `::%apply` template
- //! which allows performing the same type-level computation as is done by
- //! the call operator. In Boost.MPL parlance, a `Metafunction` `F` is
- //! hence a [MetafunctionClass][2] in addition to being a `FunctionObject`.
- //! Rigorously, the following must be satisfied by any object `f` of type
- //! `F` which is a `Metafunction`, and for arbitrary types `T...`:
- //! @code
- //! f(hana::type_c<T>...) == hana::type_c<F::apply<T...>::type>
- //! @endcode
- //!
- //! Thirdly, to ease the inter-operation of values and types,
- //! `Metafunction`s must also allow being called with arguments that
- //! are not `hana::type`s. In that case, the result is equivalent to
- //! calling the metafunction on the types of the arguments. Rigorously,
- //! this means that for arbitrary objects `x...`,
- //! @code
- //! f(x...) == f(hana::type_c<decltype(x)>...)
- //! @endcode
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! The `Metafunction` concept does not have a minimal complete definition
- //! in terms of tag-dispatched methods. Instead, the syntactic requirements
- //! documented above should be satisfied, and the `Metafunction` struct
- //! should be specialized explicitly in Hana's namespace.
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::metafunction`, `hana::metafunction_class`, `hana::template_`
- //!
- //!
- //! Rationale: Why aren't `Metafunction`s `Comparable`?
- //! ---------------------------------------------------
- //! When seeing `hana::template_`, a question that naturally arises is
- //! whether `Metafunction`s should be made `Comparable`. Indeed, it
- //! would seem to make sense to compare two templates `F` and `G` with
- //! `template_<F> == template_<G>`. However, in the case where `F` and/or
- //! `G` are alias templates, it makes sense to talk about two types of
- //! comparisons. The first one is _shallow_ comparison, and it determines
- //! that two alias templates are equal if they are the same alias
- //! template. The second one is _deep_ comparison, and it determines
- //! that two template aliases are equal if they alias the same type for
- //! any template argument. For example, given `F` and `G` defined as
- //! @code
- //! template <typename T>
- //! using F = void;
- //!
- //! template <typename T>
- //! using G = void;
- //! @endcode
- //!
- //! shallow comparison would determine that `F` and `G` are different
- //! because they are two different template aliases, while deep comparison
- //! would determine that `F` and `G` are equal because they always
- //! expand to the same type, `void`. Unfortunately, deep comparison is
- //! impossible to implement because one would have to check `F` and `G`
- //! on all possible types. On the other hand, shallow comparison is not
- //! satisfactory because `Metafunction`s are nothing but functions on
- //! `type`s, and the equality of two functions is normally defined with
- //! deep comparison. Hence, we adopt a conservative stance and avoid
- //! providing comparison for `Metafunction`s.
- //!
- //! [1]: http://en.cppreference.com/w/cpp/concept/FunctionObject
- //! [2]: http://www.boost.org/doc/libs/release/libs/mpl/doc/refmanual/metafunction-class.html
- template <typename F>
- struct Metafunction;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_METAFUNCTION_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/monad.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/monad.hpp
deleted file mode 100644
index b310868e44..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/monad.hpp
+++ /dev/null
@@ -1,198 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Monad`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_MONAD_HPP
-#define BOOST_HANA_FWD_CONCEPT_MONAD_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Monad Monad
- //! The `Monad` concept represents `Applicative`s with the ability to
- //! flatten nested levels of structure.
- //!
- //! Historically, Monads are a construction coming from category theory,
- //! an abstract branch of mathematics. The functional programming
- //! community eventually discovered how Monads could be used to
- //! formalize several useful things like side effects, which led
- //! to the wide adoption of Monads in that community. However, even
- //! in a multi-paradigm language like C++, there are several constructs
- //! which turn out to be Monads, like `std::optional`, `std::vector` and
- //! others.
- //!
- //! Everybody tries to introduce `Monad`s with a different analogy, and
- //! most people fail. This is called the [Monad tutorial fallacy][1]. We
- //! will try to avoid this trap by not presenting a specific intuition,
- //! and we will instead present what monads are mathematically.
- //! For specific intuitions, we will let readers who are new to this
- //! concept read one of the many excellent tutorials available online.
- //! Understanding Monads might take time at first, but once you get it,
- //! a lot of patterns will become obvious Monads; this enlightening will
- //! be your reward for the hard work.
- //!
- //! There are different ways of defining a Monad; Haskell uses a function
- //! called `bind` (`>>=`) and another one called `return` (it has nothing
- //! to do with C++'s `return` statement). They then introduce relationships
- //! that must be satisfied for a type to be a Monad with those functions.
- //! Mathematicians sometimes use a function called `join` and another one
- //! called `unit`, or they also sometimes use other category theoretic
- //! constructions like functor adjunctions and the Kleisli category.
- //!
- //! This library uses a composite approach. First, we use the `flatten`
- //! function (equivalent to `join`) along with the `lift` function from
- //! `Applicative` (equivalent to `unit`) to introduce the notion of
- //! monadic function composition. We then write the properties that must
- //! be satisfied by a Monad using this monadic composition operator,
- //! because we feel it shows the link between Monads and Monoids more
- //! clearly than other approaches.
- //!
- //! Roughly speaking, we will say that a `Monad` is an `Applicative` which
- //! also defines a way to compose functions returning a monadic result,
- //! as opposed to only being able to compose functions returning a normal
- //! result. We will then ask for this composition to be associative and to
- //! have a neutral element, just like normal function composition. For
- //! usual composition, the neutral element is the identity function `id`.
- //! For monadic composition, the neutral element is the `lift` function
- //! defined by `Applicative`. This construction is made clearer in the
- //! laws below.
- //!
- //! @note
- //! Monads are known to be a big chunk to swallow. However, it is out of
- //! the scope of this documentation to provide a full-blown explanation
- //! of the concept. The [Typeclassopedia][2] is a nice Haskell-oriented
- //! resource where more information about Monads can be found.
- //!
- //!
- //! Minimal complete definitions
- //! ----------------------------
- //! First, a `Monad` must be both a `Functor` and an `Applicative`.
- //! Also, an implementation of `flatten` or `chain` satisfying the
- //! laws below for monadic composition must be provided.
- //!
- //! @note
- //! The `ap` method for `Applicatives` may be derived from the minimal
- //! complete definition of `Monad` and `Functor`; see below for more
- //! information.
- //!
- //!
- //! Laws
- //! ----
- //! To simplify writing the laws, we use the comparison between functions.
- //! For two functions `f` and `g`, we define
- //! @code
- //! f == g if and only if f(x) == g(x) for all x
- //! @endcode
- //!
- //! With the usual composition of functions, we are given two functions
- //! @f$ f : A \to B @f$ and @f$ g : B \to C @f$, and we must produce a
- //! new function @f$ compose(g, f) : A \to C @f$. This composition of
- //! functions is associative, which means that
- //! @code
- //! compose(h, compose(g, f)) == compose(compose(h, g), f)
- //! @endcode
- //!
- //! Also, this composition has an identity element, which is the identity
- //! function. This simply means that
- //! @code
- //! compose(f, id) == compose(id, f) == f
- //! @endcode
- //!
- //! This is probably nothing new if you are reading the `Monad` laws.
- //! Now, we can observe that the above is equivalent to saying that
- //! functions with the composition operator form a `Monoid`, where the
- //! neutral element is the identity function.
- //!
- //! Given an `Applicative` `F`, what if we wanted to compose two functions
- //! @f$ f : A \to F(B) @f$ and @f$ g : B \to F(C) @f$? When the
- //! `Applicative` `F` is also a `Monad`, such functions taking normal
- //! values but returning monadic values are called _monadic functions_.
- //! To compose them, we obviously can't use normal function composition,
- //! since the domains and codomains of `f` and `g` do not match properly.
- //! Instead, we'll need a new operator -- let's call it `monadic_compose`:
- //! @f[
- //! \mathtt{monadic\_compose} :
- //! (B \to F(C)) \times (A \to F(B)) \to (A \to F(C))
- //! @f]
- //!
- //! How could we go about implementing this function? Well, since we know
- //! `F` is an `Applicative`, the only functions we have are `transform`
- //! (from `Functor`), and `lift` and `ap` (from `Applicative`). Hence,
- //! the only thing we can do at this point while respecting the signatures
- //! of `f` and `g` is to set (for `x` of type `A`)
- //! @code
- //! monadic_compose(g, f)(x) = transform(f(x), g)
- //! @endcode
- //!
- //! Indeed, `f(x)` is of type `F(B)`, so we can map `g` (which takes `B`'s)
- //! on it. Doing so will leave us with a result of type `F(F(C))`, but what
- //! we wanted was a result of type `F(C)` to respect the signature of
- //! `monadic_compose`. If we had a joker of type @f$ F(F(C)) \to F(C) @f$,
- //! we could simply set
- //! @code
- //! monadic_compose(g, f)(x) = joker(transform(f(x), g))
- //! @endcode
- //!
- //! and we would be happy. It turns out that `flatten` is precisely this
- //! joker. Now, we'll want our joker to satisfy some properties to make
- //! sure this composition is associative, just like our normal composition
- //! was. These properties are slightly cumbersome to specify, so we won't
- //! do it here. Also, we'll need some kind of neutral element for the
- //! composition. This neutral element can't be the usual identity function,
- //! because it does not have the right type: our neutral element needs to
- //! be a function of type @f$ X \to F(X) @f$ but the identity function has
- //! type @f$ X \to X @f$. It is now the right time to observe that `lift`
- //! from `Applicative` has exactly the right signature, and so we'll take
- //! this for our neutral element.
- //!
- //! We are now ready to formulate the `Monad` laws using this composition
- //! operator. For a `Monad` `M` and functions @f$ f : A \to M(B) @f$,
- //! @f$ g : B \to M(C) @f$ and @f$ h : C \to M(D) @f$, the following
- //! must be satisfied:
- //! @code
- //! // associativity
- //! monadic_compose(h, monadic_compose(g, f)) == monadic_compose(monadic_compose(h, g), f)
- //!
- //! // right identity
- //! monadic_compose(f, lift<M(A)>) == f
- //!
- //! // left identity
- //! monadic_compose(lift<M(B)>, f) == f
- //! @endcode
- //!
- //! which is to say that `M` along with monadic composition is a Monoid
- //! where the neutral element is `lift`.
- //!
- //!
- //! Refined concepts
- //! ----------------
- //! 1. `Functor`
- //! 2. `Applicative` (free implementation of `ap`)\n
- //! When the minimal complete definition for `Monad` and `Functor` are
- //! both satisfied, it is possible to implement `ap` by setting
- //! @code
- //! ap(fs, xs) = chain(fs, [](auto f) {
- //! return transform(xs, f);
- //! })
- //! @endcode
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::lazy`, `hana::optional`, `hana::tuple`
- //!
- //!
- //! [1]: https://byorgey.wordpress.com/2009/01/12/abstraction-intuition-and-the-monad-tutorial-fallacy/
- //! [2]: https://wiki.haskell.org/Typeclassopedia#Monad
- template <typename M>
- struct Monad;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_MONAD_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/monad_plus.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/monad_plus.hpp
deleted file mode 100644
index dcdf65e210..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/monad_plus.hpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::MonadPlus`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_MONAD_PLUS_HPP
-#define BOOST_HANA_FWD_CONCEPT_MONAD_PLUS_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-MonadPlus MonadPlus
- //! The `MonadPlus` concept represents Monads with a monoidal structure.
- //!
- //! Intuitively, whereas a Monad can be seen as some kind of container
- //! or context, a MonadPlus can be seen as a container or a context that
- //! can be concatenated with other containers or contexts. There must
- //! also be an identity element for this combining operation. For example,
- //! a tuple is a MonadPlus, because tuples can be concatenated and the
- //! empty tuple would act as an identity for concatenation. How is this
- //! different from a Monad which is also a Monoid? The answer is that the
- //! monoidal structure on a MonadPlus must _not_ depend of the contents
- //! of the structure; it must not require the contents to be a Monoid
- //! in order to work.
- //!
- //! While sequences are not the only possible model for MonadPlus, the
- //! method names used here refer to the MonadPlus of sequences under
- //! concatenation. Several useful functions generalizing operations on
- //! sequences are included with this concept, like `append`, `prepend`
- //! and `filter`.
- //!
- //! @note
- //! This documentation does not go into much details about the nature
- //! of the MonadPlus concept. However, there is a nice Haskell-oriented
- //! [WikiBook][1] going into further details.
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! `concat` and `empty`
- //!
- //!
- //! Laws
- //! ----
- //! First, a MonadPlus is required to have a monoidal structure. Hence, it
- //! is no surprise that for any MonadPlus `M`, we require `M(T)` to be a
- //! valid monoid. However, we do not enforce that `M(T)` actually models
- //! the Monoid concept provided by Hana. Further, for all objects `a, b, c`
- //! of data type `M(T)`,
- //! @code
- //! // identity
- //! concat(empty<M(T)>(), a) == a
- //! concat(a, empty<M(T)>()) == a
- //!
- //! // associativity
- //! concat(a, concat(b, c)) == concat(concat(a, b), c)
- //! @endcode
- //!
- //! Secondly, a MonadPlus is also required to obey the following laws,
- //! which represent the fact that `empty<M(T)>()` must be some kind of
- //! absorbing element for the `chain` operation. For all objects `a` of
- //! data type `M(T)` and functions @f$ f : T \to M(U) @f$,
- //! @code
- //! chain(empty<M(T)>(), f) == empty<M(U)>()
- //! chain(a, always(empty<M(T)>())) == empty<M(U)>()
- //! @endcode
- //!
- //!
- //! Refined concepts
- //! ----------------
- //! `Functor`, `Applicative` and `Monad`
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::optional`, `hana::tuple`
- //!
- //! [1]: https://en.wikibooks.org/wiki/Haskell/MonadPlus
- template <typename M>
- struct MonadPlus;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_MONAD_PLUS_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/monoid.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/monoid.hpp
deleted file mode 100644
index 381e29dff7..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/monoid.hpp
+++ /dev/null
@@ -1,101 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Monoid`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_MONOID_HPP
-#define BOOST_HANA_FWD_CONCEPT_MONOID_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Monoid Monoid
- //! The `Monoid` concept represents data types with an associative
- //! binary operation that has an identity.
- //!
- //! Specifically, a [Monoid][1] is a basic algebraic structure typically
- //! used in mathematics to construct more complex algebraic structures
- //! like `Group`s, `Ring`s and so on. They are useful in several contexts,
- //! notably to define the properties of numbers in a granular way. At its
- //! core, a `Monoid` is a set `S` of objects along with a binary operation
- //! (let's say `+`) that is associative and that has an identity in `S`.
- //! There are many examples of `Monoid`s:
- //! - strings with concatenation and the empty string as the identity
- //! - integers with addition and `0` as the identity
- //! - integers with multiplication and `1` as the identity
- //! - many others...
- //!
- //! As you can see with the integers, there are some sets that can be
- //! viewed as a monoid in more than one way, depending on the choice
- //! of the binary operation and identity. The method names used here
- //! refer to the monoid of integers under addition; `plus` is the binary
- //! operation and `zero` is the identity element of that operation.
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! `plus` and `zero` satisfying the laws
- //!
- //!
- //! Laws
- //! ----
- //! For all objects `x`, `y` and `z` of a `Monoid` `M`, the following
- //! laws must be satisfied:
- //! @code
- //! plus(zero<M>(), x) == x // left zero
- //! plus(x, zero<M>()) == x // right zero
- //! plus(x, plus(y, z)) == plus(plus(x, y), z) // associativity
- //! @endcode
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::integral_constant`
- //!
- //!
- //! Free model for non-boolean arithmetic data types
- //! ------------------------------------------------
- //! A data type `T` is arithmetic if `std::is_arithmetic<T>::%value` is
- //! true. For a non-boolean arithmetic data type `T`, a model of `Monoid`
- //! is automatically defined by setting
- //! @code
- //! plus(x, y) = (x + y)
- //! zero<T>() = static_cast<T>(0)
- //! @endcode
- //!
- //! > #### Rationale for not making `bool` a `Monoid` by default
- //! > First, it makes no sense whatsoever to define an additive `Monoid`
- //! > over the `bool` type. Also, it could make sense to define a `Monoid`
- //! > with logical conjunction or disjunction. However, C++ allows `bool`s
- //! > to be added, and the method names of this concept really suggest
- //! > addition. In line with the principle of least surprise, no model
- //! > is provided by default.
- //!
- //!
- //! Structure-preserving functions
- //! ------------------------------
- //! Let `A` and `B` be two `Monoid`s. A function `f : A -> B` is said
- //! to be a [Monoid morphism][2] if it preserves the monoidal structure
- //! between `A` and `B`. Rigorously, for all objects `x, y` of data
- //! type `A`,
- //! @code
- //! f(plus(x, y)) == plus(f(x), f(y))
- //! f(zero<A>()) == zero<B>()
- //! @endcode
- //! Functions with these properties interact nicely with `Monoid`s, which
- //! is why they are given such a special treatment.
- //!
- //!
- //! [1]: http://en.wikipedia.org/wiki/Monoid
- //! [2]: http://en.wikipedia.org/wiki/Monoid#Monoid_homomorphisms
- template <typename M>
- struct Monoid;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_MONOID_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/orderable.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/orderable.hpp
deleted file mode 100644
index 7c4cf233db..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/orderable.hpp
+++ /dev/null
@@ -1,187 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Orderable`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_ORDERABLE_HPP
-#define BOOST_HANA_FWD_CONCEPT_ORDERABLE_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Orderable Orderable
- //! The `Orderable` concept represents totally ordered data types.
- //!
- //! Intuitively, `Orderable` objects must define a binary predicate named
- //! `less` returning whether the first argument is to be considered less
- //! than the second argument. The word "total" means that _distinct_
- //! objects must always be ordered; if `a` and `b` are not equal, then
- //! exactly one of `less(a, b)` and `less(b, a)` must be true. This is
- //! a contrast with weaker kinds of orders that would allow some objects
- //! to be incomparable (neither less than nor greater than). Also note
- //! that a non-strict total order may always be obtained from a strict
- //! total order (and vice-versa) by setting
- //! @code
- //! a <= b = !(b < a)
- //! a < b = !(b <= a)
- //! @endcode
- //! The non-strict version is used in the description of the laws because
- //! it makes them easier to parse for humans, but they could be formulated
- //! equivalently using the strict order.
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! `less`
- //!
- //! When `less` is defined, the other methods are defined from it using
- //! the same definition as mandated in the laws below.
- //!
- //!
- //! Laws
- //! ----
- //! Rigorously speaking, a [total order][1] `<=` on a set `S` is a binary
- //! predicate @f$ <= \;: S \times S \to bool @f$ such that for all
- //! `a`, `b`, `c` in `S`,
- //! @code
- //! if a <= b and b <= a then a == b // Antisymmetry
- //! if a <= b and b <= c then a <= c // Transitivity
- //! either a <= b or b <= a // Totality
- //! @endcode
- //! Additionally, the `less`, `greater` and `greater_equal` methods should
- //! have the following intuitive meanings:
- //! @code
- //! a < b if and only if !(b <= a)
- //! a > b if and only if b < a
- //! a >= b if and only if !(a < b)
- //! @endcode
- //!
- //!
- //! Refined concept
- //! ---------------
- //! 1. `Comparable` (free model)\n
- //! Since `Orderable` requires `less_equal` to be a total order, a model
- //! of `Comparable` may always be obtained by setting
- //! @code
- //! equal(x, y) = less_equal(x, y) && less_equal(y, x)
- //! @endcode
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::integral_constant`, `hana::optional`, `hana::pair`,
- //! `hana::string`, `hana::tuple`
- //!
- //!
- //! Free model for `LessThanComparable` data types
- //! ----------------------------------------------
- //! Two data types `T` and `U` that model the cross-type version of the
- //! usual [LessThanComparable][2] C++ concept are automatically a model
- //! of `Orderable` by setting
- //! @code
- //! less(x, y) = (x < y)
- //! @endcode
- //! The cross-type version of the LessThanComparable concept is analogous
- //! to the cross-type version of the EqualityComparable concept presented
- //! in [N3351][3], which is compatible with the usual single type
- //! definition.
- //! However, note that the LessThanComparable concept only requires `<`
- //! to be a [strict weak ordering][4], which is a weaker requirement
- //! than being a total order. Hence, if `less` is used with objects
- //! of a LessThanComparable data type that do not define a total order,
- //! some algorithms may have an unexpected behavior. It is the author's
- //! opinion that defining `operator<` as a non-total order is a bad idea,
- //! but this is debatable and so the design choice of providing a model
- //! for LessThanComparable data types is open to debate. Waiting for
- //! some user input.
- //!
- //!
- //! Order-preserving functions
- //! --------------------------
- //! Let `A` and `B` be two `Orderable` data types. A function
- //! @f$ f : A \to B@f$ is said to be order-preserving (also called
- //! monotone) if it preserves the structure of the `Orderable` concept,
- //! which can be rigorously stated as follows. For all objects `x`, `y`
- //! of data type `A`,
- //! @code
- //! if less(x, y) then less(f(x), f(y))
- //! @endcode
- //! Another important property is that of being order-reflecting, which
- //! can be stated as
- //! @code
- //! if less(f(x), f(y)) then less(x, y)
- //! @endcode
- //! We say that a function is an order-embedding if it is both
- //! order-preserving and order-reflecting, i.e. if
- //! @code
- //! less(x, y) if and only if less(f(x), f(y))
- //! @endcode
- //!
- //!
- //! Cross-type version of the methods
- //! ---------------------------------
- //! The comparison methods (`less`, `less_equal`, `greater` and
- //! `greater_equal`) are "overloaded" to handle distinct data types
- //! with certain properties. Specifically, they are defined for
- //! _distinct_ data types `A` and `B` such that
- //! 1. `A` and `B` share a common data type `C`, as determined by the
- //! `common` metafunction
- //! 2. `A`, `B` and `C` are all `Orderable` when taken individually
- //! 3. @f$\mathrm{to<C>} : A \to C@f$ and @f$\mathrm{to<C>} : B \to C@f$
- //! are both order-embeddings as determined by the `is_embedding`
- //! metafunction.
- //!
- //! The method definitions for data types satisfying the above
- //! properties are
- //! @code
- //! less(x, y) = less(to<C>(x), to<C>(y))
- //! less_equal(x, y) = less_equal(to<C>(x), to<C>(y))
- //! greater_equal(x, y) = greater_equal(to<C>(x), to<C>(y))
- //! greater(x, y) = greater(to<C>(x), to<C>(y))
- //! @endcode
- //!
- //!
- //! Partial application of the methods
- //! ----------------------------------
- //! The `less`, `greater`, `less_equal` and `greater_equal` methods can
- //! be called in two different ways. First, they can be called like
- //! normal functions:
- //! @code
- //! less(x, y)
- //! greater(x, y)
- //!
- //! less_equal(x, y)
- //! greater_equal(x, y)
- //! @endcode
- //!
- //! However, they may also be partially applied to an argument as follows:
- //! @code
- //! less.than(x)(y) == less(y, x)
- //! greater.than(x)(y) == greater(y, x)
- //!
- //! less_equal.than(x)(y) == less_equal(y, x)
- //! greater_equal.than(x)(y) == greater_equal(y, x)
- //! @endcode
- //!
- //! Take good note that the order of the arguments is reversed, so
- //! for example `less.than(x)(y)` is equivalent to `less(y, x)`, not
- //! `less(x, y)`. This is because those variants are meant to be used
- //! with higher order algorithms, where the chosen application order
- //! makes sense.
- //!
- //!
- //! [1]: http://en.wikipedia.org/wiki/Total_order
- //! [2]: http://en.cppreference.com/w/cpp/concept/LessThanComparable
- //! [3]: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3351.pdf
- //! [4]: http://en.wikipedia.org/wiki/Strict_weak_ordering
- template <typename Ord>
- struct Orderable;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_ORDERABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/product.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/product.hpp
deleted file mode 100644
index 0d029fdb11..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/product.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Product`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_PRODUCT_HPP
-#define BOOST_HANA_FWD_CONCEPT_PRODUCT_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Product Product
- //! Represents types that are generic containers of two elements.
- //!
- //! This concept basically represents types that are like `std::pair`.
- //! The motivation for making such a precise concept is similar to the
- //! motivation behind the `Sequence` concept; there are many different
- //! implementations of `std::pair` in different libraries, and we would
- //! like to manipulate any of them generically.
- //!
- //! Since a `Product` is basically a pair, it is unsurprising that the
- //! operations provided by this concept are getting the first and second
- //! element of a pair, creating a pair from two elements and other
- //! simmilar operations.
- //!
- //! @note
- //! Mathematically, this concept represents types that are category
- //! theoretical [products][1]. This is also where the name comes
- //! from.
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! `first`, `second` and `make`
- //!
- //! `first` and `second` must obviously return the first and the second
- //! element of the pair, respectively. `make` must take two arguments `x`
- //! and `y` representing the first and the second element of the pair,
- //! and return a pair `p` such that `first(p) == x` and `second(p) == y`.
- //! @include example/product/make.cpp
- //!
- //!
- //! Laws
- //! ----
- //! For a model `P` of `Product`, the following laws must be satisfied.
- //! For every data types `X` and `Y`, there must be a unique function
- //! @f$ \mathtt{make} : X \times Y \to P @f$ such that for every `x`, `y`,
- //! @code
- //! x == first(make<P>(x, y))
- //! y == second(make<P>(x, y))
- //! @endcode
- //!
- //! @note
- //! This law is less general than the universal property typically used to
- //! define category theoretical products, but it is vastly enough for what
- //! we need.
- //!
- //! This is basically saying that a `Product` must be the most general
- //! object able to contain a pair of objects `(P1, P2)`, but nothing
- //! more. Since the categorical product is defined by a universal
- //! property, all the models of this concept are isomorphic, and
- //! the isomorphism is unique. In other words, there is one and only
- //! one way to convert one `Product` to another.
- //!
- //! Another property that must be satisfied by `first` and `second` is
- //! that of @ref move-independence, which ensures that we can optimally
- //! decompose a `Product` into its two members without making redundant
- //! copies.
- //!
- //!
- //! Refined concepts
- //! ----------------
- //! 1. `Comparable` (free model)\n
- //! Two products `x` and `y` are equal iff they are equal element-wise,
- //! by comparing the first element before the second element.
- //! @include example/product/comparable.cpp
- //!
- //! 2. `Orderable` (free model)\n
- //! Products are ordered using a lexicographical ordering as-if they
- //! were 2-element tuples.
- //!
- //! 3. `Foldable` (free model)\n
- //! Folding a `Product` `p` is equivalent to folding a list containing
- //! `first(p)` and `second(p)`, in that order.
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::pair`
- //!
- //!
- //! [1]: http://en.wikipedia.org/wiki/Product_(category_theory)
- template <typename P>
- struct Product;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_PRODUCT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/ring.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/ring.hpp
deleted file mode 100644
index 45b301f272..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/ring.hpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Ring`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_RING_HPP
-#define BOOST_HANA_FWD_CONCEPT_RING_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Ring Ring
- //! The `Ring` concept represents `Group`s that also form a `Monoid`
- //! under a second binary operation that distributes over the first.
- //!
- //! A [Ring][1] is an algebraic structure built on top of a `Group`
- //! which requires a monoidal structure with respect to a second binary
- //! operation. This second binary operation must distribute over the
- //! first one. Specifically, a `Ring` is a triple `(S, +, *)` such that
- //! `(S, +)` is a `Group`, `(S, *)` is a `Monoid` and `*` distributes
- //! over `+`, i.e.
- //! @code
- //! x * (y + z) == (x * y) + (x * z)
- //! @endcode
- //!
- //! The second binary operation is often written `*` with its identity
- //! written `1`, in reference to the `Ring` of integers under
- //! multiplication. The method names used here refer to this exact ring.
- //!
- //!
- //! Minimal complete definintion
- //! ----------------------------
- //! `one` and `mult` satisfying the laws
- //!
- //!
- //! Laws
- //! ----
- //! For all objects `x`, `y`, `z` of a `Ring` `R`, the following laws must
- //! be satisfied:
- //! @code
- //! mult(x, mult(y, z)) == mult(mult(x, y), z) // associativity
- //! mult(x, one<R>()) == x // right identity
- //! mult(one<R>(), x) == x // left identity
- //! mult(x, plus(y, z)) == plus(mult(x, y), mult(x, z)) // distributivity
- //! @endcode
- //!
- //!
- //! Refined concepts
- //! ----------------
- //! `Monoid`, `Group`
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::integral_constant`
- //!
- //!
- //! Free model for non-boolean arithmetic data types
- //! ------------------------------------------------
- //! A data type `T` is arithmetic if `std::is_arithmetic<T>::%value` is
- //! true. For a non-boolean arithmetic data type `T`, a model of `Ring` is
- //! automatically defined by using the provided `Group` model and setting
- //! @code
- //! mult(x, y) = (x * y)
- //! one<T>() = static_cast<T>(1)
- //! @endcode
- //!
- //! @note
- //! The rationale for not providing a Ring model for `bool` is the same
- //! as for not providing Monoid and Group models.
- //!
- //!
- //! Structure-preserving functions
- //! ------------------------------
- //! Let `A` and `B` be two `Ring`s. A function `f : A -> B` is said to
- //! be a [Ring morphism][2] if it preserves the ring structure between
- //! `A` and `B`. Rigorously, for all objects `x, y` of data type `A`,
- //! @code
- //! f(plus(x, y)) == plus(f(x), f(y))
- //! f(mult(x, y)) == mult(f(x), f(y))
- //! f(one<A>()) == one<B>()
- //! @endcode
- //! Because of the `Ring` structure, it is easy to prove that the
- //! following will then also be satisfied:
- //! @code
- //! f(zero<A>()) == zero<B>()
- //! f(negate(x)) == negate(f(x))
- //! @endcode
- //! which is to say that `f` will then also be a `Group` morphism.
- //! Functions with these properties interact nicely with `Ring`s,
- //! which is why they are given such a special treatment.
- //!
- //!
- //! [1]: http://en.wikipedia.org/wiki/Ring_(mathematics)
- //! [2]: http://en.wikipedia.org/wiki/Ring_homomorphism
- template <typename R>
- struct Ring;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_RING_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/searchable.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/searchable.hpp
deleted file mode 100644
index 2c1e22fc4a..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/searchable.hpp
+++ /dev/null
@@ -1,143 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Searchable`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_SEARCHABLE_HPP
-#define BOOST_HANA_FWD_CONCEPT_SEARCHABLE_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Searchable Searchable
- //! The `Searchable` concept represents structures that can be searched.
- //!
- //! Intuitively, a `Searchable` is any structure, finite or infinite,
- //! containing elements that can be searched using a predicate. Sometimes,
- //! `Searchable`s will associate keys to values; one can search for a key
- //! with a predicate, and the value associated to it is returned. This
- //! gives rise to map-like data structures. Other times, the elements of
- //! the structure that are searched (i.e. those to which the predicate is
- //! applied) are the same that are returned, which gives rise to set-like
- //! data structures. In general, we will refer to the _keys_ of a
- //! `Searchable` structure as those elements that are used for searching,
- //! and to the _values_ of a `Searchable` as those elements that are
- //! returned when a search is successful. As was explained, there is no
- //! requirement that both notions differ, and it is often useful to have
- //! keys and values coincide (think about `std::set`).
- //!
- //! Some methods like `any_of`, `all_of` and `none_of` allow simple queries
- //! to be performed on the keys of the structure, while other methods like
- //! `find` and `find_if` make it possible to find the value associated
- //! to a key. The most specific method should always be used if one
- //! cares about performance, because it is usually the case that heavy
- //! optimizations can be performed in more specific methods. For example,
- //! an associative data structure implemented as a hash table will be much
- //! faster to access using `find` than `find_if`, because in the second
- //! case it will have to do a linear search through all the entries.
- //! Similarly, using `contains` will likely be much faster than `any_of`
- //! with an equivalent predicate.
- //!
- //! > __Insight__\n
- //! > In a lazy evaluation context, any `Foldable` can also become a model
- //! > of `Searchable` because we can search lazily through the structure
- //! > with `fold_right`. However, in the context of C++, some `Searchable`s
- //! > can not be folded; think for example of an infinite set.
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! `find_if` and `any_of`
- //!
- //! When `find_if` and `any_of` are provided, the other functions are
- //! implemented according to the laws explained below.
- //!
- //! @note
- //! We could implement `any_of(xs, pred)` by checking whether
- //! `find_if(xs, pred)` is an empty `optional` or not, and then reduce
- //! the minimal complete definition to `find_if`. However, this is not
- //! done because that implementation requires the predicate of `any_of`
- //! to return a compile-time `Logical`, which is more restrictive than
- //! what we have right now.
- //!
- //!
- //! Laws
- //! ----
- //! In order for the semantics of the methods to be consistent, some
- //! properties must be satisfied by any model of the `Searchable` concept.
- //! Rigorously, for any `Searchable`s `xs` and `ys` and any predicate `p`,
- //! the following laws should be satisfied:
- //! @code
- //! any_of(xs, p) <=> !all_of(xs, negated p)
- //! <=> !none_of(xs, p)
- //!
- //! contains(xs, x) <=> any_of(xs, equal.to(x))
- //!
- //! find(xs, x) == find_if(xs, equal.to(x))
- //! find_if(xs, always(false_)) == nothing
- //!
- //! is_subset(xs, ys) <=> all_of(xs, [](auto x) { return contains(ys, x); })
- //! is_disjoint(xs, ys) <=> none_of(xs, [](auto x) { return contains(ys, x); })
- //! @endcode
- //!
- //! Additionally, if all the keys of the `Searchable` are `Logical`s,
- //! the following laws should be satisfied:
- //! @code
- //! any(xs) <=> any_of(xs, id)
- //! all(xs) <=> all_of(xs, id)
- //! none(xs) <=> none_of(xs, id)
- //! @endcode
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::map`, `hana::optional`, `hana::range`, `hana::set`,
- //! `hana::string`, `hana::tuple`
- //!
- //!
- //! Free model for builtin arrays
- //! -----------------------------
- //! Builtin arrays whose size is known can be searched as-if they were
- //! homogeneous tuples. However, since arrays can only hold objects of
- //! a single type and the predicate to `find_if` must return a compile-time
- //! `Logical`, the `find_if` method is fairly useless. For similar reasons,
- //! the `find` method is also fairly useless. This model is provided mainly
- //! because of the `any_of` method & friends, which are both useful and
- //! compile-time efficient.
- //!
- //!
- //! Structure preserving functions
- //! ------------------------------
- //! Given two `Searchables` `S1` and `S2`, a function
- //! @f$ f : S_1(X) \to S_2(X) @f$ is said to preserve the `Searchable`
- //! structure if for all `xs` of data type `S1(X)` and predicates
- //! @f$ \mathtt{pred} : X \to Bool @f$ (for a `Logical` `Bool`),
- //! @code
- //! any_of(xs, pred) if and only if any_of(f(xs), pred)
- //! find_if(xs, pred) == find_if(f(xs), pred)
- //! @endcode
- //!
- //! This is really just a generalization of the following, more intuitive
- //! requirements. For all `xs` of data type `S1(X)` and `x` of data type
- //! `X`,
- //! @code
- //! x ^in^ xs if and only if x ^in^ f(xs)
- //! find(xs, x) == find(f(xs), x)
- //! @endcode
- //!
- //! These requirements can be understood as saying that `f` does not
- //! change the content of `xs`, although it may reorder elements.
- //! As usual, such a structure-preserving transformation is said to
- //! be an embedding if it is also injective, i.e. if it is a lossless
- //! transformation.
- template <typename S>
- struct Searchable;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_SEARCHABLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/sequence.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/sequence.hpp
deleted file mode 100644
index 84cedd1263..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/sequence.hpp
+++ /dev/null
@@ -1,165 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Sequence`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_SEQUENCE_HPP
-#define BOOST_HANA_FWD_CONCEPT_SEQUENCE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Sequence Sequence
- //! The `Sequence` concept represents generic index-based sequences.
- //!
- //! Compared to other abstract concepts, the Sequence concept is very
- //! specific. It represents generic index-based sequences. The reason
- //! why such a specific concept is provided is because there are a lot
- //! of models that behave exactly the same while being implemented in
- //! wildly different ways. It is useful to regroup all those data types
- //! under the same umbrella for the purpose of generic programming.
- //!
- //! In fact, models of this concept are not only _similar_. They are
- //! actually _isomorphic_, in a sense that we define below, which is
- //! a fancy way of rigorously saying that they behave exactly the same
- //! to an external observer.
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! `Iterable`, `Foldable`, and `make`
- //!
- //! The `Sequence` concept does not provide basic methods that could be
- //! used as a minimal complete definition; instead, it borrows methods
- //! from other concepts and add laws to them. For this reason, it is
- //! necessary to specialize the `Sequence` metafunction in Hana's
- //! namespace to tell Hana that a type is indeed a `Sequence`. Explicitly
- //! specializing the `Sequence` metafunction can be seen like a seal
- //! saying "this data type satisfies the additional laws of a `Sequence`",
- //! since those can't be checked by Hana automatically.
- //!
- //!
- //! Laws
- //! ----
- //! The laws for being a `Sequence` are simple, and their goal is to
- //! restrict the semantics that can be associated to the functions
- //! provided by other concepts. First, a `Sequence` must be a finite
- //! `Iterable` (thus a `Foldable` too). Secondly, for a `Sequence` tag
- //! `S`, `make<S>(x1, ..., xn)` must be an object of tag `S` and whose
- //! linearization is `[x1, ..., xn]`. This basically ensures that objects
- //! of tag `S` are equivalent to their linearization, and that they can
- //! be created from such a linearization (with `make`).
- //!
- //! While it would be possible in theory to handle infinite sequences,
- //! doing so complicates the implementation of many algorithms. For
- //! simplicity, the current version of the library only handles finite
- //! sequences. However, note that this does not affect in any way the
- //! potential for having infinite `Searchable`s and `Iterable`s.
- //!
- //!
- //! Refined concepts
- //! ----------------
- //! 1. `Comparable` (definition provided automatically)\n
- //! Two `Sequence`s are equal if and only if they contain the same number
- //! of elements and their elements at any given index are equal.
- //! @include example/sequence/comparable.cpp
- //!
- //! 2. `Orderable` (definition provided automatically)\n
- //! `Sequence`s are ordered using the traditional lexicographical ordering.
- //! @include example/sequence/orderable.cpp
- //!
- //! 3. `Functor` (definition provided automatically)\n
- //! `Sequence`s implement `transform` as the mapping of a function over
- //! each element of the sequence. This is somewhat equivalent to what
- //! `std::transform` does to ranges of iterators. Also note that mapping
- //! a function over an empty sequence returns an empty sequence and never
- //! applies the function, as would be expected.
- //! @include example/sequence/functor.cpp
- //!
- //! 4. `Applicative` (definition provided automatically)\n
- //! First, `lift`ing a value into a `Sequence` is the same as creating a
- //! singleton sequence containing that value. Second, applying a sequence
- //! of functions to a sequence of values will apply each function to
- //! all the values in the sequence, and then return a list of all the
- //! results. In other words,
- //! @code
- //! ap([f1, ..., fN], [x1, ..., xM]) == [
- //! f1(x1), ..., f1(xM),
- //! ...
- //! fN(x1), ..., fN(xM)
- //! ]
- //! @endcode
- //! Example:
- //! @include example/sequence/applicative.cpp
- //!
- //! 5. `Monad` (definition provided automatically)\n
- //! First, `flaten`ning a `Sequence` takes a sequence of sequences and
- //! concatenates them to get a larger sequence. In other words,
- //! @code
- //! flatten([[a1, ..., aN], ..., [z1, ..., zM]]) == [
- //! a1, ..., aN, ..., z1, ..., zM
- //! ]
- //! @endcode
- //! This acts like a `std::tuple_cat` function, except it receives a
- //! sequence of sequences instead of a variadic pack of sequences to
- //! flatten.\n
- //! __Example__:
- //! @include example/sequence/monad.ints.cpp
- //! Also note that the model of `Monad` for `Sequence`s can be seen as
- //! modeling nondeterminism. A nondeterministic computation can be
- //! modeled as a function which returns a sequence of possible results.
- //! In this line of thought, `chain`ing a sequence of values into such
- //! a function will return a sequence of all the possible output values,
- //! i.e. a sequence of all the values applied to all the functions in
- //! the sequences.\n
- //! __Example__:
- //! @include example/sequence/monad.types.cpp
- //!
- //! 6. `MonadPlus` (definition provided automatically)\n
- //! `Sequence`s are models of the `MonadPlus` concept by considering the
- //! empty sequence as the unit of `concat`, and sequence concatenation
- //! as `concat`.
- //! @include example/sequence/monad_plus.cpp
- //!
- //! 7. `Foldable`\n
- //! The model of `Foldable` for `Sequence`s is uniquely determined by the
- //! model of `Iterable`.
- //! @include example/sequence/foldable.cpp
- //!
- //! 8. `Iterable`\n
- //! The model of `Iterable` for `Sequence`s corresponds to iteration over
- //! each element of the sequence, in order. This model is not provided
- //! automatically, and it is in fact part of the minimal complete
- //! definition for the `Sequence` concept.
- //! @include example/sequence/iterable.cpp
- //!
- //! 9. `Searchable` (definition provided automatically)\n
- //! Searching through a `Sequence` is equivalent to just searching through
- //! a list of the values it contains. The keys and the values on which
- //! the search is performed are both the elements of the sequence.
- //! @include example/sequence/searchable.cpp
- //!
- //!
- //! Concrete models
- //! ---------------
- //! `hana::tuple`
- //!
- //!
- //! [1]: http://en.wikipedia.org/wiki/Isomorphism#Isomorphism_vs._bijective_morphism
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename S>
- struct Sequence;
-#else
- template <typename S, typename = void>
- struct Sequence : Sequence<S, when<true>> { };
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_SEQUENCE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/concept/struct.hpp b/contrib/restricted/boost/boost/hana/fwd/concept/struct.hpp
deleted file mode 100644
index d9d0cffb58..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/concept/struct.hpp
+++ /dev/null
@@ -1,156 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::Struct`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONCEPT_STRUCT_HPP
-#define BOOST_HANA_FWD_CONCEPT_STRUCT_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-concepts
- //! @defgroup group-Struct Struct
- //! The `Struct` concept represents `struct`-like user-defined types.
- //!
- //! The `Struct` concept allows restricted compile-time reflection over
- //! user-defined types. In particular, it allows accessing the names of
- //! the members of a user-defined type, and also the value of those
- //! members. `Struct`s can also be folded, searched and converted to
- //! some types of containers, where more advanced transformations can
- //! be performed.
- //!
- //! While all types can _in theory_ be made `Struct`s, only a subset of
- //! them are actually interesting to see as such. More precisely, it is
- //! only interesting to make a type a `Struct` when it is conceptually
- //! a C++ `struct`, i.e. a mostly dumb aggregate of named data. The way
- //! this data is accessed is mostly unimportant to the `Struct` concept;
- //! it could be through getters and setters, through public members,
- //! through non-member functions or it could even be generated on-the-fly.
- //! The important part, which is made precise below, is that those accessor
- //! methods should be move-independent.
- //!
- //! Another way to see a `Struct` is as a map where the keys are the names
- //! of the members and the values are the values of those members. However,
- //! there are subtle differences like the fact that one can't add a member
- //! to a `Struct`, and also that the order of the members inside a `Struct`
- //! plays a role in determining the equality of `Struct`s, which is not
- //! the case for maps.
- //!
- //!
- //! Minimal complete definition
- //! ---------------------------
- //! `accessors`
- //!
- //! A model of `Struct` is created by specifying a sequence of key/value
- //! pairs with the `accessors` function. The first element of a pair in
- //! this sequence represents the "name" of a member of the `Struct`, while
- //! the second element is a function which retrieves this member from an
- //! object. The "names" do not have to be in any special form; they just
- //! have to be compile-time `Comparable`. For example, it is common to
- //! provide "names" that are `hana::string`s representing the actual names
- //! of the members, but one could provide `hana::integral_constant`s just
- //! as well. The values must be functions which, when given an object,
- //! retrieve the appropriate member from it.
- //!
- //! There are several ways of providing the `accessors` method, some of
- //! which are more flexible and others which are more convenient. First,
- //! one can define it through tag-dispatching, as usual.
- //! @snippet example/struct.mcd.tag_dispatching.cpp main
- //!
- //! Secondly, it is possible to provide a nested `hana_accessors_impl`
- //! type, which should be equivalent to a specialization of
- //! `accessors_impl` for tag-dispatching. However, for a type `S`, this
- //! technique only works when the data type of `S` is `S` itself, which
- //! is the case unless you explicitly asked for something else.
- //! @snippet example/struct.mcd.nested.cpp main
- //!
- //! Finally, the most convenient (but least flexible) option is to use
- //! the `BOOST_HANA_DEFINE_STRUCT`, the `BOOST_HANA_ADAPT_STRUCT` or the
- //! `BOOST_HANA_ADAPT_ADT` macro, which provide a minimal syntactic
- //! overhead. See the documentation of these macros for details on how
- //! to use them.
- //!
- //! Also note that it is not important that the accessor functions retrieve
- //! an actual member of the struct (e.g. `x.member`). Indeed, an accessor
- //! function could call a custom getter or even compute the value of the
- //! member on the fly:
- //! @snippet example/struct.custom_accessor.cpp main
- //!
- //! The only important thing is that the accessor functions are
- //! move-independent, a notion which is defined below.
- //!
- //!
- //! @anchor move-independence
- //! Move-independence
- //! -----------------
- //! The notion of move-independence presented here defines rigorously
- //! when it is legitimate to "double-move" from an object.
- //!
- //! A collection of functions `f1, ..., fn` sharing the same domain is
- //! said to be _move-independent_ if for every fresh (not moved-from)
- //! object `x` in the domain, any permutation of the following statements
- //! is valid and leaves the `zk` objects in a fresh (not moved-from) state:
- //! @code
- //! auto z1 = f1(std::move(x));
- //! ...
- //! auto zn = fn(std::move(x));
- //! @endcode
- //!
- //! @note
- //! In the special case where some functions return objects that can't be
- //! bound to with `auto zk =` (like `void` or a non-movable, non-copyable
- //! type), just pretend the return value is ignored.
- //!
- //! Intuitively, this ensures that we can treat `f1, ..., fn` as
- //! "accessors" that decompose `x` into independent subobjects, and
- //! that do so without moving from `x` more than that subobject. This
- //! is important because it allows us to optimally decompose `Struct`s
- //! into their subparts inside the library.
- //!
- //!
- //! Laws
- //! ----
- //! For any `Struct` `S`, the accessors in the `accessors<S>()` sequence
- //! must be move-independent, as defined above.
- //!
- //!
- //! Refined concepts
- //! ----------------
- //! 1. `Comparable` (free model)\n
- //! `Struct`s are required to be `Comparable`. Specifically, two `Struct`s
- //! of the same data type `S` must be equal if and only if all of their
- //! members are equal. By default, a model of `Comparable` doing just that
- //! is provided for models of `Struct`. In particular, note that the
- //! comparison of the members is made in the same order as they appear in
- //! the `hana::members` sequence.
- //! @include example/struct/comparable.cpp
- //!
- //! 2. `Foldable` (free model)\n
- //! A `Struct` can be folded by considering it as a list of pairs each
- //! containing the name of a member and the value associated to that
- //! member, in the same order as they appear in the `hana::members`
- //! sequence. By default, a model of `Foldable` doing just that is
- //! provided for models of the `Struct` concept.
- //! @include example/struct/foldable.cpp
- //! Being a model of `Foldable` makes it possible to turn a `Struct`
- //! into basically any `Sequence`, but also into a `hana::map` by simply
- //! using the `to<...>` function!
- //! @include example/struct/to.cpp
- //!
- //! 3. `Searchable` (free model)\n
- //! A `Struct` can be searched by considering it as a map where the keys
- //! are the names of the members of the `Struct`, and the values are the
- //! members associated to those names. By default, a model of `Searchable`
- //! is provided for any model of the `Struct` concept.
- //! @include example/struct/searchable.cpp
- template <typename S>
- struct Struct;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONCEPT_STRUCT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/contains.hpp b/contrib/restricted/boost/boost/hana/fwd/contains.hpp
deleted file mode 100644
index eb338281c1..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/contains.hpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::contains` and `boost::hana::in`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CONTAINS_HPP
-#define BOOST_HANA_FWD_CONTAINS_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/functional/flip.hpp>
-#include <boost/hana/functional/infix.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns whether the key occurs in the structure.
- //! @ingroup group-Searchable
- //!
- //! Given a `Searchable` structure `xs` and a `key`, `contains` returns
- //! whether any of the keys of the structure is equal to the given `key`.
- //! If the structure is not finite, an equal key has to appear at a finite
- //! position in the structure for this method to finish. For convenience,
- //! `contains` can also be applied in infix notation.
- //!
- //!
- //! @param xs
- //! The structure to search.
- //!
- //! @param key
- //! A key to be searched for in the structure. The key has to be
- //! `Comparable` with the other keys of the structure.
- //!
- //!
- //! Example
- //! -------
- //! @include example/contains.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto contains = [](auto&& xs, auto&& key) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct contains_impl : contains_impl<S, when<true>> { };
-
- struct contains_t {
- template <typename Xs, typename Key>
- constexpr auto operator()(Xs&& xs, Key&& key) const;
- };
-
- constexpr auto contains = hana::infix(contains_t{});
-#endif
-
- //! Return whether the key occurs in the structure.
- //! @ingroup group-Searchable
- //!
- //! Specifically, this is equivalent to `contains`, except `in` takes its
- //! arguments in reverse order. Like `contains`, `in` can also be applied
- //! in infix notation for increased expressiveness. This function is not a
- //! method that can be overriden; it is just a convenience function
- //! provided with the concept.
- //!
- //!
- //! Example
- //! -------
- //! @include example/in.cpp
- constexpr auto in = hana::infix(hana::flip(hana::contains));
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CONTAINS_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/core.hpp b/contrib/restricted/boost/boost/hana/fwd/core.hpp
deleted file mode 100644
index a25a159582..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/core.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/*!
-@file
-Forward declares the @ref group-core module.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CORE_HPP
-#define BOOST_HANA_FWD_CORE_HPP
-
-#include <boost/hana/fwd/core/common.hpp>
-#include <boost/hana/fwd/core/to.hpp>
-#include <boost/hana/fwd/core/default.hpp>
-#include <boost/hana/fwd/core/is_a.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/core/when.hpp>
-
-#endif // !BOOST_HANA_FWD_CORE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/core/common.hpp b/contrib/restricted/boost/boost/hana/fwd/core/common.hpp
deleted file mode 100644
index d2dcac59f7..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/core/common.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::common` and `boost::hana::common_t`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CORE_COMMON_HPP
-#define BOOST_HANA_FWD_CORE_COMMON_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-core
- //! %Metafunction returning the common data type between two data types.
- //!
- //! `common` is a natural extension of the `std::common_type` metafunction
- //! to data types. Given two data types `T` and `U`, we say that they share
- //! a common type `C` if both objects of data type `T` and objects of data
- //! type `U` may be converted (using `to`) to an object of data type `C`,
- //! and if that conversion is equality preserving. In other words, this
- //! means that for any objects `t1, t2` of data type `T` and `u1, u2` of
- //! data type `U`, the following law is satisfied:
- //! @code
- //! to<C>(t1) == to<C>(t2) if and only if t1 == t2
- //! to<C>(u1) == to<C>(u2) if and only if u1 == u2
- //! @endcode
- //!
- //! The role of `common` is to provide an alias to such a `C` if it exists.
- //! In other words, if `T` and `U` have a common data type `C`,
- //! `common<T, U>::%type` is an alias to `C`. Otherwise, `common<T, U>`
- //! has no nested `type` and can be used in dependent contexts to exploit
- //! SFINAE. By default, the exact steps followed by `common` to determine
- //! the common type `C` of `T` and `U` are
- //! 1. If `T` and `U` are the same, then `C` is `T`.
- //! 2. Otherwise, if `true ? std::declval<T>() : std::declval<U>()` is
- //! well-formed, then `C` is the type of this expression after using
- //! `std::decay` on it. This is exactly the type that would have been
- //! returned by `std::common_type`, except that custom specializations
- //! of `std::common_type` are not taken into account.
- //! 3. Otherwise, no common data type is detected and `common<T, U>` does
- //! not have a nested `type` alias, unless it is specialized explicitly.
- //!
- //! As point 3 suggests, it is also possible (and sometimes necessary) to
- //! specialize `common` in the `boost::hana` namespace for pairs of custom
- //! data types when the default behavior of `common` is not sufficient.
- //! Note that `when`-based specialization is supported when specializing
- //! `common` in the `boost::hana` namespace.
- //!
- //! > #### Rationale for requiring the conversion to be equality-preserving
- //! > This decision is aligned with a proposed concept design for the
- //! > standard library ([N3351][1]). Also, if we did not require this,
- //! > then all data types would trivially share the common data type
- //! > `void`, since all objects can be converted to it.
- //!
- //!
- //! Example
- //! -------
- //! @include example/core/common/common.cpp
- //!
- //!
- //! [1]: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3351.pdf
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename T, typename U, optional when-based enabler>
- struct common { see documentation };
-#else
- template <typename T, typename U, typename = void>
- struct common;
-#endif
-
- //! @ingroup group-core
- //! %Metafunction returning whether two data types share a common data type.
- //!
- //! Given two data types `T` and `U`, this metafunction simply returns
- //! whether `common<T, U>::%type` is well-formed.
- //!
- //!
- //! Example
- //! -------
- //! @include example/core/common/has_common.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename T, typename U>
- struct has_common { whether common<T, U>::type is well-formed };
-#else
- template <typename T, typename U, typename = void>
- struct has_common;
-#endif
-
- //! @ingroup group-core
- //! Alias to `common<T, U>::%type`, provided for convenience.
- //!
- //!
- //! Example
- //! -------
- //! @include example/core/common/common_t.cpp
- template <typename T, typename U>
- using common_t = typename common<T, U>::type;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CORE_COMMON_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/core/default.hpp b/contrib/restricted/boost/boost/hana/fwd/core/default.hpp
deleted file mode 100644
index 978c9a5f0c..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/core/default.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::default_` and `boost::hana::is_default`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CORE_DEFAULT_HPP
-#define BOOST_HANA_FWD_CORE_DEFAULT_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-core
- //! Mark a tag-dispatched method implementation as a default implementation.
- //!
- //! When defining a new concept with tag-dispatched methods, it is
- //! sometimes possible to provide a default implementation for some
- //! method(s). Making `default_` a base class of such a default
- //! implementation makes it possible to detect whether the method
- //! was dispatched to the default implementation afterwards.
- //!
- //!
- //! Example
- //! -------
- //! @include example/core/default.cpp
- struct default_ { };
-
- //! @ingroup group-core
- //! Returns whether a tag-dispatched method implementation is a default
- //! implementation.
- //!
- //! Given a tag-dispatched method implementation `method_impl<T...>`,
- //! `is_default<method_impl<T...>>` returns whether `method_impl<T...>`
- //! is a default implementation. Note that if there is no default
- //! implementation for the method, then `is_default` should not be
- //! used unless a static assertion saying that "the method is not
- //! implemented" is acceptable.
- //!
- //!
- //! Example
- //! -------
- //! @include example/core/default.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename Method>
- struct is_default { see documentation };
-#else
- template <typename T, typename = void>
- struct is_default;
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CORE_DEFAULT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/core/is_a.hpp b/contrib/restricted/boost/boost/hana/fwd/core/is_a.hpp
deleted file mode 100644
index 956549aa16..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/core/is_a.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::is_a` and `boost::hana::is_an`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CORE_IS_A_HPP
-#define BOOST_HANA_FWD_CORE_IS_A_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-core
- //! Returns whether the tag of an object matches a given tag.
- //!
- //! Given a tag `Tag` and a C++ type `T`, `is_a<Tag, T>` is a compile-time
- //! Logical representing whether the tag of `T` is exactly `Tag`. In other
- //! words, it is equivalent to
- //! @code
- //! std::is_same<Tag, tag_of<T>::type>
- //! @endcode
- //!
- //! For convenience, an alternate syntax is provided for using `is_a`.
- //! Specifically, `is_a<Tag>` is a function object returning whether the
- //! argument it is passed has the given tag. In other words,
- //! @code
- //! is_a<Tag>(x) == is_a<Tag, decltype(x)>
- //! @endcode
- //!
- //!
- //! Example
- //! -------
- //! @include example/core/is_a.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename Tag, typename optional_T>
- constexpr auto is_a = see-documentation;
-#else
- template <typename Tag, typename ...T>
- struct is_a_t;
-
- template <typename Tag, typename ...T>
- constexpr is_a_t<Tag, T...> is_a{};
-#endif
-
- //! @ingroup group-core
- //! Equivalent to `is_a`; provided for consistency with the rules of the
- //! English language.
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename Tag, typename ...T>
- constexpr auto is_an = is_a<Tag, T...>;
-#else
- template <typename Tag, typename ...T>
- constexpr is_a_t<Tag, T...> is_an{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CORE_IS_A_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/core/make.hpp b/contrib/restricted/boost/boost/hana/fwd/core/make.hpp
deleted file mode 100644
index 0ed5d0f19e..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/core/make.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::make`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CORE_MAKE_HPP
-#define BOOST_HANA_FWD_CORE_MAKE_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-core
- //! Create an object of the given tag with the given arguments.
- //!
- //! This function serves the same purpose as constructors in usual C++.
- //! However, instead of creating an object of a specific C++ type, it
- //! creates an object of a specific tag, regardless of the C++ type
- //! of that object.
- //!
- //! This function is actually a variable template, so `make<T>` can be
- //! passed around as a function object creating an object of tag `T`.
- //! Also, it uses tag-dispatching so this is how it should be customized
- //! for user-defined tags.
- //!
- //! Finally, the default implementation of `make` is equivalent to calling
- //! the constructor of the given tag with the corresponding arguments.
- //! In other words, by default,
- //! @code
- //! make<T>(args...) == T(args...)
- //! @endcode
- //!
- //! Note that the arguments are perfectly forwarded and the form of
- //! construction which is used is exactly as documented, i.e. `T(args...)`.
- //! However, if `T(args...)` is not a valid expression, a compilation
- //! error is triggered. This default behavior is useful because it makes
- //! foreign C++ types that have no notion of tag constructible with `make`
- //! out-of-the-box, since their tag is exactly themselves.
- //!
- //!
- //! Example
- //! -------
- //! @include example/core/make.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename Tag>
- constexpr auto make = [](auto&& ...x) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename Tag, typename = void>
- struct make_impl;
-
- template <typename Tag>
- struct make_t {
- template <typename ...X>
- constexpr decltype(auto) operator()(X&& ...x) const {
- return make_impl<Tag>::apply(static_cast<X&&>(x)...);
- }
- };
-
- template <typename Tag>
- constexpr make_t<Tag> make{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CORE_MAKE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/core/tag_of.hpp b/contrib/restricted/boost/boost/hana/fwd/core/tag_of.hpp
deleted file mode 100644
index 5d490dd717..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/core/tag_of.hpp
+++ /dev/null
@@ -1,120 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::tag_of` and `boost::hana::tag_of_t`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CORE_TAG_OF_HPP
-#define BOOST_HANA_FWD_CORE_TAG_OF_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-core
- //! %Metafunction returning the tag associated to `T`.
- //!
- //! There are several ways to specify the tag of a C++ type. If it's a
- //! user-defined type, one can define a nested `hana_tag` alias:
- //! @code
- //! struct MyUserDefinedType {
- //! using hana_tag = MyTag;
- //! };
- //! @endcode
- //!
- //! Sometimes, however, the C++ type can't be modified (if it's in a
- //! foreign library) or simply can't have nested types (if it's not a
- //! struct or class). In those cases, using a nested alias is impossible
- //! and so ad-hoc customization is also supported by specializing
- //! `tag_of` in the `boost::hana` namespace:
- //! @code
- //! struct i_cant_modify_this;
- //!
- //! namespace boost { namespace hana {
- //! template <>
- //! struct tag_of<i_cant_modify_this> {
- //! using type = MyTag;
- //! };
- //! }}
- //! @endcode
- //!
- //! `tag_of` can also be specialized for all C++ types satisfying some
- //! boolean condition using `when`. `when` accepts a single compile-time
- //! boolean and enables the specialization of `tag_of` if and only if
- //! that boolean is `true`. This is similar to the well known C++ idiom
- //! of using a dummy template parameter with `std::enable_if` and relying
- //! on SFINAE. For example, we could specify the tag of all
- //! `fusion::vector`s by doing:
- //! @code
- //! struct BoostFusionVector;
- //!
- //! namespace boost { namespace hana {
- //! template <typename T>
- //! struct tag_of<T, when<
- //! std::is_same<
- //! typename fusion::traits::tag_of<T>::type,
- //! fusion::traits::tag_of<fusion::vector<>>::type
- //! >::value
- //! >> {
- //! using type = BoostFusionVector;
- //! };
- //! }}
- //! @endcode
- //!
- //! Also, when it is not specialized and when the given C++ type does not
- //! have a nested `hana_tag` alias, `tag_of<T>` returns `T` itself. This
- //! makes tags a simple extension of normal C++ types. This is _super_
- //! useful, mainly for two reasons. First, this allows Hana to adopt a
- //! reasonable default behavior for some operations involving types that
- //! have no notion of tags. For example, Hana allows comparing with `equal`
- //! any two objects for which a valid `operator==` is defined, and that
- //! without any work on the user side. Second, it also means that you can
- //! ignore tags completely if you don't need their functionality; just use
- //! the normal C++ type of your objects and everything will "just work".
- //!
- //! Finally, also note that `tag_of<T>` is always equivalent to `tag_of<U>`,
- //! where `U` is the type `T` after being stripped of all references and
- //! cv-qualifiers. This makes it unnecessary to specialize `tag_of` for
- //! all reference and cv combinations, which would be a real pain. Also,
- //! `tag_of` is required to be idempotent. In other words, it must always
- //! be the case that `tag_of<tag_of<T>::%type>::%type` is equivalent to
- //! `tag_of<T>::%type`.
- //!
- //! > __Tip 1__\n
- //! > If compile-time performance is a serious concern, consider
- //! > specializing the `tag_of` metafunction in Hana's namespace.
- //! > When unspecialized, the metafunction has to use SFINAE, which
- //! > tends to incur a larger compile-time overhead. For heavily used
- //! > templated types, this can potentially make a difference.
- //!
- //! > __Tip 2__\n
- //! > Consider using `tag_of_t` alias instead of `tag_of`, which
- //! > reduces the amount of typing in dependent contexts.
- //!
- //!
- //! Example
- //! -------
- //! @include example/core/tag_of.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename T, optional when-based enabler>
- struct tag_of { unspecified };
-#else
- template <typename T, typename = void>
- struct tag_of;
-#endif
-
- //! @ingroup group-core
- //! Alias to `tag_of<T>::%type`, provided for convenience.
- //!
- //!
- //! Example
- //! -------
- //! @include example/core/tag_of_t.cpp
- template <typename T>
- using tag_of_t = typename hana::tag_of<T>::type;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CORE_TAG_OF_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/core/to.hpp b/contrib/restricted/boost/boost/hana/fwd/core/to.hpp
deleted file mode 100644
index 108484c2ce..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/core/to.hpp
+++ /dev/null
@@ -1,174 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::to` and related utilities.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CORE_TO_HPP
-#define BOOST_HANA_FWD_CORE_TO_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-core
- //! Converts an object from one data type to another.
- //!
- //! `to` is a natural extension of the `static_cast` language construct to
- //! data types. Given a destination data type `To` and an object `x`, `to`
- //! creates a new object of data type `To` from `x`. Note, however, that
- //! `to` is not required to actually create a new object, and may return a
- //! reference to the original object (for example when trying to convert
- //! an object to its own data type).
- //!
- //! As a natural extension to `static_cast`, `to` provides a default
- //! behavior. For the purpose of what follows, let `To` be the destination
- //! data type and `From` be the data type of `x`, i.e. the source data type.
- //! Then, `to` has the following default behavior:
- //! 1. If the `To` and `From` data types are the same, then the object
- //! is forwarded as-is.
- //! 2. Otherwise, if `From` is convertible to `To` using `static_cast`,
- //! `x` is converted to `From` using `static_cast`.
- //! 3. Otherwise, calling `to<From>(x)` triggers a static assertion.
- //!
- //! However, `to` is a tag-dispatched function, which means that `to_impl`
- //! may be specialized in the `boost::hana` namespace to customize its
- //! behavior for arbitrary data types. Also note that `to` is tag-dispatched
- //! using both the `To` and the `From` data types, which means that `to_impl`
- //! is called as `to_impl<To, From>::%apply(x)`. Also note that some
- //! concepts provide conversions to or from their models. For example,
- //! any `Foldable` may be converted into a `Sequence`. This is achieved
- //! by specializing `to_impl<To, From>` whenever `To` is a `Sequence` and
- //! `From` is a `Foldable`. When such conversions are provided, they are
- //! documented in the source concept, in this case `Foldable`.
- //!
- //!
- //! Hana-convertibility
- //! -------------------
- //! When an object `x` of data type `From` can be converted to a data type
- //! `To` using `to`, we say that `x` is Hana-convertible to the data type
- //! `To`. We also say that there is a Hana-conversion from `From` to `To`.
- //! This bit of terminology is useful to avoid mistaking the various kinds
- //! of conversions C++ offers.
- //!
- //!
- //! Embeddings
- //! ----------
- //! As you might have seen by now, Hana uses algebraic and category-
- //! theoretical structures all around the place to help specify concepts
- //! in a rigorous way. These structures always have operations associated
- //! to them, which is why they are useful. The notion of embedding captures
- //! the idea of injecting a smaller structure into a larger one while
- //! preserving the operations of the structure. In other words, an
- //! embedding is an injective mapping that is also structure-preserving.
- //! Exactly what it means for a structure's operations to be preserved is
- //! left to explain by the documentation of each structure. For example,
- //! when we talk of a Monoid-embedding from a Monoid `A` to a Monoid `B`,
- //! we simply mean an injective transformation that preserves the identity
- //! and the associative operation, as documented in `Monoid`.
- //!
- //! But what does this have to do with the `to` function? Quite simply,
- //! the `to` function is a mapping between two data types, which will
- //! sometimes be some kind of structure, and it is sometimes useful to
- //! know whether such a mapping is well-behaved, i.e. lossless and
- //! structure preserving. The criterion for this conversion to be well-
- //! behaved is exactly that of being an embedding. To specify that a
- //! conversion is an embedding, simply use the `embedding` type as a
- //! base class of the corresponding `to_impl` specialization. Obviously,
- //! you should make sure the conversion is really an embedding, unless
- //! you want to shoot yourself in the foot.
- //!
- //!
- //! @tparam To
- //! The data type to which `x` should be converted.
- //!
- //! @param x
- //! The object to convert to the given data type.
- //!
- //!
- //! Example
- //! -------
- //! @include example/core/convert/to.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename To>
- constexpr auto to = [](auto&& x) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename To, typename From, typename = void>
- struct to_impl;
-
- template <typename To>
- struct to_t {
- template <typename X>
- constexpr decltype(auto) operator()(X&& x) const;
- };
-
- template <typename To>
- constexpr to_t<To> to{};
-#endif
-
- //! @ingroup group-core
- //! Returns whether there is a Hana-conversion from a data type to another.
- //!
- //! Specifically, `is_convertible<From, To>` is whether calling `to<To>`
- //! with an object of data type `From` would _not_ trigger a static
- //! assertion.
- //!
- //!
- //! Example
- //! -------
- //! @include example/core/convert/is_convertible.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename From, typename To>
- struct is_convertible { see documentation };
-#else
- template <typename From, typename To, typename = void>
- struct is_convertible;
-#endif
-
- //! @ingroup group-core
- //! Marks a conversion between data types as being an embedding.
- //!
- //! To mark a conversion between two data types `To` and `From` as
- //! an embedding, simply use `embedding<true>` (or simply `embedding<>`)
- //! as a base class of the corresponding `to_impl` specialization.
- //! If a `to_impl` specialization does not inherit `embedding<true>`
- //! or `embedding<>`, then it is not considered an embedding by the
- //! `is_embedded` metafunction.
- //!
- //! > #### Tip
- //! > The boolean template parameter is useful for marking a conversion
- //! > as an embedding only when some condition is satisfied.
- //!
- //!
- //! Example
- //! -------
- //! @include example/core/convert/embedding.cpp
- template <bool = true>
- struct embedding { };
-
- //! @ingroup group-core
- //! Returns whether a data type can be embedded into another data type.
- //!
- //! Given two data types `To` and `From`, `is_embedded<From, To>` returns
- //! whether `From` is convertible to `To`, and whether that conversion is
- //! also an embedding, as signaled by the `embedding` type.
- //!
- //!
- //! Example
- //! -------
- //! @include example/core/convert/is_embedded.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename From, typename To>
- struct is_embedded { see documentation };
-#else
- template <typename From, typename To, typename = void>
- struct is_embedded;
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CORE_TO_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/core/when.hpp b/contrib/restricted/boost/boost/hana/fwd/core/when.hpp
deleted file mode 100644
index cc7659628d..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/core/when.hpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::when` and `boost::hana::when_valid`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CORE_WHEN_HPP
-#define BOOST_HANA_FWD_CORE_WHEN_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-core
- //! Enable a partial specialization only if a boolean condition is true.
- //!
- //! You might also want to take a look at `when_valid`, which provides
- //! similar functionality but enables a specialziation only when some
- //! expression is well-formed.
- //!
- //! > #### Rationale for using `when` instead of `std::enable_if`
- //! > `when` is used to control the priority of partial specializations
- //! > in a finer grained manner than what can be achieved with the usual
- //! > `typename Enable = void` and `std::enable_if` pattern. For example,
- //! > a partially specialized tag-dispatched method will have a higher
- //! > priority than an equivalent specialization that uses `when`. For
- //! > more details, see the tutorial section on [tag-dispatching][1].
- //!
- //!
- //! Example
- //! -------
- //! @include example/core/when.cpp
- //!
- //! [1]: @ref tutorial-core-tag_dispatching
- template <bool condition>
- struct when;
-
- namespace core_detail {
- template <typename ...>
- struct always_true { static constexpr bool value = true; };
- }
-
- //! @ingroup group-core
- //! Variant of `when` allowing specializations to be enabled only if an
- //! expression is well-formed.
- //!
- //! `when_valid<...>` is always equivalent to `when<true>`. However, when
- //! used inside a partial specialization, SFINAE will cause the partial
- //! specialization to be ignored when the expression is ill-formed.
- //!
- //!
- //! Example
- //! -------
- //! @include example/core/when_valid.cpp
- //!
- //!
- //! @bug
- //! Using `when_valid` seems to trigger ambiguous partial specializations
- //! on GCC.
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename ...>
- using when_valid = when<true>;
-#else
- template <typename ...Dummy>
- using when_valid = when<
- core_detail::always_true<Dummy...>::value
- >;
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CORE_WHEN_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/count.hpp b/contrib/restricted/boost/boost/hana/fwd/count.hpp
deleted file mode 100644
index 3bfdda53d6..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/count.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::count`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_COUNT_HPP
-#define BOOST_HANA_FWD_COUNT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Return the number of elements in the structure that compare equal to
- //! a given value.
- //! @ingroup group-Foldable
- //!
- //! Given a Foldable structure `xs` and a value `value`, `count` returns
- //! an unsigned integral, or a Constant thereof, representing the number
- //! of elements of `xs` that compare equal to `value`. For this method to
- //! be well-defined, all the elements of the structure must be Comparable
- //! with the given value.
- //!
- //!
- //! @param xs
- //! The structure whose elements are counted.
- //!
- //! @param value
- //! A value compared with each element in the structure. Elements
- //! that compare equal to this value are counted, others are not.
- //!
- //!
- //! Example
- //! -------
- //! @include example/count.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto count = [](auto&& xs, auto&& value) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename = void>
- struct count_impl : count_impl<T, when<true>> { };
-
- struct count_t {
- template <typename Xs, typename Value>
- constexpr auto operator()(Xs&& xs, Value&& value) const;
- };
-
- constexpr count_t count{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_COUNT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/count_if.hpp b/contrib/restricted/boost/boost/hana/fwd/count_if.hpp
deleted file mode 100644
index 8be0a42638..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/count_if.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::count_if`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_COUNT_IF_HPP
-#define BOOST_HANA_FWD_COUNT_IF_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Return the number of elements in the structure for which the
- //! `predicate` is satisfied.
- //! @ingroup group-Foldable
- //!
- //! Specifically, returns an object of an unsigned integral type, or
- //! a `Constant` holding such an object, which represents the number
- //! of elements in the structure satisfying the given `predicate`.
- //!
- //!
- //! @param xs
- //! The structure whose elements are counted.
- //!
- //! @param predicate
- //! A function called as `predicate(x)`, where `x` is an element of the
- //! structure, and returning a `Logical` representing whether `x` should
- //! be counted.
- //!
- //!
- //! Example
- //! -------
- //! @include example/count_if.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto count_if = [](auto&& xs, auto&& predicate) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename = void>
- struct count_if_impl : count_if_impl<T, when<true>> { };
-
- struct count_if_t {
- template <typename Xs, typename Pred>
- constexpr auto operator()(Xs&& xs, Pred&& pred) const;
- };
-
- constexpr count_if_t count_if{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_COUNT_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/cycle.hpp b/contrib/restricted/boost/boost/hana/fwd/cycle.hpp
deleted file mode 100644
index 268e7daf43..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/cycle.hpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::cycle`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_CYCLE_HPP
-#define BOOST_HANA_FWD_CYCLE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Combine a monadic structure with itself `n` times.
- //! @ingroup group-MonadPlus
- //!
- //! Given a monadic structure `xs` and a non-negative number `n`,
- //! `cycle` returns a new monadic structure which is the result of
- //! combining `xs` with itself `n` times using the `concat` operation.
- //! In other words,
- //! @code
- //! cycle(xs, n) == concat(xs, concat(xs, ... concat(xs, xs)))
- //! // ^^^^^ n times total
- //! @endcode
- //!
- //! Also note that since `concat` is required to be associative, we
- //! could also have written
- //! @code
- //! cycle(xs, n) == concat(concat(... concat(xs, xs), xs), xs)
- //! // ^^^^^ n times total
- //! @endcode
- //!
- //! If `n` is zero, then the identity of `concat`, `empty`, is returned.
- //! In the case of sequences, this boils down to returning a sequence
- //! containing `n` copies of itself; for other models it might differ.
- //!
- //!
- //! Signature
- //! ---------
- //! Given an `IntegralConstant` `C` and a `MonadPlus` `M`, the signature is
- //! @f$ \mathrm{cycle} : M(T) \times C \to M(T) @f$.
- //!
- //! @param xs
- //! A monadic structure to combine with itself a certain number of times.
- //!
- //! @param n
- //! A non-negative `IntegralConstant` representing the number of times to
- //! combine the monadic structure with itself. If `n` is zero, `cycle`
- //! returns `empty`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/cycle.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto cycle = [](auto&& xs, auto const& n) {
- return tag-dispatched;
- };
-#else
- template <typename M, typename = void>
- struct cycle_impl : cycle_impl<M, when<true>> { };
-
- struct cycle_t {
- template <typename Xs, typename N>
- constexpr auto operator()(Xs&& xs, N const& n) const;
- };
-
- constexpr cycle_t cycle{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_CYCLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/define_struct.hpp b/contrib/restricted/boost/boost/hana/fwd/define_struct.hpp
deleted file mode 100644
index 831f6872a4..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/define_struct.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*!
-@file
-Documents the `BOOST_HANA_DEFINE_STRUCT` macro.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_DEFINE_STRUCT_HPP
-#define BOOST_HANA_FWD_DEFINE_STRUCT_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- // Note:
- // The weird definition as a variable seems to exploit a glitch in Doxygen
- // which makes the macro appear in the related objects of Struct (as we
- // want it to).
-
- //! Defines members of a structure, while at the same time
- //! modeling `Struct`.
- //! @ingroup group-Struct
- //!
- //! Using this macro in the body of a user-defined type will define the
- //! given members inside that type, and will also provide a model of the
- //! `Struct` concept for that user-defined type. This macro is often the
- //! easiest way to define a model of the `Struct` concept.
- //!
- //! @note
- //! This macro only works if the tag of the user-defined type `T` is `T`
- //! itself. This is the case unless you specifically asked for something
- //! different; see `tag_of`'s documentation.
- //!
- //!
- //! Example
- //! -------
- //! @include example/define_struct.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- auto BOOST_HANA_DEFINE_STRUCT(...) = ;
- #define BOOST_HANA_DEFINE_STRUCT(Name, ...) see documentation
-#else
- // defined in <boost/hana/define_struct.hpp>
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_DEFINE_STRUCT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/difference.hpp b/contrib/restricted/boost/boost/hana/fwd/difference.hpp
deleted file mode 100644
index d96142b5b9..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/difference.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::difference`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_DIFFERENCE_HPP
-#define BOOST_HANA_FWD_DIFFERENCE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- // Note: This function is documented per datatype/concept only.
- //! @cond
- template <typename S, typename = void>
- struct difference_impl : difference_impl<S, when<true>> { };
- //! @endcond
-
- struct difference_t {
- template <typename Xs, typename Ys>
- constexpr auto operator()(Xs&&, Ys&&) const;
- };
-
- constexpr difference_t difference{};
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_DIFFERENCE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/div.hpp b/contrib/restricted/boost/boost/hana/fwd/div.hpp
deleted file mode 100644
index 6f35b4abe3..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/div.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::div`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_DIV_HPP
-#define BOOST_HANA_FWD_DIV_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Generalized integer division.
- //! @ingroup group-EuclideanRing
- //!
- //!
- //! Cross-type version of the method
- //! --------------------------------
- //! The `div` method is "overloaded" to handle distinct data types
- //! with certain properties. Specifically, `div` is defined for
- //! _distinct_ data types `A` and `B` such that
- //! 1. `A` and `B` share a common data type `C`, as determined by the
- //! `common` metafunction
- //! 2. `A`, `B` and `C` are all `EuclideanRing`s when taken individually
- //! 3. `to<C> : A -> B` and `to<C> : B -> C` are `Ring`-embeddings, as
- //! determined by the `is_embedding` metafunction.
- //!
- //! In that case, the `div` method is defined as
- //! @code
- //! div(x, y) = div(to<C>(x), to<C>(y))
- //! @endcode
- //!
- //!
- //! Example
- //! -------
- //! @include example/div.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto div = [](auto&& x, auto&& y) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename U, typename = void>
- struct div_impl : div_impl<T, U, when<true>> { };
-
- struct div_t {
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) const;
- };
-
- constexpr div_t div{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_DIV_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/drop_back.hpp b/contrib/restricted/boost/boost/hana/fwd/drop_back.hpp
deleted file mode 100644
index 440e925322..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/drop_back.hpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::drop_back`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_DROP_BACK_HPP
-#define BOOST_HANA_FWD_DROP_BACK_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Drop the last `n` elements of a finite sequence, and return the rest.
- //! @ingroup group-Sequence
- //!
- //! Given a finite `Sequence` `xs` with a linearization of `[x1, ..., xm]`
- //! and a non-negative `IntegralConstant` `n`, `drop_back(xs, n)` is a
- //! sequence with the same tag as `xs` whose linearization is
- //! `[x1, ..., xm-n]`. If `n` is not given, it defaults to an
- //! `IntegralConstant` with a value equal to `1`.
- //!
- //! In case `length(xs) <= n`, `drop_back` will simply drop the whole
- //! sequence without failing, thus returning an empty sequence.
- //!
- //!
- //! @param xs
- //! The sequence from which elements are dropped.
- //!
- //! @param n
- //! A non-negative `IntegralConstant` representing the number of elements
- //! to be dropped from the end of the sequence. If `n` is not given, it
- //! defaults to an `IntegralConstant` with a value equal to `1`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/drop_back.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto drop_back = [](auto&& xs[, auto const& n]) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct drop_back_impl : drop_back_impl<S, when<true>> { };
-
- struct drop_back_t {
- template <typename Xs, typename N>
- constexpr auto operator()(Xs&& xs, N const& n) const;
-
- template <typename Xs>
- constexpr auto operator()(Xs&& xs) const;
- };
-
- constexpr drop_back_t drop_back{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_DROP_BACK_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/drop_front.hpp b/contrib/restricted/boost/boost/hana/fwd/drop_front.hpp
deleted file mode 100644
index 298499180c..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/drop_front.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::drop_front`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_DROP_FRONT_HPP
-#define BOOST_HANA_FWD_DROP_FRONT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Drop the first `n` elements of an iterable, and return the rest.
- //! @ingroup group-Iterable
- //!
- //! Given an `Iterable` `xs` with a linearization of `[x1, x2, ...]` and
- //! a non-negative `IntegralConstant` `n`, `drop_front(xs, n)` is an
- //! iterable with the same tag as `xs` whose linearization is
- //! `[xn+1, xn+2, ...]`. In particular, note that this function does not
- //! mutate the original iterable in any way. If `n` is not given, it
- //! defaults to an `IntegralConstant` with a value equal to `1`.
- //!
- //! In case `length(xs) <= n`, `drop_front` will simply drop the whole
- //! iterable without failing, thus returning an empty iterable. This is
- //! different from `drop_front_exactly`, which expects `n <= length(xs)`
- //! but can be better optimized because of this additional guarantee.
- //!
- //!
- //! @param xs
- //! The iterable from which elements are dropped.
- //!
- //! @param n
- //! A non-negative `IntegralConstant` representing the number of elements
- //! to be dropped from the iterable. If `n` is not given, it defaults to
- //! an `IntegralConstant` with a value equal to `1`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/drop_front.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto drop_front = [](auto&& xs[, auto const& n]) {
- return tag-dispatched;
- };
-#else
- template <typename It, typename = void>
- struct drop_front_impl : drop_front_impl<It, when<true>> { };
-
- struct drop_front_t {
- template <typename Xs, typename N>
- constexpr auto operator()(Xs&& xs, N const& n) const;
-
- template <typename Xs>
- constexpr auto operator()(Xs&& xs) const;
- };
-
- constexpr drop_front_t drop_front{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_DROP_FRONT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/drop_front_exactly.hpp b/contrib/restricted/boost/boost/hana/fwd/drop_front_exactly.hpp
deleted file mode 100644
index 17a55e6d66..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/drop_front_exactly.hpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::drop_front_exactly`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_DROP_FRONT_EXACTLY_HPP
-#define BOOST_HANA_FWD_DROP_FRONT_EXACTLY_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Drop the first `n` elements of an iterable, and return the rest.
- //! @ingroup group-Iterable
- //!
- //! Given an `Iterable` `xs` with a linearization of `[x1, x2, ...]` and
- //! a non-negative `IntegralConstant` `n`, `drop_front_exactly(xs, n)` is
- //! an iterable with the same tag as `xs` whose linearization is
- //! `[xn+1, xn+2, ...]`. In particular, note that this function does not
- //! mutate the original iterable in any way. If `n` is not given, it
- //! defaults to an `IntegralConstant` with a value equal to `1`.
- //!
- //! It is an error to use `drop_front_exactly` with `n > length(xs)`. This
- //! additional guarantee allows `drop_front_exactly` to be better optimized
- //! than the `drop_front` function, which allows `n > length(xs)`.
- //!
- //!
- //! @param xs
- //! The iterable from which elements are dropped.
- //!
- //! @param n
- //! A non-negative `IntegralConstant` representing the number of elements
- //! to be dropped from the iterable. In addition to being non-negative,
- //! `n` must be less than or equal to the number of elements in `xs`.
- //! If `n` is not given, it defaults to an `IntegralConstant` with a value
- //! equal to `1`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/drop_front_exactly.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto drop_front_exactly = [](auto&& xs[, auto const& n]) {
- return tag-dispatched;
- };
-#else
- template <typename It, typename = void>
- struct drop_front_exactly_impl : drop_front_exactly_impl<It, when<true>> { };
-
- struct drop_front_exactly_t {
- template <typename Xs, typename N>
- constexpr auto operator()(Xs&& xs, N const& n) const;
-
- template <typename Xs>
- constexpr auto operator()(Xs&& xs) const;
- };
-
- constexpr drop_front_exactly_t drop_front_exactly{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_DROP_FRONT_EXACTLY_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/drop_while.hpp b/contrib/restricted/boost/boost/hana/fwd/drop_while.hpp
deleted file mode 100644
index 2d5557e5a7..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/drop_while.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::drop_while`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_DROP_WHILE_HPP
-#define BOOST_HANA_FWD_DROP_WHILE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Drop elements from an iterable up to, but excluding, the first
- //! element for which the `predicate` is not satisfied.
- //! @ingroup group-Iterable
- //!
- //! Specifically, `drop_while` returns an iterable containing all the
- //! elements of the original iterable except for those in the range
- //! delimited by [`head`, `e`), where `head` is the first element and
- //! `e` is the first element for which the `predicate` is not satisfied.
- //! If the iterable is not finite, the `predicate` has to return a false-
- //! valued `Logical` at a finite index for this method to return.
- //!
- //!
- //! @param iterable
- //! The iterable from which elements are dropped.
- //!
- //! @param predicate
- //! A function called as `predicate(x)`, where `x` is an element of the
- //! structure, and returning a `Logical` representing whether `x` should
- //! be dropped from the structure. In the current version of the library,
- //! `predicate` should return a compile-time `Logical`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/drop_while.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto drop_while = [](auto&& iterable, auto&& predicate) {
- return tag-dispatched;
- };
-#else
- template <typename It, typename = void>
- struct drop_while_impl : drop_while_impl<It, when<true>> { };
-
- struct drop_while_t {
- template <typename Xs, typename Pred>
- constexpr auto operator()(Xs&& xs, Pred&& pred) const;
- };
-
- constexpr drop_while_t drop_while{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWDDROP_WHILE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/duplicate.hpp b/contrib/restricted/boost/boost/hana/fwd/duplicate.hpp
deleted file mode 100644
index bac61e0bd9..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/duplicate.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::duplicate`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_DUPLICATE_HPP
-#define BOOST_HANA_FWD_DUPLICATE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Add an extra layer of comonadic context to a comonadic value.
- //! @ingroup group-Comonad
- //!
- //! Given a value already in a comonadic context, `duplicate` wraps this
- //! value with an additional layer of comonadic context. This can be seen
- //! as the dual operation to `flatten` from the Monad concept.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a Comonad `W`, the signature is
- //! \f$
- //! \mathtt{duplicate} : W(T) \to W(W(T))
- //! \f$
- //!
- //! @param w
- //! The value to wrap in an additional level of comonadic context.
- //!
- //!
- //! Example
- //! -------
- //! @include example/duplicate.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto duplicate = [](auto&& w) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename W, typename = void>
- struct duplicate_impl : duplicate_impl<W, when<true>> { };
-
- struct duplicate_t {
- template <typename W_>
- constexpr decltype(auto) operator()(W_&& w) const;
- };
-
- constexpr duplicate_t duplicate{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_DUPLICATE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/empty.hpp b/contrib/restricted/boost/boost/hana/fwd/empty.hpp
deleted file mode 100644
index ed3cc38cc7..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/empty.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::empty`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_EMPTY_HPP
-#define BOOST_HANA_FWD_EMPTY_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Identity of the monadic combination `concat`.
- //! @ingroup group-MonadPlus
- //!
- //! Signature
- //! ---------
- //! Given a MonadPlus `M`, the signature is
- //! @f$ \mathtt{empty}_M : \emptyset \to M(T) @f$.
- //!
- //! @tparam M
- //! The tag of the monadic structure to return. This must be
- //! a model of the MonadPlus concept.
- //!
- //!
- //! Example
- //! -------
- //! @include example/empty.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename M>
- constexpr auto empty = []() {
- return tag-dispatched;
- };
-#else
- template <typename M, typename = void>
- struct empty_impl : empty_impl<M, when<true>> { };
-
- template <typename M>
- struct empty_t;
-
- template <typename M>
- constexpr empty_t<M> empty{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_EMPTY_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/equal.hpp b/contrib/restricted/boost/boost/hana/fwd/equal.hpp
deleted file mode 100644
index e9f8c4bd6e..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/equal.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::equal`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_EQUAL_HPP
-#define BOOST_HANA_FWD_EQUAL_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/nested_to_fwd.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns a `Logical` representing whether `x` is equal to `y`.
- //! @ingroup group-Comparable
- //!
- //! The `equal` function can be called in two different ways. First, it
- //! can be called like a normal function:
- //! @code
- //! equal(x, y)
- //! @endcode
- //!
- //! However, it may also be partially applied to an argument by using
- //! `equal.to`:
- //! @code
- //! equal.to(x)(y) == equal(x, y)
- //! @endcode
- //!
- //! In other words, `equal.to(x)` is a function object that is equivalent
- //! to `partial(equal, x)`. This is provided to enhance the readability of
- //! some constructs, especially when using higher order algorithms.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a Logical `Bool` and two Comparables `A` and `B` that
- //! share a common embedding, the signature is
- //! @f$ \mathtt{equal} : A \times B \to Bool @f$.
- //!
- //! @param x, y
- //! Two objects to compare for equality.
- //!
- //!
- //! Example
- //! -------
- //! @include example/equal.cpp
- //!
- //!
- //! > #### Rationale for the arity of `equal`
- //! > It is a valid question whether `equal` should accept more than 2
- //! > arguments and have semantics matching those of Python's `==`. This
- //! > is not supported right now for the following reasons:
- //! > - It was implemented in the MPL11, but it was not shown to be useful
- //! > so far.
- //! > - It does not make sense for `not_equal` to have an arity of more
- //! > than 2, only `equal` could maybe have those semantics, which would
- //! > break symmetry.
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto equal = [](auto&& x, auto&& y) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename U, typename = void>
- struct equal_impl : equal_impl<T, U, when<true>> { };
-
- struct equal_t : detail::nested_to<equal_t> {
- template <typename X, typename Y>
- constexpr auto operator()(X&& x, Y&& y) const;
- };
-
- constexpr equal_t equal{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_EQUAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/erase_key.hpp b/contrib/restricted/boost/boost/hana/fwd/erase_key.hpp
deleted file mode 100644
index 49471d61cf..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/erase_key.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::erase_key`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ERASE_KEY_HPP
-#define BOOST_HANA_FWD_ERASE_KEY_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- // Note: This function is documented per datatype/concept only.
- //! @cond
- template <typename T, typename = void>
- struct erase_key_impl : erase_key_impl<T, when<true>> { };
- //! @endcond
-
- struct erase_key_t {
- template <typename Set, typename ...Args>
- constexpr decltype(auto) operator()(Set&& set, Args&& ...args) const;
- };
-
- constexpr erase_key_t erase_key{};
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ERASE_KEY_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/eval.hpp b/contrib/restricted/boost/boost/hana/fwd/eval.hpp
deleted file mode 100644
index d068f992f5..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/eval.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::eval`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_EVAL_HPP
-#define BOOST_HANA_FWD_EVAL_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Evaluate a lazy value and return it.
- //! @relates hana::lazy
- //!
- //! Given a lazy expression `expr`, `eval` evaluates `expr` and returns
- //! the result as a normal value. However, for convenience, `eval` can
- //! also be used with nullary and unary function objects. Specifically,
- //! if `expr` is not a `hana::lazy`, it is called with no arguments at
- //! all and the result of that call (`expr()`) is returned. Otherwise,
- //! if `expr()` is ill-formed, then `expr(hana::id)` is returned instead.
- //! If that expression is ill-formed, then a compile-time error is
- //! triggered.
- //!
- //! The reason for allowing nullary callables in `eval` is because this
- //! allows using nullary lambdas as lazy branches to `eval_if`, which
- //! is convenient. The reason for allowing unary callables and calling
- //! them with `hana::id` is because this allows deferring the
- //! compile-time evaluation of selected expressions inside the callable.
- //! How this can be achieved is documented by `hana::eval_if`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/eval.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto eval = [](auto&& see_documentation) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename = void>
- struct eval_impl : eval_impl<T, when<true>> { };
-
- struct eval_t {
- template <typename Expr>
- constexpr decltype(auto) operator()(Expr&& expr) const;
- };
-
- constexpr eval_t eval{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_EVAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/eval_if.hpp b/contrib/restricted/boost/boost/hana/fwd/eval_if.hpp
deleted file mode 100644
index 2bc8736b12..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/eval_if.hpp
+++ /dev/null
@@ -1,155 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::eval_if`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_EVAL_IF_HPP
-#define BOOST_HANA_FWD_EVAL_IF_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Conditionally execute one of two branches based on a condition.
- //! @ingroup group-Logical
- //!
- //! Given a condition and two branches in the form of lambdas or
- //! `hana::lazy`s, `eval_if` will evaluate the branch selected by the
- //! condition with `eval` and return the result. The exact requirements
- //! for what the branches may be are the same requirements as those for
- //! the `eval` function.
- //!
- //!
- //! Deferring compile-time evaluation inside `eval_if`
- //! --------------------------------------------------
- //! By passing a unary callable to `eval_if`, it is possible to defer
- //! the compile-time evaluation of selected expressions inside the
- //! lambda. This is useful when instantiating a branch would trigger
- //! a compile-time error; we only want the branch to be instantiated
- //! when that branch is selected. Here's how it can be achieved.
- //!
- //! For simplicity, we'll use a unary lambda as our unary callable.
- //! Our lambda must accept a parameter (usually called `_`), which
- //! can be used to defer the compile-time evaluation of expressions
- //! as required. For example,
- //! @code
- //! template <typename N>
- //! auto fact(N n) {
- //! return hana::eval_if(n == hana::int_c<0>,
- //! [] { return hana::int_c<1>; },
- //! [=](auto _) { return n * fact(_(n) - hana::int_c<1>); }
- //! );
- //! }
- //! @endcode
- //!
- //! What happens here is that `eval_if` will call `eval` on the selected
- //! branch. In turn, `eval` will call the selected branch either with
- //! nothing -- for the _then_ branch -- or with `hana::id` -- for the
- //! _else_ branch. Hence, `_(x)` is always the same as `x`, but the
- //! compiler can't tell until the lambda has been called! Hence, the
- //! compiler has to wait before it instantiates the body of the lambda
- //! and no infinite recursion happens. However, this trick to delay the
- //! instantiation of the lambda's body can only be used when the condition
- //! is known at compile-time, because otherwise both branches have to be
- //! instantiated inside the `eval_if` anyway.
- //!
- //! There are several caveats to note with this approach to lazy branching.
- //! First, because we're using lambdas, it means that the function's
- //! result can't be used in a constant expression. This is a limitation
- //! of the current language.
- //!
- //! The second caveat is that compilers currently have several bugs
- //! regarding deeply nested lambdas with captures. So you always risk
- //! crashing the compiler, but this is a question of time before it is
- //! not a problem anymore.
- //!
- //! Finally, it means that conditionals can't be written directly inside
- //! unevaluated contexts. The reason is that a lambda can't appear in an
- //! unevaluated context, for example in `decltype`. One way to workaround
- //! this is to completely lift your type computations into variable
- //! templates instead. For example, instead of writing
- //! @code
- //! template <typename T>
- //! struct pointerize : decltype(
- //! hana::eval_if(hana::traits::is_pointer(hana::type_c<T>),
- //! [] { return hana::type_c<T>; },
- //! [](auto _) { return _(hana::traits::add_pointer)(hana::type_c<T>); }
- //! ))
- //! { };
- //! @endcode
- //!
- //! you could instead write
- //!
- //! @code
- //! template <typename T>
- //! auto pointerize_impl(T t) {
- //! return hana::eval_if(hana::traits::is_pointer(t),
- //! [] { return hana::type_c<T>; },
- //! [](auto _) { return _(hana::traits::add_pointer)(hana::type_c<T>); }
- //! );
- //! }
- //!
- //! template <typename T>
- //! using pointerize = decltype(pointerize_impl(hana::type_c<T>));
- //! @endcode
- //!
- //! > __Note__: This example would actually be implemented more easily
- //! > with partial specializations, but my bag of good examples is empty
- //! > at the time of writing this.
- //!
- //! Now, this hoop-jumping only has to be done in one place, because
- //! you should use normal function notation everywhere else in your
- //! metaprogram to perform type computations. So the syntactic
- //! cost is amortized over the whole program.
- //!
- //! Another way to work around this limitation of the language would be
- //! to use `hana::lazy` for the branches. However, this is only suitable
- //! when the branches are not too complicated. With `hana::lazy`, you
- //! could write the previous example as
- //! @code
- //! template <typename T>
- //! struct pointerize : decltype(
- //! hana::eval_if(hana::traits::is_pointer(hana::type_c<T>),
- //! hana::make_lazy(hana::type_c<T>),
- //! hana::make_lazy(hana::traits::add_pointer)(hana::type_c<T>)
- //! ))
- //! { };
- //! @endcode
- //!
- //!
- //! @param cond
- //! The condition determining which of the two branches is selected.
- //!
- //! @param then
- //! An expression called as `eval(then)` if `cond` is true-valued.
- //!
- //! @param else_
- //! A function called as `eval(else_)` if `cond` is false-valued.
- //!
- //!
- //! Example
- //! -------
- //! @include example/eval_if.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto eval_if = [](auto&& cond, auto&& then, auto&& else_) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename L, typename = void>
- struct eval_if_impl : eval_if_impl<L, when<true>> { };
-
- struct eval_if_t {
- template <typename Cond, typename Then, typename Else>
- constexpr decltype(auto) operator()(Cond&& cond, Then&& then, Else&& else_) const;
- };
-
- constexpr eval_if_t eval_if{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_EVAL_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/extend.hpp b/contrib/restricted/boost/boost/hana/fwd/extend.hpp
deleted file mode 100644
index 65b68d8011..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/extend.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::extend`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_EXTEND_HPP
-#define BOOST_HANA_FWD_EXTEND_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Comonadic application of a function to a comonadic value.
- //! @ingroup group-Comonad
- //!
- //! Given a comonadic value and a function accepting a comonadic input,
- //! `extend` returns the result of applying the function to that input
- //! inside the comonadic context.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a Comonad `W` and a function of type \f$ W(T) \to U \f$, the
- //! signature is
- //! \f$
- //! \mathtt{extend} : W(T) \times (W(T) \to U) \to W(U)
- //! \f$
- //!
- //! @param w
- //! A comonadic value to call the function with.
- //!
- //! @param f
- //! A function of signature \f$ W(T) \to U \f$ to be applied to its
- //! comonadic argument inside the comonadic context.
- //!
- //!
- //! Example
- //! -------
- //! @include example/extend.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto extend = [](auto&& w, auto&& f) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename W, typename = void>
- struct extend_impl : extend_impl<W, when<true>> { };
-
- struct extend_t {
- template <typename W_, typename F>
- constexpr decltype(auto) operator()(W_&& w, F&& f) const;
- };
-
- constexpr extend_t extend{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_EXTEND_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/extract.hpp b/contrib/restricted/boost/boost/hana/fwd/extract.hpp
deleted file mode 100644
index 1e71727143..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/extract.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::extract`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_EXTRACT_HPP
-#define BOOST_HANA_FWD_EXTRACT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Extract a value in a given comonadic context.
- //! @ingroup group-Comonad
- //!
- //! Given a value inside a comonadic context, extract it from that
- //! context, performing whatever effects are mandated by that context.
- //! This can be seen as the dual operation to the `lift` method of the
- //! Applicative concept.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a Comonad `W`, the signature is
- //! \f$
- //! \mathtt{extract} : W(T) \to T
- //! \f$
- //!
- //! @param w
- //! The value to be extracted inside a comonadic context.
- //!
- //!
- //! Example
- //! -------
- //! @include example/extract.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto extract = [](auto&& w) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename W, typename = void>
- struct extract_impl : extract_impl<W, when<true>> { };
-
- struct extract_t {
- template <typename W_>
- constexpr decltype(auto) operator()(W_&& w) const;
- };
-
- constexpr extract_t extract{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_EXTRACT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/fill.hpp b/contrib/restricted/boost/boost/hana/fwd/fill.hpp
deleted file mode 100644
index 6946c6ffd8..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/fill.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::fill`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_FILL_HPP
-#define BOOST_HANA_FWD_FILL_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Replace all the elements of a structure with a fixed value.
- //! @ingroup group-Functor
- //!
- //!
- //! Signature
- //! ---------
- //! Given `F` a Functor, the signature is
- //! \f$
- //! \mathtt{fill} : F(T) \times U \to F(U)
- //! \f$
- //!
- //! @param xs
- //! The structure to fill with a `value`.
- //!
- //! @param value
- //! A value by which every element `x` of the structure is replaced,
- //! unconditionally.
- //!
- //!
- //! Example
- //! -------
- //! @include example/fill.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto fill = [](auto&& xs, auto&& value) {
- return tag-dispatched;
- };
-#else
- template <typename Xs, typename = void>
- struct fill_impl : fill_impl<Xs, when<true>> { };
-
- struct fill_t {
- template <typename Xs, typename Value>
- constexpr auto operator()(Xs&& xs, Value&& value) const;
- };
-
- constexpr fill_t fill{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_FILL_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/filter.hpp b/contrib/restricted/boost/boost/hana/fwd/filter.hpp
deleted file mode 100644
index f31b30df52..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/filter.hpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::filter`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_FILTER_HPP
-#define BOOST_HANA_FWD_FILTER_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Filter a monadic structure using a custom predicate.
- //! @ingroup group-MonadPlus
- //!
- //! Given a monadic structure and a predicate, `filter` returns a new
- //! monadic structure containing only those elements that satisfy the
- //! predicate. This is a generalization of the usual `filter` function
- //! for sequences; it works for any MonadPlus. Intuitively, `filter` is
- //! somewhat equivalent to:
- //! @code
- //! filter(xs, pred) == flatten(transform(xs, [](auto x) {
- //! return pred(x) ? lift<Xs>(x) : empty<Xs>();
- //! })
- //! @endcode
- //! In other words, we basically turn a monadic structure containing
- //! `[x1, ..., xn]` into a monadic structure containing
- //! @code
- //! [
- //! pred(x1) ? [x1] : [],
- //! pred(x2) ? [x2] : [],
- //! ...
- //! pred(xn) ? [xn] : []
- //! ]
- //! @endcode
- //! and we then `flatten` that.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a `MonadPlus` `M` and an `IntegralConstant` `Bool` holding a
- //! value of type `bool`, the signature is
- //! @f$ \mathtt{filter} : M(T) \times (T \to \mathtt{Bool}) \to M(T) @f$.
- //!
- //! @param xs
- //! The monadic structure to filter.
- //!
- //! @param pred
- //! A function called as `pred(x)` for each element `x` in the monadic
- //! structure and returning whether that element should be __kept__ in
- //! the resulting structure. In the current version of the library, the
- //! predicate has to return an `IntegralConstant` holding a value
- //! convertible to a `bool`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/filter.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto filter = [](auto&& xs, auto&& pred) {
- return tag-dispatched;
- };
-#else
- template <typename M, typename = void>
- struct filter_impl : filter_impl<M, when<true>> { };
-
- struct filter_t {
- template <typename Xs, typename Pred>
- constexpr auto operator()(Xs&& xs, Pred&& pred) const;
- };
-
- constexpr filter_t filter{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_FILTER_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/find.hpp b/contrib/restricted/boost/boost/hana/fwd/find.hpp
deleted file mode 100644
index cc88d6f239..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/find.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::find`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_FIND_HPP
-#define BOOST_HANA_FWD_FIND_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Finds the value associated to the given key in a structure.
- //! @ingroup group-Searchable
- //!
- //! Given a `key` and a `Searchable` structure, `find` returns the `just`
- //! the first value whose key is equal to the given `key`, or `nothing` if
- //! there is no such key. Comparison is done with `equal`. `find` satisfies
- //! the following:
- //! @code
- //! find(xs, key) == find_if(xs, equal.to(key))
- //! @endcode
- //!
- //!
- //! @param xs
- //! The structure to be searched.
- //!
- //! @param key
- //! A key to be searched for in the structure. The key has to be
- //! `Comparable` with the other keys of the structure. In the current
- //! version of the library, the comparison of `key` with any other key
- //! of the structure must return a compile-time `Logical`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/find.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto find = [](auto&& xs, auto const& key) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct find_impl : find_impl<S, when<true>> { };
-
- struct find_t {
- template <typename Xs, typename Key>
- constexpr auto operator()(Xs&& xs, Key const& key) const;
- };
-
- constexpr find_t find{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_FIND_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/find_if.hpp b/contrib/restricted/boost/boost/hana/fwd/find_if.hpp
deleted file mode 100644
index d6fca44600..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/find_if.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::find_if`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_FIND_IF_HPP
-#define BOOST_HANA_FWD_FIND_IF_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Finds the value associated to the first key satisfying a predicate.
- //! @ingroup group-Searchable
- //!
- //! Given a `Searchable` structure `xs` and a predicate `pred`,
- //! `find_if(xs, pred)` returns `just` the first element whose key
- //! satisfies the predicate, or `nothing` if there is no such element.
- //!
- //!
- //! @param xs
- //! The structure to be searched.
- //!
- //! @param predicate
- //! A function called as `predicate(k)`, where `k` is a key of the
- //! structure, and returning whether `k` is the key of the element
- //! being searched for. In the current version of the library, the
- //! predicate has to return an `IntegralConstant` holding a value
- //! that can be converted to `bool`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/find_if.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto find_if = [](auto&& xs, auto&& predicate) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct find_if_impl : find_if_impl<S, when<true>> { };
-
- struct find_if_t {
- template <typename Xs, typename Pred>
- constexpr auto operator()(Xs&& xs, Pred&& pred) const;
- };
-
- constexpr find_if_t find_if{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_FIND_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/first.hpp b/contrib/restricted/boost/boost/hana/fwd/first.hpp
deleted file mode 100644
index 0a62a8344f..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/first.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::first`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_FIRST_HPP
-#define BOOST_HANA_FWD_FIRST_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns the first element of a pair.
- //! @ingroup group-Product
- //!
- //! Note that if the `Product` actually stores the elements it contains,
- //! `hana::first` is required to return a lvalue reference, a lvalue
- //! reference to const or a rvalue reference to the first element, where
- //! the type of reference must match that of the pair passed to `first`.
- //! If the `Product` does not store the elements it contains (i.e. it
- //! generates them on demand), this requirement is dropped.
- //!
- //!
- //! Example
- //! -------
- //! @include example/first.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto first = [](auto&& product) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename P, typename = void>
- struct first_impl : first_impl<P, when<true>> { };
-
- struct first_t {
- template <typename Pair>
- constexpr decltype(auto) operator()(Pair&& pair) const;
- };
-
- constexpr first_t first{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_FIRST_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/flatten.hpp b/contrib/restricted/boost/boost/hana/fwd/flatten.hpp
deleted file mode 100644
index f0e319a131..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/flatten.hpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::flatten`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_FLATTEN_HPP
-#define BOOST_HANA_FWD_FLATTEN_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Collapse two levels of monadic structure into a single level.
- //! @ingroup group-Monad
- //!
- //! Given a monadic value wrapped into two levels of monad, `flatten`
- //! removes one such level. An implementation of `flatten` must satisfy
- //! @code
- //! flatten(xs) == chain(xs, id)
- //! @endcode
- //!
- //! For `Sequence`s, this simply takes a `Sequence` of `Sequence`s, and
- //! returns a (non-recursively) flattened `Sequence`.
- //!
- //!
- //! Signature
- //! ---------
- //! For a `Monad` `M`, the signature of `flatten` is
- //! @f$
- //! \mathtt{flatten} : M(M(T)) \to M(T)
- //! @f$
- //!
- //! @param xs
- //! A value with two levels of monadic structure, which should be
- //! collapsed into a single level of structure.
- //!
- //!
- //! Example
- //! -------
- //! @include example/flatten.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto flatten = [](auto&& xs) {
- return tag-dispatched;
- };
-#else
- template <typename M, typename = void>
- struct flatten_impl : flatten_impl<M, when<true>> { };
-
- struct flatten_t {
- template <typename Xs>
- constexpr auto operator()(Xs&& xs) const;
- };
-
- constexpr flatten_t flatten{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_FLATTEN_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/fold.hpp b/contrib/restricted/boost/boost/hana/fwd/fold.hpp
deleted file mode 100644
index e060ab1e1e..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/fold.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::fold`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_FOLD_HPP
-#define BOOST_HANA_FWD_FOLD_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/fwd/fold_left.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Equivalent to `fold_left`; provided for convenience.
- //! @ingroup group-Foldable
- //!
- //! `fold` is equivalent to `fold_left`. However, it is not tag-dispatched
- //! on its own because it is just an alias to `fold_left`. Also note that
- //! `fold` can be called with or without an initial state, just like
- //! `fold_left`:
- //!
- //! @code
- //! fold(xs, state, f) == fold_left(xs, state, f)
- //! fold(xs, f) == fold_left(xs, f)
- //! @endcode
- //!
- //!
- //! Example
- //! -------
- //! @include example/fold.cpp
- constexpr auto fold = fold_left;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_FOLD_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/fold_left.hpp b/contrib/restricted/boost/boost/hana/fwd/fold_left.hpp
deleted file mode 100644
index 22dd22d32f..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/fold_left.hpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::fold_left`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_FOLD_LEFT_HPP
-#define BOOST_HANA_FWD_FOLD_LEFT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Left-fold of a structure using a binary operation and an optional
- //! initial reduction state.
- //! @ingroup group-Foldable
- //!
- //! `fold_left` is a left-associative fold using a binary operation.
- //! Given a structure containing `x1, ..., xn`, a function `f` and
- //! an optional initial state, `fold_left` applies `f` as follows
- //! @code
- //! f(... f(f(f(x1, x2), x3), x4) ..., xn) // without state
- //! f(... f(f(f(f(state, x1), x2), x3), x4) ..., xn) // with state
- //! @endcode
- //!
- //! When the structure is empty, two things may arise. If an initial
- //! state was provided, it is returned as-is. Otherwise, if the no-state
- //! version of the function was used, an error is triggered. When the
- //! stucture contains a single element and the no-state version of the
- //! function was used, that single element is returned as is.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a `Foldable` `F` and an optional initial state of tag `S`,
- //! the signatures for `fold_left` are
- //! \f[
- //! \mathtt{fold\_left} : F(T) \times S \times (S \times T \to S) \to S
- //! \f]
- //!
- //! for the variant with an initial state, and
- //! \f[
- //! \mathtt{fold\_left} : F(T) \times (T \times T \to T) \to T
- //! \f]
- //!
- //! for the variant without an initial state.
- //!
- //! @param xs
- //! The structure to fold.
- //!
- //! @param state
- //! The initial value used for folding.
- //!
- //! @param f
- //! A binary function called as `f(state, x)`, where `state` is the
- //! result accumulated so far and `x` is an element in the structure.
- //! For left folds without an initial state, the function is called as
- //! `f(x1, x2)`, where `x1` and `x2` are elements of the structure.
- //!
- //!
- //! Example
- //! -------
- //! @include example/fold_left.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto fold_left = [](auto&& xs[, auto&& state], auto&& f) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename = void>
- struct fold_left_impl : fold_left_impl<T, when<true>> { };
-
- struct fold_left_t {
- template <typename Xs, typename State, typename F>
- constexpr decltype(auto) operator()(Xs&& xs, State&& state, F&& f) const;
-
- template <typename Xs, typename F>
- constexpr decltype(auto) operator()(Xs&& xs, F&& f) const;
- };
-
- constexpr fold_left_t fold_left{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_FOLD_LEFT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/fold_right.hpp b/contrib/restricted/boost/boost/hana/fwd/fold_right.hpp
deleted file mode 100644
index a4305e9c72..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/fold_right.hpp
+++ /dev/null
@@ -1,92 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::fold_right`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_FOLD_RIGHT_HPP
-#define BOOST_HANA_FWD_FOLD_RIGHT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Right-fold of a structure using a binary operation and an optional
- //! initial reduction state.
- //! @ingroup group-Foldable
- //!
- //! `fold_right` is a right-associative fold using a binary operation.
- //! Given a structure containing `x1, ..., xn`, a function `f` and
- //! an optional initial state, `fold_right` applies `f` as follows
- //! @code
- //! f(x1, f(x2, f(x3, f(x4, ... f(xn-1, xn) ... )))) // without state
- //! f(x1, f(x2, f(x3, f(x4, ... f(xn, state) ... )))) // with state
- //! @endcode
- //!
- //! @note
- //! It is worth noting that the order in which the binary function should
- //! expect its arguments is reversed from `fold_left`.
- //!
- //! When the structure is empty, two things may arise. If an initial
- //! state was provided, it is returned as-is. Otherwise, if the no-state
- //! version of the function was used, an error is triggered. When the
- //! stucture contains a single element and the no-state version of the
- //! function was used, that single element is returned as is.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a `Foldable` `F` and an optional initial state of tag `S`,
- //! the signatures for `fold_right` are
- //! \f[
- //! \mathtt{fold\_right} : F(T) \times S \times (T \times S \to S) \to S
- //! \f]
- //!
- //! for the variant with an initial state, and
- //! \f[
- //! \mathtt{fold\_right} : F(T) \times (T \times T \to T) \to T
- //! \f]
- //!
- //! for the variant without an initial state.
- //!
- //! @param xs
- //! The structure to fold.
- //!
- //! @param state
- //! The initial value used for folding.
- //!
- //! @param f
- //! A binary function called as `f(x, state)`, where `state` is the
- //! result accumulated so far and `x` is an element in the structure.
- //! For right folds without an initial state, the function is called as
- //! `f(x1, x2)`, where `x1` and `x2` are elements of the structure.
- //!
- //!
- //! Example
- //! -------
- //! @include example/fold_right.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto fold_right = [](auto&& xs[, auto&& state], auto&& f) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename = void>
- struct fold_right_impl : fold_right_impl<T, when<true>> { };
-
- struct fold_right_t {
- template <typename Xs, typename State, typename F>
- constexpr decltype(auto) operator()(Xs&& xs, State&& state, F&& f) const;
-
- template <typename Xs, typename F>
- constexpr decltype(auto) operator()(Xs&& xs, F&& f) const;
- };
-
- constexpr fold_right_t fold_right{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_FOLD_RIGHT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/for_each.hpp b/contrib/restricted/boost/boost/hana/fwd/for_each.hpp
deleted file mode 100644
index 83daf25418..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/for_each.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::for_each`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_FOR_EACH_HPP
-#define BOOST_HANA_FWD_FOR_EACH_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Perform an action on each element of a foldable, discarding
- //! the result each time.
- //! @ingroup group-Foldable
- //!
- //! Iteration is done from left to right, i.e. in the same order as when
- //! using `fold_left`. If the structure is not finite, this method will
- //! not terminate.
- //!
- //!
- //! @param xs
- //! The structure to iterate over.
- //!
- //! @param f
- //! A function called as `f(x)` for each element `x` of the structure.
- //! The result of `f(x)`, whatever it is, is ignored.
- //!
- //!
- //! Example
- //! -------
- //! @include example/for_each.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto for_each = [](auto&& xs, auto&& f) -> void {
- tag-dispatched;
- };
-#else
- template <typename T, typename = void>
- struct for_each_impl : for_each_impl<T, when<true>> { };
-
- struct for_each_t {
- template <typename Xs, typename F>
- constexpr void operator()(Xs&& xs, F&& f) const;
- };
-
- constexpr for_each_t for_each{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_FOR_EACH_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/front.hpp b/contrib/restricted/boost/boost/hana/fwd/front.hpp
deleted file mode 100644
index 3ac1602ea4..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/front.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::front`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_FRONT_HPP
-#define BOOST_HANA_FWD_FRONT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns the first element of a non-empty iterable.
- //! @ingroup group-Iterable
- //!
- //! Given a non-empty Iterable `xs` with a linearization of `[x1, ..., xN]`,
- //! `front(xs)` is equal to `x1`. If `xs` is empty, it is an error to
- //! use this function. Equivalently, `front(xs)` must be equivalent to
- //! `at_c<0>(xs)`, and that regardless of the value category of `xs`
- //! (`front` must respect the reference semantics of `at`).
- //!
- //!
- //! Example
- //! -------
- //! @include example/front.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto front = [](auto&& xs) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename It, typename = void>
- struct front_impl : front_impl<It, when<true>> { };
-
- struct front_t {
- template <typename Xs>
- constexpr decltype(auto) operator()(Xs&& xs) const;
- };
-
- constexpr front_t front{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_FRONT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/fuse.hpp b/contrib/restricted/boost/boost/hana/fwd/fuse.hpp
deleted file mode 100644
index cecc97c73a..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/fuse.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::fuse`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_FUSE_HPP
-#define BOOST_HANA_FWD_FUSE_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Transform a function taking multiple arguments into a function that
- //! can be called with a compile-time `Foldable`.
- //! @ingroup group-Foldable
- //!
- //!
- //! This function is provided for convenience as a different way of
- //! calling `unpack`. Specifically, `fuse(f)` is a function such that
- //! @code
- //! fuse(f)(foldable) == unpack(foldable, f)
- //! == f(x...)
- //! @endcode
- //! where `x...` are the elements in the foldable. This function is
- //! useful when one wants to create a function that accepts a foldable
- //! which is not known yet.
- //!
- //! @note
- //! This function is not tag-dispatched; customize `unpack` instead.
- //!
- //!
- //! Example
- //! -------
- //! @include example/fuse.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto fuse = [](auto&& f) {
- return [perfect-capture](auto&& xs) -> decltype(auto) {
- return unpack(forwarded(xs), forwarded(f));
- };
- };
-#else
- struct fuse_t {
- template <typename F>
- constexpr auto operator()(F&& f) const;
- };
-
- constexpr fuse_t fuse{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_FUSE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/greater.hpp b/contrib/restricted/boost/boost/hana/fwd/greater.hpp
deleted file mode 100644
index 5fcaa4e32d..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/greater.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::greater`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_GREATER_HPP
-#define BOOST_HANA_FWD_GREATER_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/nested_than_fwd.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns a `Logical` representing whether `x` is greater than `y`.
- //! @ingroup group-Orderable
- //!
- //!
- //! Signature
- //! ---------
- //! Given a Logical `Bool` and two Orderables `A` and `B` with a common
- //! embedding, the signature is
- //! @f$ \mathrm{greater} : A \times B \to Bool @f$.
- //!
- //! @param x, y
- //! Two objects to compare.
- //!
- //!
- //! Example
- //! -------
- //! @include example/greater.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto greater = [](auto&& x, auto&& y) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename U, typename = void>
- struct greater_impl : greater_impl<T, U, when<true>> { };
-
- struct greater_t : detail::nested_than<greater_t> {
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) const;
- };
-
- constexpr greater_t greater{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_GREATER_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/greater_equal.hpp b/contrib/restricted/boost/boost/hana/fwd/greater_equal.hpp
deleted file mode 100644
index 4b29bfcc96..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/greater_equal.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::greater_equal`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_GREATER_EQUAL_HPP
-#define BOOST_HANA_FWD_GREATER_EQUAL_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/nested_than_fwd.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns a `Logical` representing whether `x` is greater than or
- //! equal to `y`.
- //! @ingroup group-Orderable
- //!
- //!
- //! Signature
- //! ---------
- //! Given a Logical `Bool` and two Orderables `A` and `B` with a common
- //! embedding, the signature is
- //! @f$ \mathrm{greater\_equal} : A \times B \to Bool @f$.
- //!
- //! @param x, y
- //! Two objects to compare.
- //!
- //!
- //! Example
- //! -------
- //! @include example/greater_equal.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto greater_equal = [](auto&& x, auto&& y) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename U, typename = void>
- struct greater_equal_impl : greater_equal_impl<T, U, when<true>> { };
-
- struct greater_equal_t : detail::nested_than<greater_equal_t> {
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) const;
- };
-
- constexpr greater_equal_t greater_equal{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_GREATER_EQUAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/group.hpp b/contrib/restricted/boost/boost/hana/fwd/group.hpp
deleted file mode 100644
index 1be1bee386..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/group.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::group`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_GROUP_HPP
-#define BOOST_HANA_FWD_GROUP_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/nested_by_fwd.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Group adjacent elements of a sequence that all respect a binary
- //! predicate, by default equality.
- //! @ingroup group-Sequence
- //!
- //! Given a _finite_ Sequence and an optional predicate (by default
- //! `equal`), `group` returns a sequence of subsequences representing
- //! groups of adjacent elements that are "equal" with respect to the
- //! predicate. In other words, the groups are such that the predicate is
- //! satisfied when it is applied to any two adjacent elements in that
- //! group. The sequence returned by `group` is such that the concatenation
- //! of its elements is equal to the original sequence, which is equivalent
- //! to saying that the order of the elements is not changed.
- //!
- //! If no predicate is provided, adjacent elements in the sequence must
- //! all be compile-time `Comparable`.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a Sequence `s` with tag `S(T)`, an `IntegralConstant` `Bool`
- //! holding a value of type `bool`, and a predicate
- //! \f$ pred : T \times T \to Bool \f$, `group` has the following
- //! signatures. For the variant with a provided predicate,
- //! \f[
- //! \mathtt{group} : S(T) \times (T \times T \to Bool) \to S(S(T))
- //! \f]
- //!
- //! for the variant without a custom predicate, `T` is required to be
- //! Comparable. The signature is then
- //! \f[
- //! \mathtt{group} : S(T) \to S(S(T))
- //! \f]
- //!
- //! @param xs
- //! The sequence to split into groups.
- //!
- //! @param predicate
- //! A binary function called as `predicate(x, y)`, where `x` and `y` are
- //! _adjacent_ elements in the sequence, whether both elements should be
- //! in the same group (subsequence) of the result. In the current version
- //! of the library, the result returned by `predicate` must be an
- //! `IntegralConstant` holding a value of a type convertible to `bool`.
- //! Also, `predicate` has to define an equivalence relation as defined by
- //! the `Comparable` concept. When this predicate is not provided, it
- //! defaults to `equal`, which requires the comparison of any two adjacent
- //! elements in the sequence to return a boolean `IntegralConstant`.
- //!
- //!
- //! Syntactic sugar (`group.by`)
- //! ----------------------------
- //! `group` can be called in a third way, which provides a nice syntax
- //! especially when working with the `comparing` combinator:
- //! @code
- //! group.by(predicate, xs) == group(xs, predicate)
- //! group.by(predicate) == group(-, predicate)
- //! @endcode
- //!
- //! where `group(-, predicate)` denotes the partial application of
- //! `group` to `predicate`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/group.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto group = [](auto&& xs[, auto&& predicate]) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct group_impl : group_impl<S, when<true>> { };
-
- struct group_t : detail::nested_by<group_t> {
- template <typename Xs>
- constexpr auto operator()(Xs&& xs) const;
-
- template <typename Xs, typename Predicate>
- constexpr auto operator()(Xs&& xs, Predicate&& pred) const;
- };
-
- constexpr group_t group{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_GROUP_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/hash.hpp b/contrib/restricted/boost/boost/hana/fwd/hash.hpp
deleted file mode 100644
index 38602db518..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/hash.hpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::hash`.
-
-@copyright Louis Dionne 2016
-@copyright Jason Rice 2016
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_HASH_HPP
-#define BOOST_HANA_FWD_HASH_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns a `hana::type` representing the compile-time hash of an object.
- //! @ingroup group-Hashable
- //!
- //! Given an arbitrary object `x`, `hana::hash` returns a `hana::type`
- //! representing the hash of `x`. In normal programming, hashes are
- //! usually numerical values that can be used e.g. as indices in an
- //! array as part of the implementation of a hash table. In the context
- //! of metaprogramming, we are interested in type-level hashes instead.
- //! Thus, `hana::hash` must return a `hana::type` object instead of an
- //! integer. This `hana::type` must somehow summarize the object being
- //! hashed, but that summary may of course lose some information.
- //!
- //! In order for the `hash` function to be defined properly, it must be
- //! the case that whenever `x` is equal to `y`, then `hash(x)` is equal
- //! to `hash(y)`. This ensures that `hana::hash` is a function in the
- //! mathematical sense of the term.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a `Hashable` `H`, the signature is
- //! \f$
- //! \mathtt{hash} : H \to \mathtt{type\_tag}
- //! \f$
- //!
- //! @param x
- //! An object whose hash is to be computed.
- //!
- //!
- //! Example
- //! -------
- //! @include example/hash.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto hash = [](auto const& x) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename = void>
- struct hash_impl : hash_impl<T, when<true>> { };
-
- struct hash_t {
- template <typename X>
- constexpr auto operator()(X const& x) const;
- };
-
- constexpr hash_t hash{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_HASH_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/if.hpp b/contrib/restricted/boost/boost/hana/fwd/if.hpp
deleted file mode 100644
index 59b61975f8..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/if.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::if_`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_IF_HPP
-#define BOOST_HANA_FWD_IF_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Conditionally return one of two values based on a condition.
- //! @ingroup group-Logical
- //!
- //! Specifically, `then` is returned iff `cond` is true-valued, and
- //! `else_` is returned otherwise. Note that some `Logical` models may
- //! allow `then` and `else_` to have different types, while others may
- //! require both values to have the same type.
- //!
- //!
- //! @param cond
- //! The condition determining which of the two values is returned.
- //!
- //! @param then
- //! The value returned when `cond` is true-valued.
- //!
- //! @param else_
- //! The value returned when `cond` is false-valued.
- //!
- //!
- //! Example
- //! -------
- //! @include example/if.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto if_ = [](auto&& cond, auto&& then, auto&& else_) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename L, typename = void>
- struct if_impl : if_impl<L, when<true>> { };
-
- struct if_t {
- template <typename Cond, typename Then, typename Else>
- constexpr decltype(auto) operator()(Cond&& cond, Then&& then, Else&& else_) const;
- };
-
- constexpr if_t if_{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/index_if.hpp b/contrib/restricted/boost/boost/hana/fwd/index_if.hpp
deleted file mode 100644
index 59f98f59fa..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/index_if.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::index_if`.
-
-@copyright Louis Dionne 2013-2017
-@copyright Jason Rice 2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_INDEX_IF_HPP
-#define BOOST_HANA_FWD_INDEX_IF_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Finds the value associated to the first key satisfying a predicate.
- //! @ingroup group-Iterable
- //!
- //! Given an `Iterable` structure `xs` and a predicate `pred`,
- //! `index_if(xs, pred)` returns a `hana::optional` containing an `IntegralConstant`
- //! of the index of the first element that satisfies the predicate or nothing
- //! if no element satisfies the predicate.
- //!
- //!
- //! @param xs
- //! The structure to be searched.
- //!
- //! @param predicate
- //! A function called as `predicate(x)`, where `x` is an element of the
- //! `Iterable` structure and returning whether `x` is the element being
- //! searched for. In the current version of the library, the predicate
- //! has to return an `IntegralConstant` holding a value that can be
- //! converted to `bool`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/index_if.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto index_if = [](auto&& xs, auto&& predicate) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct index_if_impl : index_if_impl<S, when<true>> { };
-
- struct index_if_t {
- template <typename Xs, typename Pred>
- constexpr auto operator()(Xs&& xs, Pred&& pred) const;
- };
-
- constexpr index_if_t index_if{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_INDEX_IF_HPP
-
diff --git a/contrib/restricted/boost/boost/hana/fwd/insert.hpp b/contrib/restricted/boost/boost/hana/fwd/insert.hpp
deleted file mode 100644
index 3ca9aa458d..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/insert.hpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::insert`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_INSERT_HPP
-#define BOOST_HANA_FWD_INSERT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- // Note: This function is documented per datatype/concept only.
- //! @cond
- template <typename T, typename = void>
- struct insert_impl : insert_impl<T, when<true>> { };
- //! @endcond
-
- struct insert_t {
- template <typename Set, typename ...Args>
- constexpr decltype(auto) operator()(Set&& set, Args&& ...args) const;
- };
-
- constexpr insert_t insert{};
-
-
- //! Insert a value at a given index in a sequence.
- //! @ingroup group-Sequence
- //!
- //! Given a sequence, an index and an element to insert, `insert` inserts
- //! the element at the given index.
- //!
- //! @param xs
- //! The sequence in which a value should be inserted.
- //!
- //! @param n
- //! The index at which an element should be inserted. This must be a
- //! non-negative `Constant` of an integral type, and it must also be
- //! true that `n < length(xs)` if `xs` is a finite sequence.
- //!
- //! @param element
- //! The element to insert in the sequence.
- //!
- //!
- //! Example
- //! -------
- //! @include example/insert.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto insert = [](auto&& xs, auto&& n, auto&& element) {
- return tag-dispatched;
- };
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_INSERT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/insert_range.hpp b/contrib/restricted/boost/boost/hana/fwd/insert_range.hpp
deleted file mode 100644
index 88b6d98acd..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/insert_range.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::insert_range`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_INSERT_RANGE_HPP
-#define BOOST_HANA_FWD_INSERT_RANGE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Insert several values at a given index in a sequence.
- //! @ingroup group-Sequence
- //!
- //! Given a sequence, an index and any `Foldable` containing elements to
- //! insert, `insert_range` inserts the elements in the `Foldable` at the
- //! given index of the sequence.
- //!
- //! @param xs
- //! The sequence in which values should be inserted.
- //!
- //! @param n
- //! The index at which elements should be inserted. This must be a
- //! non-negative `Constant` of an integral type, and it must also be
- //! true that `n < length(xs)` if `xs` is a finite sequence.
- //!
- //! @param elements
- //! A `Foldable` containing elements to insert in the sequence.
- //!
- //!
- //! Example
- //! -------
- //! @include example/insert_range.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto insert_range = [](auto&& xs, auto&& n, auto&& elements) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct insert_range_impl : insert_range_impl<S, when<true>> { };
-
- struct insert_range_t {
- template <typename Xs, typename N, typename Elements>
- constexpr auto operator()(Xs&& xs, N&& n, Elements&& elements) const;
- };
-
- constexpr insert_range_t insert_range{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_INSERT_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/integral_constant.hpp b/contrib/restricted/boost/boost/hana/fwd/integral_constant.hpp
deleted file mode 100644
index 6ef1272d80..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/integral_constant.hpp
+++ /dev/null
@@ -1,175 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::integral_constant`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_INTEGRAL_CONSTANT_HPP
-#define BOOST_HANA_FWD_INTEGRAL_CONSTANT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/integral_constant.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Creates an `integral_constant` holding the given compile-time value.
- //! @relates hana::integral_constant
- //!
- //! Specifically, `integral_c<T, v>` is a `hana::integral_constant`
- //! holding the compile-time value `v` of an integral type `T`.
- //!
- //!
- //! @tparam T
- //! The type of the value to hold in the `integral_constant`.
- //! It must be an integral type.
- //!
- //! @tparam v
- //! The integral value to hold in the `integral_constant`.
- //!
- //!
- //! Example
- //! -------
- //! @snippet example/integral_constant.cpp integral_c
- template <typename T, T v>
- constexpr integral_constant<T, v> integral_c{};
-
-
- //! @relates hana::integral_constant
- template <bool b>
- using bool_ = integral_constant<bool, b>;
-
- //! @relates hana::integral_constant
- template <bool b>
- constexpr bool_<b> bool_c{};
-
- //! @relates hana::integral_constant
- using true_ = bool_<true>;
-
- //! @relates hana::integral_constant
- constexpr auto true_c = bool_c<true>;
-
- //! @relates hana::integral_constant
- using false_ = bool_<false>;
-
- //! @relates hana::integral_constant
- constexpr auto false_c = bool_c<false>;
-
-
- //! @relates hana::integral_constant
- template <char c>
- using char_ = integral_constant<char, c>;
-
- //! @relates hana::integral_constant
- template <char c>
- constexpr char_<c> char_c{};
-
-
- //! @relates hana::integral_constant
- template <short i>
- using short_ = integral_constant<short, i>;
-
- //! @relates hana::integral_constant
- template <short i>
- constexpr short_<i> short_c{};
-
-
- //! @relates hana::integral_constant
- template <unsigned short i>
- using ushort_ = integral_constant<unsigned short, i>;
-
- //! @relates hana::integral_constant
- template <unsigned short i>
- constexpr ushort_<i> ushort_c{};
-
-
- //! @relates hana::integral_constant
- template <int i>
- using int_ = integral_constant<int, i>;
-
- //! @relates hana::integral_constant
- template <int i>
- constexpr int_<i> int_c{};
-
-
- //! @relates hana::integral_constant
- template <unsigned int i>
- using uint = integral_constant<unsigned int, i>;
-
- //! @relates hana::integral_constant
- template <unsigned int i>
- constexpr uint<i> uint_c{};
-
-
- //! @relates hana::integral_constant
- template <long i>
- using long_ = integral_constant<long, i>;
-
- //! @relates hana::integral_constant
- template <long i>
- constexpr long_<i> long_c{};
-
-
- //! @relates hana::integral_constant
- template <unsigned long i>
- using ulong = integral_constant<unsigned long, i>;
-
- //! @relates hana::integral_constant
- template <unsigned long i>
- constexpr ulong<i> ulong_c{};
-
-
- //! @relates hana::integral_constant
- template <long long i>
- using llong = integral_constant<long long, i>;
-
- //! @relates hana::integral_constant
- template <long long i>
- constexpr llong<i> llong_c{};
-
-
- //! @relates hana::integral_constant
- template <unsigned long long i>
- using ullong = integral_constant<unsigned long long, i>;
-
- //! @relates hana::integral_constant
- template <unsigned long long i>
- constexpr ullong<i> ullong_c{};
-
-
- //! @relates hana::integral_constant
- template <std::size_t i>
- using size_t = integral_constant<std::size_t, i>;
-
- //! @relates hana::integral_constant
- template <std::size_t i>
- constexpr size_t<i> size_c{};
-
-
- namespace literals {
- //! Creates a `hana::integral_constant` from a literal.
- //! @relatesalso boost::hana::integral_constant
- //!
- //! The literal is parsed at compile-time and the result is returned
- //! as a `llong<...>`.
- //!
- //! @note
- //! We use `llong<...>` instead of `ullong<...>` because using an
- //! unsigned type leads to unexpected behavior when doing stuff like
- //! `-1_c`. If we used an unsigned type, `-1_c` would be something
- //! like `ullong<-1>` which is actually `ullong<something huge>`.
- //!
- //!
- //! Example
- //! -------
- //! @snippet example/integral_constant.cpp literals
- template <char ...c>
- constexpr auto operator"" _c();
- }
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_INTEGRAL_CONSTANT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/intersection.hpp b/contrib/restricted/boost/boost/hana/fwd/intersection.hpp
deleted file mode 100644
index f289dd03fa..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/intersection.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::intersection`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_INTERSECTION_HPP
-#define BOOST_HANA_FWD_INTERSECTION_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- // Note: This function is documented per datatype/concept only.
- //! @cond
- template <typename S, typename = void>
- struct intersection_impl : intersection_impl<S, when<true>> { };
- //! @endcond
-
- struct intersection_t {
- template <typename Xs, typename Ys>
- constexpr auto operator()(Xs&&, Ys&&) const;
- };
-
- constexpr intersection_t intersection{};
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_INTERSECTION_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/intersperse.hpp b/contrib/restricted/boost/boost/hana/fwd/intersperse.hpp
deleted file mode 100644
index 35e8a725b5..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/intersperse.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::intersperse`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_INTERSPERSE_HPP
-#define BOOST_HANA_FWD_INTERSPERSE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Insert a value between each pair of elements in a finite sequence.
- //! @ingroup group-Sequence
- //!
- //! Given a finite `Sequence` `xs` with a linearization of
- //! `[x1, x2, ..., xn]`, `intersperse(xs, z)` is a new sequence with a
- //! linearization of `[x1, z, x2, z, x3, ..., xn-1, z, xn]`. In other
- //! words, it inserts the `z` element between every pair of elements of
- //! the original sequence. If the sequence is empty or has a single
- //! element, `intersperse` returns the sequence as-is. In all cases,
- //! the sequence must be finite.
- //!
- //!
- //! @param xs
- //! The sequence in which a value is interspersed.
- //!
- //! @param z
- //! The value to be inserted between every pair of elements of the sequence.
- //!
- //!
- //! Example
- //! -------
- //! @include example/intersperse.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto intersperse = [](auto&& xs, auto&& z) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct intersperse_impl : intersperse_impl<S, when<true>> { };
-
- struct intersperse_t {
- template <typename Xs, typename Z>
- constexpr auto operator()(Xs&& xs, Z&& z) const;
- };
-
- constexpr intersperse_t intersperse{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_INTERSPERSE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/is_disjoint.hpp b/contrib/restricted/boost/boost/hana/fwd/is_disjoint.hpp
deleted file mode 100644
index 8a3520b558..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/is_disjoint.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::is_disjoint`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_IS_DISJOINT_HPP
-#define BOOST_HANA_FWD_IS_DISJOINT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns whether two `Searchable`s are disjoint.
- //! @ingroup group-Searchable
- //!
- //! Given two `Searchable`s `xs` and `ys`, `is_disjoint` returns a
- //! `Logical` representing whether the keys in `xs` are disjoint from
- //! the keys in `ys`, i.e. whether both structures have no keys in common.
- //!
- //!
- //! @param xs, ys
- //! Two `Searchable`s to test for disjointness.
- //!
- //!
- //! Example
- //! -------
- //! @include example/is_disjoint.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto is_disjoint = [](auto const& xs, auto const& ys) {
- return tag-dispatched;
- };
-#else
- template <typename S1, typename S2, typename = void>
- struct is_disjoint_impl : is_disjoint_impl<S1, S2, when<true>> { };
-
- struct is_disjoint_t {
- template <typename Xs, typename Ys>
- constexpr auto operator()(Xs&& xs, Ys&& ys) const;
- };
-
- constexpr is_disjoint_t is_disjoint{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_IS_DISJOINT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/is_empty.hpp b/contrib/restricted/boost/boost/hana/fwd/is_empty.hpp
deleted file mode 100644
index a33dc5af8c..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/is_empty.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::is_empty`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_IS_EMPTY_HPP
-#define BOOST_HANA_FWD_IS_EMPTY_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns whether the iterable is empty.
- //! @ingroup group-Iterable
- //!
- //! Given an `Iterable` `xs`, `is_empty` returns whether `xs` contains
- //! no more elements. In other words, it returns whether trying to
- //! extract the tail of `xs` would be an error. In the current version
- //! of the library, `is_empty` must return an `IntegralConstant` holding
- //! a value convertible to `bool`. This is because only compile-time
- //! `Iterable`s are supported right now.
- //!
- //!
- //! Example
- //! -------
- //! @include example/is_empty.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto is_empty = [](auto const& xs) {
- return tag-dispatched;
- };
-#else
- template <typename It, typename = void>
- struct is_empty_impl : is_empty_impl<It, when<true>> { };
-
- struct is_empty_t {
- template <typename Xs>
- constexpr auto operator()(Xs const& xs) const;
- };
-
- constexpr is_empty_t is_empty{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_IS_EMPTY_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/is_subset.hpp b/contrib/restricted/boost/boost/hana/fwd/is_subset.hpp
deleted file mode 100644
index aceb85aa86..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/is_subset.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::is_subset`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_IS_SUBSET_HPP
-#define BOOST_HANA_FWD_IS_SUBSET_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-#include <boost/hana/functional/infix.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns whether a structure contains a subset of the keys of
- //! another structure.
- //! @ingroup group-Searchable
- //!
- //! Given two `Searchable`s `xs` and `ys`, `is_subset` returns a `Logical`
- //! representing whether `xs` is a subset of `ys`. In other words, it
- //! returns whether all the keys of `xs` are also present in `ys`. This
- //! method does not return whether `xs` is a _strict_ subset of `ys`; if
- //! `xs` and `ys` are equal, all the keys of `xs` are also present in
- //! `ys`, and `is_subset` returns true.
- //!
- //! @note
- //! For convenience, `is_subset` can also be applied in infix notation.
- //!
- //!
- //! Cross-type version of the method
- //! --------------------------------
- //! This method is tag-dispatched using the tags of both arguments.
- //! It can be called with any two `Searchable`s sharing a common
- //! `Searchable` embedding, as defined in the main documentation
- //! of the `Searchable` concept. When `Searchable`s with two different
- //! tags but sharing a common embedding are sent to `is_subset`, they
- //! are first converted to this common `Searchable` and the `is_subset`
- //! method of the common embedding is then used. Of course, the method
- //! can be overriden for custom `Searchable`s for efficieny.
- //!
- //! @note
- //! While cross-type dispatching for `is_subset` is supported, it is
- //! not currently used by the library because there are no models
- //! of `Searchable` with a common embedding.
- //!
- //!
- //! @param xs
- //! The structure to check whether it is a subset of `ys`.
- //!
- //! @param ys
- //! The structure to check whether it is a superset of `xs`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/is_subset.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto is_subset = [](auto&& xs, auto&& ys) {
- return tag-dispatched;
- };
-#else
- template <typename S1, typename S2, typename = void>
- struct is_subset_impl : is_subset_impl<S1, S2, when<true>> { };
-
- struct is_subset_t {
- template <typename Xs, typename Ys>
- constexpr auto operator()(Xs&& xs, Ys&& ys) const;
- };
-
- constexpr auto is_subset = hana::infix(is_subset_t{});
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_IS_SUBSET_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/keys.hpp b/contrib/restricted/boost/boost/hana/fwd/keys.hpp
deleted file mode 100644
index 24c93b749a..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/keys.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::keys`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_KEYS_HPP
-#define BOOST_HANA_FWD_KEYS_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- // Note: This function is documented per datatype/concept only.
- //! @cond
- template <typename T, typename = void>
- struct keys_impl : keys_impl<T, when<true>> { };
- //! @endcond
-
- struct keys_t {
- template <typename Map>
- constexpr auto operator()(Map&& map) const;
- };
-
- constexpr keys_t keys{};
-
- //! Returns a `Sequence` containing the name of the members of
- //! the data structure.
- //! @ingroup group-Struct
- //!
- //! Given a `Struct` object, `keys` returns a `Sequence` containing the
- //! name of all the members of the `Struct`, in the same order as they
- //! appear in the `accessors` sequence.
- //!
- //!
- //! Example
- //! -------
- //! @include example/struct/keys.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto keys = [](auto&& object) {
- return implementation_defined;
- };
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_KEYS_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/lazy.hpp b/contrib/restricted/boost/boost/hana/fwd/lazy.hpp
deleted file mode 100644
index 7568e8e4a6..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/lazy.hpp
+++ /dev/null
@@ -1,124 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::lazy`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_LAZY_HPP
-#define BOOST_HANA_FWD_LAZY_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-datatypes
- //! `hana::lazy` implements superficial laziness via a monadic interface.
- //!
- //! It is important to understand that the laziness implemented by `lazy`
- //! is only superficial; only function applications made inside the `lazy`
- //! monad can be made lazy, not all their subexpressions.
- //!
- //!
- //! @note
- //! The actual representation of `hana::lazy` is completely
- //! implementation-defined. Lazy values may only be created through
- //! `hana::make_lazy`, and they can be stored in variables using
- //! `auto`, but any other assumption about the representation of
- //! `hana::lazy<...>` should be avoided. In particular, one should
- //! not rely on the fact that `hana::lazy<...>` can be pattern-matched
- //! on, because it may be a dependent type.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! 1. `Functor`\n
- //! Applying a function over a lazy value with `transform` returns the
- //! result of applying the function, as a lazy value.
- //! @include example/lazy/functor.cpp
- //!
- //! 2. `Applicative`\n
- //! A normal value can be lifted into a lazy value by using `lift<lazy_tag>`.
- //! A lazy function can be lazily applied to a lazy value by using `ap`.
- //!
- //! 3. `Monad`\n
- //! The `lazy` monad allows combining lazy computations into larger
- //! lazy computations. Note that the `|` operator can be used in place
- //! of the `chain` function.
- //! @include example/lazy/monad.cpp
- //!
- //! 4. `Comonad`\n
- //! The `lazy` comonad allows evaluating a lazy computation to get its
- //! result and lazily applying functions taking lazy inputs to lazy
- //! values. This [blog post][1] goes into more details about lazy
- //! evaluation and comonads.
- //! @include example/lazy/comonad.cpp
- //!
- //!
- //! @note
- //! `hana::lazy` only models a few concepts because providing more
- //! functionality would require evaluating the lazy values in most cases.
- //! Since this raises some issues such as side effects and memoization,
- //! the interface is kept minimal.
- //!
- //!
- //! [1]: http://ldionne.com/2015/03/16/laziness-as-a-comonad
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename implementation_defined>
- struct lazy {
- //! Equivalent to `hana::chain`.
- template <typename ...T, typename F>
- friend constexpr auto operator|(lazy<T...>, F);
- };
-#else
- // We do not _actually_ define the lazy<...> type. Per the documentation,
- // users can't rely on it being anything, and so they should never use
- // it explicitly. The implementation in <boost/hana/lazy.hpp> is much
- // simpler if we use different types for lazy calls and lazy values.
-#endif
-
- //! Tag representing `hana::lazy`.
- //! @relates hana::lazy
- struct lazy_tag { };
-
- //! Lifts a normal value to a lazy one.
- //! @relates hana::lazy
- //!
- //! `make<lazy_tag>` can be used to lift a normal value or a function call
- //! into a lazy expression. Precisely, `make<lazy_tag>(x)` is a lazy value
- //! equal to `x`, and `make<lazy_tag>(f)(x1, ..., xN)` is a lazy function
- //! call that is equal to `f(x1, ..., xN)` when it is `eval`uated.
- //!
- //! @note
- //! It is interesting to note that `make<lazy_tag>(f)(x1, ..., xN)` is
- //! equivalent to
- //! @code
- //! ap(make<lazy_tag>(f), lift<lazy_tag>(x1), ..., lift<lazy_tag>(xN))
- //! @endcode
- //! which in turn is equivalent to `make<lazy_tag>(f(x1, ..., xN))`, except
- //! for the fact that the inner call to `f` is evaluated lazily.
- //!
- //!
- //! Example
- //! -------
- //! @include example/lazy/make.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <>
- constexpr auto make<lazy_tag> = [](auto&& x) {
- return lazy<implementation_defined>{forwarded(x)};
- };
-#endif
-
- //! Alias to `make<lazy_tag>`; provided for convenience.
- //! @relates hana::lazy
- //!
- //! Example
- //! -------
- //! @include example/lazy/make.cpp
- constexpr auto make_lazy = make<lazy_tag>;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_LAZY_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/length.hpp b/contrib/restricted/boost/boost/hana/fwd/length.hpp
deleted file mode 100644
index 331b1d93d2..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/length.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::length`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_LENGTH_HPP
-#define BOOST_HANA_FWD_LENGTH_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Return the number of elements in a foldable structure.
- //! @ingroup group-Foldable
- //!
- //! Given a `Foldable` `xs`, `length(xs)` must return an object of an
- //! unsigned integral type, or an `IntegralConstant` holding such an
- //! object, which represents the number of elements in the structure.
- //!
- //! @note
- //! Since only compile-time `Foldable`s are supported in the library
- //! right now, `length` must always return an `IntegralConstant`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/length.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto length = [](auto const& xs) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename = void>
- struct length_impl : length_impl<T, when<true>> { };
-
- struct length_t {
- template <typename Xs>
- constexpr auto operator()(Xs const& xs) const;
- };
-
- constexpr length_t length{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_LENGTH_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/less.hpp b/contrib/restricted/boost/boost/hana/fwd/less.hpp
deleted file mode 100644
index f1695b2b74..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/less.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::less`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_LESS_HPP
-#define BOOST_HANA_FWD_LESS_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/nested_than_fwd.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns a `Logical` representing whether `x` is less than `y`.
- //! @ingroup group-Orderable
- //!
- //!
- //! Signature
- //! ---------
- //! Given a Logical `Bool` and two Orderables `A` and `B` with a common
- //! embedding, the signature is
- //! @f$ \mathrm{less} : A \times B \to Bool @f$.
- //!
- //! @param x, y
- //! Two objects to compare.
- //!
- //!
- //! Example
- //! -------
- //! @include example/less.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto less = [](auto&& x, auto&& y) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename U, typename = void>
- struct less_impl : less_impl<T, U, when<true>> { };
-
- struct less_t : detail::nested_than<less_t> {
- template <typename X, typename Y>
- constexpr auto operator()(X&& x, Y&& y) const;
- };
-
- constexpr less_t less{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_LESS_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/less_equal.hpp b/contrib/restricted/boost/boost/hana/fwd/less_equal.hpp
deleted file mode 100644
index e5c66e4bc3..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/less_equal.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::less_equal`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_LESS_EQUAL_HPP
-#define BOOST_HANA_FWD_LESS_EQUAL_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/nested_than_fwd.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns a `Logical` representing whether `x` is less than or
- //! equal to `y`.
- //! @ingroup group-Orderable
- //!
- //!
- //! Signature
- //! ---------
- //! Given a Logical `Bool` and two Orderables `A` and `B` with a common
- //! embedding, the signature is
- //! @f$ \mathrm{less\_equal} : A \times B \to Bool @f$.
- //!
- //! @param x, y
- //! Two objects to compare.
- //!
- //!
- //! Example
- //! -------
- //! @include example/less_equal.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto less_equal = [](auto&& x, auto&& y) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename U, typename = void>
- struct less_equal_impl : less_equal_impl<T, U, when<true>> { };
-
- struct less_equal_t : detail::nested_than<less_equal_t> {
- template <typename X, typename Y>
- constexpr auto operator()(X&& x, Y&& y) const;
- };
-
- constexpr less_equal_t less_equal{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_LESS_EQUAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/lexicographical_compare.hpp b/contrib/restricted/boost/boost/hana/fwd/lexicographical_compare.hpp
deleted file mode 100644
index a95aac5212..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/lexicographical_compare.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::lexicographical_compare`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_LEXICOGRAPHICAL_COMPARE_HPP
-#define BOOST_HANA_FWD_LEXICOGRAPHICAL_COMPARE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Short-circuiting lexicographical comparison of two `Iterable`s with
- //! an optional custom predicate, by default `hana::less`.
- //! @ingroup group-Iterable
- //!
- //! Given two `Iterable`s `xs` and `ys` and a binary predicate `pred`,
- //! `lexicographical_compare` returns whether `xs` is to be considered
- //! less than `ys` in a lexicographical ordering. Specifically, let's
- //! denote the linearizations of `xs` and `ys` by `[x1, x2, ...]` and
- //! `[y1, y2, ...]`, respectively. If the first couple satisfying the
- //! predicate is of the form `xi, yi`, `lexicographical_compare` returns
- //! true. Otherwise, if the first couple to satisfy the predicate is of
- //! the form `yi, xi`, `lexicographical_compare` returns false. If no
- //! such couple can be found, `lexicographical_compare` returns whether
- //! `xs` has fewer elements than `ys`.
- //!
- //! @note
- //! This algorithm will short-circuit as soon as it can determine that one
- //! sequence is lexicographically less than the other. Hence, it can be
- //! used to compare infinite sequences. However, for the procedure to
- //! terminate on infinite sequences, the predicate has to be satisfied
- //! at a finite index.
- //!
- //!
- //! Signature
- //! ---------
- //! Given two `Iterable`s `It1(T)` and `It2(T)` and a predicate
- //! \f$ pred : T \times T \to Bool \f$ (where `Bool` is some `Logical`),
- //! `lexicographical_compare` has the following signatures. For the
- //! variant with a provided predicate,
- //! \f[
- //! \mathtt{lexicographical\_compare}
- //! : It1(T) \times It2(T) \times (T \times T \to Bool) \to Bool
- //! \f]
- //!
- //! for the variant without a custom predicate, `T` is required to be
- //! `Orderable`. The signature is then
- //! \f[
- //! \mathtt{lexicographical\_compare} : It1(T) \times It2(T) \to Bool
- //! \f]
- //!
- //! @param xs, ys
- //! Two `Iterable`s to compare lexicographically.
- //!
- //! @param pred
- //! A binary function called as `pred(x, y)` and `pred(y, x)`, where `x`
- //! and `y` are elements of `xs` and `ys`, respectively. `pred` must
- //! return a `Logical` representing whether its first argument is to be
- //! considered as less than its second argument. Also note that `pred`
- //! must define a total ordering as defined by the `Orderable` concept.
- //! When `pred` is not provided, it defaults to `less`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/lexicographical_compare.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto lexicographical_compare = [](auto const& xs, auto const& ys, auto const& pred = hana::less) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename = void>
- struct lexicographical_compare_impl : lexicographical_compare_impl<T, when<true>> { };
-
- struct lexicographical_compare_t {
- template <typename Xs, typename Ys>
- constexpr auto operator()(Xs const& xs, Ys const& ys) const;
-
- template <typename Xs, typename Ys, typename Pred>
- constexpr auto operator()(Xs const& xs, Ys const& ys, Pred const& pred) const;
- };
-
- constexpr lexicographical_compare_t lexicographical_compare{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_LEXICOGRAPHICAL_COMPARE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/lift.hpp b/contrib/restricted/boost/boost/hana/fwd/lift.hpp
deleted file mode 100644
index 9491dab8a4..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/lift.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::lift`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_LIFT_HPP
-#define BOOST_HANA_FWD_LIFT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Lift a value into an `Applicative` structure.
- //! @ingroup group-Applicative
- //!
- //! `lift<A>` takes a normal value and embeds it into a structure whose
- //! shape is represented by the `A` `Applicative`. Note that the value
- //! may be a function, in which case the created structure may be
- //! `ap`plied to another `Applicative` structure containing values.
- //!
- //!
- //! Signature
- //! ---------
- //! Given an Applicative `A`, the signature is
- //! @f$ \mathtt{lift}_A : T \to A(T) @f$.
- //!
- //! @tparam A
- //! A tag representing the `Applicative` into which the value is lifted.
- //!
- //! @param x
- //! The value to lift into the applicative.
- //!
- //!
- //! Example
- //! -------
- //! @include example/lift.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename A>
- constexpr auto lift = [](auto&& x) {
- return tag-dispatched;
- };
-#else
- template <typename A, typename = void>
- struct lift_impl : lift_impl<A, when<true>> { };
-
- template <typename A>
- struct lift_t;
-
- template <typename A>
- constexpr lift_t<A> lift{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_LIFT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/map.hpp b/contrib/restricted/boost/boost/hana/fwd/map.hpp
deleted file mode 100644
index c00f57195f..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/map.hpp
+++ /dev/null
@@ -1,380 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::map`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_MAP_HPP
-#define BOOST_HANA_FWD_MAP_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/fwd/core/to.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/erase_key.hpp>
-#include <boost/hana/fwd/insert.hpp>
-#include <boost/hana/fwd/keys.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Tag representing `hana::map`s.
- //! @relates hana::map
- struct map_tag { };
-
- namespace detail {
- template <typename ...Pairs>
- struct make_map_type;
- }
-
- //! @ingroup group-datatypes
- //! Basic associative container requiring unique, `Comparable` and
- //! `Hashable` keys.
- //!
- //! The order of the elements of the map is unspecified. Also, all the
- //! keys must be `Hashable`, and any two keys with equal hashes must be
- //! `Comparable` with each other at compile-time.
- //!
- //! Note that the actual representation of a `hana::map` is an implementation
- //! detail. As such, one should not assume anything more than what is
- //! explicitly documented as being part of the interface of a map,
- //! such as:
- //! - the presence of additional constructors
- //! - the presence of additional assignment operators
- //! - the fact that `hana::map<Pairs...>` is, or is not, a dependent type
- //!
- //! In particular, the last point is very important; `hana::map<Pairs...>`
- //! is basically equivalent to
- //! @code
- //! decltype(hana::make_pair(std::declval<Pairs>()...))
- //! @endcode
- //! which is not something that can be pattern-matched on during template
- //! argument deduction, for example.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! 1. `Comparable`\n
- //! Two maps are equal iff all their keys are equal and are associated
- //! to equal values.
- //! @include example/map/comparable.cpp
- //!
- //! 2. `Searchable`\n
- //! A map can be searched by its keys with a predicate yielding a
- //! compile-time `Logical`. Also note that `operator[]` can be used
- //! instead of `at_key`.
- //! @include example/map/searchable.cpp
- //!
- //! 3. `Foldable`\n
- //! Folding a map is equivalent to folding a list of the key/value pairs
- //! it contains. In particular, since that list is not guaranteed to be
- //! in any specific order, folding a map with an operation that is not
- //! both commutative and associative will yield non-deterministic behavior.
- //! @include example/map/foldable.cpp
- //!
- //!
- //! Conversion from any `Foldable`
- //! ------------------------------
- //! Any `Foldable` of `Product`s can be converted to a `hana::map` with
- //! `hana::to<hana::map_tag>` or, equivalently, `hana::to_map`. If the
- //! `Foldable` contains duplicate keys, only the value associated to the
- //! first occurence of each key is kept.
- //! @include example/map/to.cpp
- //!
- //!
- //! Example
- //! -------
- //! @include example/map/map.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename ...Pairs>
- struct map {
- //! Default-construct a map. This constructor only exists when all the
- //! elements of the map are default-constructible.
- constexpr map() = default;
-
- //! Copy-construct a map from another map. This constructor only
- //! exists when all the elements of the map are copy-constructible.
- constexpr map(map const& other) = default;
-
- //! Move-construct a map from another map. This constructor only
- //! exists when all the elements of the map are move-constructible.
- constexpr map(map&& other) = default;
-
- //! Construct the map from the provided pairs. `P...` must be pairs of
- //! the same type (modulo ref and cv-qualifiers), and in the same order,
- //! as those appearing in `Pairs...`. The pairs provided to this
- //! constructor are emplaced into the map's storage using perfect
- //! forwarding.
- template <typename ...P>
- explicit constexpr map(P&& ...pairs);
-
- //! Assign a map to another map __with the exact same type__. Only
- //! exists when all the elements of the map are copy-assignable.
- constexpr map& operator=(map const& other);
-
- //! Move-assign a map to another map __with the exact same type__.
- //! Only exists when all the elements of the map are move-assignable.
- constexpr map& operator=(map&& other);
-
- //! Equivalent to `hana::equal`
- template <typename X, typename Y>
- friend constexpr auto operator==(X&& x, Y&& y);
-
- //! Equivalent to `hana::not_equal`
- template <typename X, typename Y>
- friend constexpr auto operator!=(X&& x, Y&& y);
-
- //! Equivalent to `hana::at_key`
- template <typename Key>
- constexpr decltype(auto) operator[](Key&& key);
- };
-#else
- template <typename ...Pairs>
- using map = typename detail::make_map_type<Pairs...>::type;
-#endif
-
- //! Function object for creating a `hana::map`.
- //! @relates hana::map
- //!
- //! Given zero or more `Product`s representing key/value associations,
- //! `make<map_tag>` returns a `hana::map` associating these keys to these
- //! values.
- //!
- //! `make<map_tag>` requires all the keys to be unique and to have
- //! different hashes. If you need to create a map with duplicate keys
- //! or with keys whose hashes might collide, use `hana::to_map` or
- //! insert `(key, value)` pairs to an empty map successively. However,
- //! be aware that doing so will be much more compile-time intensive than
- //! using `make<map_tag>`, because the uniqueness of keys will have to be
- //! enforced.
- //!
- //!
- //! Example
- //! -------
- //! @include example/map/make.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <>
- constexpr auto make<map_tag> = [](auto&& ...pairs) {
- return map<implementation_defined>{forwarded(pairs)...};
- };
-#endif
-
- //! Alias to `make<map_tag>`; provided for convenience.
- //! @relates hana::map
- //!
- //!
- //! Example
- //! -------
- //! @include example/map/make.cpp
- constexpr auto make_map = make<map_tag>;
-
- //! Equivalent to `to<map_tag>`; provided for convenience.
- //! @relates hana::map
- constexpr auto to_map = to<map_tag>;
-
- //! Returns a `Sequence` of the keys of the map, in unspecified order.
- //! @relates hana::map
- //!
- //!
- //! Example
- //! -------
- //! @include example/map/keys.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto keys = [](auto&& map) {
- return implementation_defined;
- };
-#endif
-
- //! Returns a `Sequence` of the values of the map, in unspecified order.
- //! @relates hana::map
- //!
- //!
- //! Example
- //! -------
- //! @include example/map/values.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto values = [](auto&& map) -> decltype(auto) {
- return implementation_defined;
- };
-#else
- struct values_t {
- template <typename Map>
- constexpr decltype(auto) operator()(Map&& map) const;
- };
-
- constexpr values_t values{};
-#endif
-
- //! Inserts a new key/value pair in a map.
- //! @relates hana::map
- //!
- //! Given a `(key, value)` pair, `insert` inserts this new pair into a
- //! map. If the map already contains this key, nothing is done and the
- //! map is returned as-is.
- //!
- //!
- //! @param map
- //! The map in which to insert a `(key,value)` pair.
- //!
- //! @param pair
- //! An arbitrary `Product` representing a `(key, value)` pair to insert
- //! in the map. The `key` must be compile-time `Comparable`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/map/insert.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto insert = [](auto&& map, auto&& pair) {
- return tag-dispatched;
- };
-#endif
-
- //! Removes a key/value pair from a map.
- //! @relates hana::map
- //!
- //! Returns a new `hana::map` containing all the elements of the original,
- //! except for the `(key, value)` pair whose `key` compares `equal`
- //! to the given key. If the map does not contain such an element,
- //! a new map equal to the original is returned.
- //!
- //!
- //! @param map
- //! The map in which to erase a `key`.
- //!
- //! @param key
- //! A key to remove from the map. It must be compile-time `Comparable`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/map/erase_key.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto erase_key = [](auto&& map, auto&& key) {
- return tag-dispatched;
- };
-#endif
-
- //! Returns the union of two maps.
- //! @relates hana::map
- //!
- //! Given two maps `xs` and `ys`, `hana::union_(xs, ys)` is a new map
- //! containing all the elements of `xs` and all the elements of `ys`,
- //! without duplicates. If both `xs` and `ys` contain an element with the
- //! same `key`, the one in `ys` is taken. Functionally,
- //! `hana::union_(xs, ys)` is equivalent to
- //! @code
- //! hana::fold_left(xs, ys, hana::insert)
- //! @endcode
- //!
- //! @param xs, ys
- //! The two maps to compute the union of.
- //!
- //!
- //! Example
- //! -------
- //! @include example/map/union.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto union_ = [](auto&& xs, auto&& ys) {
- return tag-dispatched;
- };
-#endif
-
- //! Returns the intersection of two maps.
- //! @relates hana::map
- //!
- //! Given two maps `xs` and `ys`, `intersection(xs, ys)` is a new map
- //! containing exactly those (key, value) pairs from xs, for which key
- //! is present in `ys`.
- //! In other words, the following holds for any object `pair(k, v)`:
- //! @code
- //! pair(k, v) ^in^ intersection(xs, ys) if and only if (k, v) ^in^ xs && k ^in^ keys(ys)
- //! @endcode
- //!
- //!
- //! @note
- //! This function is not commutative, i.e. `intersection(xs, ys)` is not
- //! necessarily the same as `intersection(ys, xs)`. Indeed, the set of keys
- //! in `intersection(xs, ys)` is always the same as the set of keys in
- //! `intersection(ys, xs)`, but the value associated to each key may be
- //! different. `intersection(xs, ys)` contains values present in `xs`, and
- //! `intersection(ys, xs)` contains values present in `ys`.
- //!
- //!
- //! @param xs, ys
- //! Two maps to intersect.
- //!
- //!
- //! Example
- //! -------
- //! @include example/map/intersection.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto intersection = [](auto&& xs, auto&& ys) {
- return tag-dispatched;
- };
-#endif
-
- //! Returns the difference of two maps.
- //! @relates hana::map
- //!
- //! Given two maps `xs` and `ys`, `difference(xs, ys)` is a new map
- //! containing exactly those (key, value) pairs from xs, for which key
- //! is not present in `keys(ys)`.
- //! In other words, the following holds for any object `pair(k, v)`:
- //! @code
- //! pair(k, v) ^in^ difference(xs, ys) if and only if (k, v) ^in^ xs && k ^not in^ keys(ys)
- //! @endcode
- //!
- //!
- //! @note
- //! This function is not commutative, i.e. `difference(xs, ys)` is not
- //! necessarily the same as `difference(ys, xs)`.
- //! Indeed, consider the case where `xs` is empty and `ys` isn't.
- //! In that case, `difference(xs, ys)` is empty, but `difference(ys, xs)`
- //! is equal to `ys`.
- //! For symmetric version of this operation, see `symmetric_difference`.
- //!
- //!
- //! @param xs, ys
- //! Two maps to compute the difference of.
- //!
- //!
- //! Example
- //! -------
- //! @include example/map/intersection.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto difference = [](auto&& xs, auto&& ys) {
- return tag-dispatched;
- };
-#endif
-
- //! Returns the symmetric set-theoretic difference of two maps.
- //! @relates hana::map
- //!
- //! Given two sets `xs` and `ys`, `symmetric_difference(xs, ys)` is a new
- //! map containing all the elements of `xs` whose keys are not contained in `keys(ys)`,
- //! and all the elements of `ys` whose keys are not contained in `keys(xs)`. The
- //! symmetric difference of two maps satisfies the following:
- //! @code
- //! symmetric_difference(xs, ys) == union_(difference(xs, ys), difference(ys, xs))
- //! @endcode
- //!
- //!
- //! @param xs, ys
- //! Two maps to compute the symmetric difference of.
- //!
- //!
- //! Example
- //! -------
- //! @include example/map/symmetric_difference.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-constexpr auto symmetric_difference = [](auto&& xs, auto&& ys) {
- return tag-dispatched;
- };
-#endif
-
-
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_MAP_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/max.hpp b/contrib/restricted/boost/boost/hana/fwd/max.hpp
deleted file mode 100644
index e34d558e25..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/max.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::max`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_MAX_HPP
-#define BOOST_HANA_FWD_MAX_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns the greatest of its arguments according to the `less` ordering.
- //! @ingroup group-Orderable
- //!
- //!
- //! @todo Can't specify the signature here either. See `min` for details.
- //!
- //! Example
- //! -------
- //! @include example/max.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto max = [](auto&& x, auto&& y) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename U, typename = void>
- struct max_impl : max_impl<T, U, when<true>> { };
-
- struct max_t {
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) const;
- };
-
- constexpr max_t max{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_MAX_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/maximum.hpp b/contrib/restricted/boost/boost/hana/fwd/maximum.hpp
deleted file mode 100644
index 9a49e83d40..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/maximum.hpp
+++ /dev/null
@@ -1,116 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::maximum`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_MAXIMUM_HPP
-#define BOOST_HANA_FWD_MAXIMUM_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/nested_by_fwd.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Return the greatest element of a non-empty structure with respect to
- //! a `predicate`, by default `less`.
- //! @ingroup group-Foldable
- //!
- //! Given a non-empty structure and an optional binary predicate
- //! (`less` by default), `maximum` returns the greatest element of
- //! the structure, i.e. an element which is greater than or equal to
- //! every other element in the structure, according to the predicate.
- //!
- //! If the structure contains heterogeneous objects, then the predicate
- //! must return a compile-time `Logical`. If no predicate is provided,
- //! the elements in the structure must be Orderable, or compile-time
- //! Orderable if the structure is heterogeneous.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a Foldable `F`, a Logical `Bool` and a predicate
- //! \f$ \mathtt{pred} : T \times T \to Bool \f$, `maximum` has the
- //! following signatures. For the variant with a provided predicate,
- //! \f[
- //! \mathtt{maximum} : F(T) \times (T \times T \to Bool) \to T
- //! \f]
- //!
- //! for the variant without a custom predicate, `T` is required to be
- //! Orderable. The signature is then
- //! \f[
- //! \mathtt{maximum} : F(T) \to T
- //! \f]
- //!
- //! @param xs
- //! The structure to find the greatest element of.
- //!
- //! @param predicate
- //! A function called as `predicate(x, y)`, where `x` and `y` are elements
- //! of the structure. `predicate` should be a strict weak ordering on the
- //! elements of the structure and its return value should be a Logical,
- //! or a compile-time Logical if the structure is heterogeneous.
- //!
- //! ### Example
- //! @include example/maximum.cpp
- //!
- //!
- //! Syntactic sugar (`maximum.by`)
- //! ------------------------------
- //! `maximum` can be called in a third way, which provides a nice syntax
- //! especially when working with the `ordering` combinator:
- //! @code
- //! maximum.by(predicate, xs) == maximum(xs, predicate)
- //! maximum.by(predicate) == maximum(-, predicate)
- //! @endcode
- //!
- //! where `maximum(-, predicate)` denotes the partial application of
- //! `maximum` to `predicate`.
- //!
- //! ### Example
- //! @include example/maximum_by.cpp
- //!
- //!
- //! Tag dispatching
- //! ---------------
- //! Both the non-predicated version and the predicated versions of
- //! `maximum` are tag-dispatched methods, and hence they can be
- //! customized independently. One reason for this is that some
- //! structures are able to provide a much more efficient implementation
- //! of `maximum` when the `less` predicate is used. Here is how the
- //! different versions of `maximum` are dispatched:
- //! @code
- //! maximum(xs) -> maximum_impl<tag of xs>::apply(xs)
- //! maximum(xs, pred) -> maximum_pred_impl<tag of xs>::apply(xs, pred)
- //! @endcode
- //!
- //! Also note that `maximum.by` is not tag-dispatched on its own, since it
- //! is just syntactic sugar for calling the corresponding `maximum`.
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto maximum = [](auto&& xs[, auto&& predicate]) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename = void>
- struct maximum_impl : maximum_impl<T, when<true>> { };
-
- template <typename T, typename = void>
- struct maximum_pred_impl : maximum_pred_impl<T, when<true>> { };
-
- struct maximum_t : detail::nested_by<maximum_t> {
- template <typename Xs>
- constexpr decltype(auto) operator()(Xs&& xs) const;
-
- template <typename Xs, typename Predicate>
- constexpr decltype(auto) operator()(Xs&& xs, Predicate&& pred) const;
- };
-
- constexpr maximum_t maximum{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_MAXIMUM_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/members.hpp b/contrib/restricted/boost/boost/hana/fwd/members.hpp
deleted file mode 100644
index a9f2d82bfb..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/members.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::members`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_MEMBERS_HPP
-#define BOOST_HANA_FWD_MEMBERS_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns a `Sequence` containing the members of a `Struct`.
- //! @ingroup group-Struct
- //!
- //! Given a `Struct` object, `members` returns a `Sequence` containing
- //! all the members of the `Struct`, in the same order as their respective
- //! accessor appears in the `accessors` sequence.
- //!
- //!
- //! Example
- //! -------
- //! @include example/members.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto members = [](auto&& object) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct members_impl : members_impl<S, when<true>> { };
-
- struct members_t {
- template <typename Object>
- constexpr auto operator()(Object&& object) const;
- };
-
- constexpr members_t members{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_MEMBERS_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/min.hpp b/contrib/restricted/boost/boost/hana/fwd/min.hpp
deleted file mode 100644
index 349787b571..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/min.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::min`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_MIN_HPP
-#define BOOST_HANA_FWD_MIN_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns the smallest of its arguments according to the `less` ordering.
- //! @ingroup group-Orderable
- //!
- //!
- //! @todo
- //! We can't specify the signature right now, because the tag of the
- //! returned object depends on whether `x < y` or not. If we wanted to be
- //! mathematically correct, we should probably ask that `if_(cond, x, y)`
- //! returns a common data type of `x` and `y`, and then the behavior
- //! of `min` would follow naturally. However, I'm unsure whether this
- //! is desirable because that's a big requirement.
- //!
- //!
- //! Example
- //! -------
- //! @include example/min.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto min = [](auto&& x, auto&& y) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename U, typename = void>
- struct min_impl : min_impl<T, U, when<true>> { };
-
- struct min_t {
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) const;
- };
-
- constexpr min_t min{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_MIN_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/minimum.hpp b/contrib/restricted/boost/boost/hana/fwd/minimum.hpp
deleted file mode 100644
index df80196bc6..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/minimum.hpp
+++ /dev/null
@@ -1,116 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::minimum`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_MINIMUM_HPP
-#define BOOST_HANA_FWD_MINIMUM_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/nested_by_fwd.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Return the least element of a non-empty structure with respect to
- //! a `predicate`, by default `less`.
- //! @ingroup group-Foldable
- //!
- //! Given a non-empty structure and an optional binary predicate
- //! (`less` by default), `minimum` returns the least element of
- //! the structure, i.e. an element which is less than or equal to
- //! every other element in the structure, according to the predicate.
- //!
- //! If the structure contains heterogeneous objects, then the predicate
- //! must return a compile-time `Logical`. If no predicate is provided,
- //! the elements in the structure must be Orderable, or compile-time
- //! Orderable if the structure is heterogeneous.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a `Foldable` `F`, a Logical `Bool` and a predicate
- //! \f$ \mathtt{pred} : T \times T \to Bool \f$, `minimum` has the
- //! following signatures. For the variant with a provided predicate,
- //! \f[
- //! \mathtt{minimum} : F(T) \times (T \times T \to Bool) \to T
- //! \f]
- //!
- //! for the variant without a custom predicate, `T` is required to be
- //! Orderable. The signature is then
- //! \f[
- //! \mathtt{minimum} : F(T) \to T
- //! \f]
- //!
- //! @param xs
- //! The structure to find the least element of.
- //!
- //! @param predicate
- //! A function called as `predicate(x, y)`, where `x` and `y` are elements
- //! of the structure. `predicate` should be a strict weak ordering on the
- //! elements of the structure and its return value should be a Logical,
- //! or a compile-time Logical if the structure is heterogeneous.
- //!
- //! ### Example
- //! @include example/minimum.cpp
- //!
- //!
- //! Syntactic sugar (`minimum.by`)
- //! ------------------------------
- //! `minimum` can be called in a third way, which provides a nice syntax
- //! especially when working with the `ordering` combinator:
- //! @code
- //! minimum.by(predicate, xs) == minimum(xs, predicate)
- //! minimum.by(predicate) == minimum(-, predicate)
- //! @endcode
- //!
- //! where `minimum(-, predicate)` denotes the partial application of
- //! `minimum` to `predicate`.
- //!
- //! ### Example
- //! @include example/minimum_by.cpp
- //!
- //!
- //! Tag dispatching
- //! ---------------
- //! Both the non-predicated version and the predicated versions of
- //! `minimum` are tag-dispatched methods, and hence they can be
- //! customized independently. One reason for this is that some
- //! structures are able to provide a much more efficient implementation
- //! of `minimum` when the `less` predicate is used. Here is how the
- //! different versions of `minimum` are dispatched:
- //! @code
- //! minimum(xs) -> minimum_impl<tag of xs>::apply(xs)
- //! minimum(xs, pred) -> minimum_pred_impl<tag of xs>::apply(xs, pred)
- //! @endcode
- //!
- //! Also note that `minimum.by` is not tag-dispatched on its own, since it
- //! is just syntactic sugar for calling the corresponding `minimum`.
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto minimum = [](auto&& xs[, auto&& predicate]) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename = void>
- struct minimum_impl : minimum_impl<T, when<true>> { };
-
- template <typename T, typename = void>
- struct minimum_pred_impl : minimum_pred_impl<T, when<true>> { };
-
- struct minimum_t : detail::nested_by<minimum_t> {
- template <typename Xs>
- constexpr decltype(auto) operator()(Xs&& xs) const;
-
- template <typename Xs, typename Predicate>
- constexpr decltype(auto) operator()(Xs&& xs, Predicate&& pred) const;
- };
-
- constexpr minimum_t minimum{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_MINIMUM_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/minus.hpp b/contrib/restricted/boost/boost/hana/fwd/minus.hpp
deleted file mode 100644
index 3b3b3ff428..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/minus.hpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::minus`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_MINUS_HPP
-#define BOOST_HANA_FWD_MINUS_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Subtract two elements of a group.
- //! @ingroup group-Group
- //!
- //! Specifically, this performs the `Monoid` operation on the first
- //! argument and on the inverse of the second argument, thus being
- //! equivalent to:
- //! @code
- //! minus(x, y) == plus(x, negate(y))
- //! @endcode
- //!
- //!
- //! Cross-type version of the method
- //! --------------------------------
- //! The `minus` method is "overloaded" to handle distinct data types
- //! with certain properties. Specifically, `minus` is defined for
- //! _distinct_ data types `A` and `B` such that
- //! 1. `A` and `B` share a common data type `C`, as determined by the
- //! `common` metafunction
- //! 2. `A`, `B` and `C` are all `Group`s when taken individually
- //! 3. `to<C> : A -> B` and `to<C> : B -> C` are `Group`-embeddings, as
- //! determined by the `is_embedding` metafunction.
- //!
- //! The definition of `minus` for data types satisfying the above
- //! properties is obtained by setting
- //! @code
- //! minus(x, y) = minus(to<C>(x), to<C>(y))
- //! @endcode
- //!
- //!
- //! Example
- //! -------
- //! @include example/minus.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto minus = [](auto&& x, auto&& y) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename U, typename = void>
- struct minus_impl : minus_impl<T, U, when<true>> { };
-
- struct minus_t {
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) const;
- };
-
- constexpr minus_t minus{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_MINUS_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/mod.hpp b/contrib/restricted/boost/boost/hana/fwd/mod.hpp
deleted file mode 100644
index c0872803fc..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/mod.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::mod`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_MOD_HPP
-#define BOOST_HANA_FWD_MOD_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Generalized integer modulus.
- //! @ingroup group-EuclideanRing
- //!
- //! Given two elements of an EuclideanRing `x` and `y`, with `y`
- //! nonzero, `mod` returns the modulus of the division of `x` by `y`.
- //! In other words, `mod` can be seen as an equivalent to `%`.
- //!
- //! Cross-type version of the method
- //! --------------------------------
- //! The `mod` method is "overloaded" to handle distinct data types
- //! with certain properties. Specifically, `mod` is defined for
- //! _distinct_ data types `A` and `B` such that
- //! 1. `A` and `B` share a common data type `C`, as determined by the
- //! `common` metafunction
- //! 2. `A`, `B` and `C` are all `EuclideanRing`s when taken individually
- //! 3. `to<C> : A -> B` and `to<C> : B -> C` are `Ring`-embeddings, as
- //! determined by the `is_embedding` metafunction.
- //!
- //! In that case, `mod` is defined as
- //! @code
- //! mod(x, y) = mod(to<C>(x), to<C>(y))
- //! @endcode
- //!
- //!
- //! Example
- //! -------
- //! @include example/mod.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto mod = [](auto&& x, auto&& y) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename U, typename = void>
- struct mod_impl : mod_impl<T, U, when<true>> { };
-
- struct mod_t {
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) const;
- };
-
- constexpr mod_t mod{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_MOD_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/monadic_compose.hpp b/contrib/restricted/boost/boost/hana/fwd/monadic_compose.hpp
deleted file mode 100644
index e9adde1bc2..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/monadic_compose.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::monadic_compose`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_MONADIC_COMPOSE_HPP
-#define BOOST_HANA_FWD_MONADIC_COMPOSE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Composition of monadic functions.
- //! @ingroup group-Monad
- //!
- //! Given two monadic functions `f` and `g`, `monadic_compose` returns
- //! a new function equivalent to the composition of `f` with `g`, except
- //! the result of `g` is `chain`ed into `f` instead of simply passed to
- //! it, as with normal composition. `monadic_compose` satisfies
- //! @code
- //! monadic_compose(f, g)(x) == chain(g(x), f)
- //! @endcode
- //!
- //!
- //! @note
- //! Unlike `compose`, `monadic_compose` does not generalize nicely to
- //! arities higher than one. Hence, only unary functions may be used
- //! with `monadic_compose`.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a `Monad` `M` and two functions @f$ f : B \to M(C) @f$ and
- //! @f$ g : A \to M(B) @f$, the signature is
- //! @f$
- //! \mathtt{monadic\_compose}
- //! : (B \to M(C)) \times (A \to M(B)) \to (A \to M(C))
- //! @f$.
- //!
- //! @param f
- //! A monadic function with signature @f$ B \to M(C) @f$.
- //!
- //! @param g
- //! A monadic function with signature @f$ A \to M(B) @f$.
- //!
- //!
- //! @note
- //! This method is not tag-dispatched, so it can't be customized directly.
- //!
- //!
- //! Example
- //! -------
- //! @include example/monadic_compose.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto monadic_compose = [](auto&& f, auto&& g) {
- return [perfect-capture](auto&& x) -> decltype(auto) {
- return hana::chain(forwarded(g)(forwarded(x)), forwarded(f));
- };
- };
-#else
- struct monadic_compose_t {
- template <typename F, typename G>
- constexpr auto operator()(F&& f, G&& g) const;
- };
-
- constexpr monadic_compose_t monadic_compose{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_MONADIC_COMPOSE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/monadic_fold_left.hpp b/contrib/restricted/boost/boost/hana/fwd/monadic_fold_left.hpp
deleted file mode 100644
index c037989dea..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/monadic_fold_left.hpp
+++ /dev/null
@@ -1,104 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::monadic_fold_left`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_MONADIC_FOLD_LEFT_HPP
-#define BOOST_HANA_FWD_MONADIC_FOLD_LEFT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Monadic left-fold of a structure with a binary operation and an
- //! optional initial reduction state.
- //! @ingroup group-Foldable
- //!
- //! @note
- //! This assumes the reader to be accustomed to non-monadic left-folds as
- //! explained by `hana::fold_left`, and to have read the [primer]
- //! (@ref monadic-folds) on monadic folds.
- //!
- //! `monadic_fold_left<M>` is a left-associative monadic fold. Given a
- //! `Foldable` with linearization `[x1, ..., xn]`, a function `f` and an
- //! optional initial state, `monadic_fold_left<M>` applies `f` as follows:
- //! @code
- //! // with state
- //! ((((f(state, x1) | f(-, x2)) | f(-, x3)) | ...) | f(-, xn))
- //!
- //! // without state
- //! ((((f(x1, x2) | f(-, x3)) | f(-, x4)) | ...) | f(-, xn))
- //! @endcode
- //!
- //! where `f(-, xk)` denotes the partial application of `f` to `xk`, and
- //! `|` is just the operator version of the monadic `chain`.
- //!
- //! When the structure is empty, one of two things may happen. If an
- //! initial state was provided, it is lifted to the given Monad and
- //! returned as-is. Otherwise, if the no-state version of the function
- //! was used, an error is triggered. When the stucture contains a single
- //! element and the no-state version of the function was used, that
- //! single element is lifted into the given Monad and returned as is.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a `Monad` `M`, a `Foldable` `F`, an initial state of tag `S`,
- //! and a function @f$ f : S \times T \to M(S) @f$, the signatures of
- //! `monadic_fold_left<M>` are
- //! \f[
- //! \mathtt{monadic\_fold\_left}_M :
- //! F(T) \times S \times (S \times T \to M(S)) \to M(S)
- //! \f]
- //!
- //! for the version with an initial state, and
- //! \f[
- //! \mathtt{monadic\_fold\_left}_M :
- //! F(T) \times (T \times T \to M(T)) \to M(T)
- //! \f]
- //!
- //! for the version without an initial state.
- //!
- //! @tparam M
- //! The Monad representing the monadic context in which the fold happens.
- //! The return type of `f` must be in that Monad.
- //!
- //! @param xs
- //! The structure to fold.
- //!
- //! @param state
- //! The initial value used for folding. If the structure is empty, this
- //! value is lifted in to the `M` Monad and then returned as-is.
- //!
- //! @param f
- //! A binary function called as `f(state, x)`, where `state` is the result
- //! accumulated so far and `x` is an element in the structure. The
- //! function must return its result inside the `M` Monad.
- //!
- //!
- //! Example
- //! -------
- //! @include example/monadic_fold_left.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename M>
- constexpr auto monadic_fold_left = [](auto&& xs[, auto&& state], auto&& f) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename = void>
- struct monadic_fold_left_impl : monadic_fold_left_impl<T, when<true>> { };
-
- template <typename M>
- struct monadic_fold_left_t;
-
- template <typename M>
- constexpr monadic_fold_left_t<M> monadic_fold_left{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_MONADIC_FOLD_LEFT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/monadic_fold_right.hpp b/contrib/restricted/boost/boost/hana/fwd/monadic_fold_right.hpp
deleted file mode 100644
index 2028e15369..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/monadic_fold_right.hpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::monadic_fold_right`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_MONADIC_FOLD_RIGHT_HPP
-#define BOOST_HANA_FWD_MONADIC_FOLD_RIGHT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Monadic right-fold of a structure with a binary operation and an
- //! optional initial reduction state.
- //! @ingroup group-Foldable
- //!
- //! @note
- //! This assumes the reader to be accustomed to non-monadic right-folds as
- //! explained by `hana::fold_right`, and to have read the [primer]
- //! (@ref monadic-folds) on monadic folds.
- //!
- //! `monadic_fold_right<M>` is a right-associative monadic fold. Given a
- //! structure containing `x1, ..., xn`, a function `f` and an optional
- //! initial state, `monadic_fold_right<M>` applies `f` as follows
- //! @code
- //! // with state
- //! (f(x1, -) | (f(x2, -) | (f(x3, -) | (... | f(xn, state)))))
- //!
- //! // without state
- //! (f(x1, -) | (f(x2, -) | (f(x3, -) | (... | f(xn-1, xn)))))
- //! @endcode
- //!
- //! where `f(xk, -)` denotes the partial application of `f` to `xk`,
- //! and `|` is just the operator version of the monadic `chain`.
- //! It is worth noting that the order in which the binary function should
- //! expect its arguments is reversed from `monadic_fold_left<M>`.
- //!
- //! When the structure is empty, one of two things may happen. If an
- //! initial state was provided, it is lifted to the given Monad and
- //! returned as-is. Otherwise, if the no-state version of the function
- //! was used, an error is triggered. When the stucture contains a single
- //! element and the no-state version of the function was used, that
- //! single element is lifted into the given Monad and returned as is.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a `Monad` `M`, a `Foldable` `F`, an initial state of tag `S`,
- //! and a function @f$ f : T \times S \to M(S) @f$, the signatures of
- //! `monadic_fold_right<M>` are
- //! \f[
- //! \mathtt{monadic\_fold\_right}_M :
- //! F(T) \times S \times (T \times S \to M(S)) \to M(S)
- //! \f]
- //!
- //! for the version with an initial state, and
- //! \f[
- //! \mathtt{monadic\_fold\_right}_M :
- //! F(T) \times (T \times T \to M(T)) \to M(T)
- //! \f]
- //!
- //! for the version without an initial state.
- //!
- //! @tparam M
- //! The Monad representing the monadic context in which the fold happens.
- //! The return type of `f` must be in that Monad.
- //!
- //! @param xs
- //! The structure to fold.
- //!
- //! @param state
- //! The initial value used for folding. If the structure is empty, this
- //! value is lifted in to the `M` Monad and then returned as-is.
- //!
- //! @param f
- //! A binary function called as `f(x, state)`, where `state` is the result
- //! accumulated so far and `x` is an element in the structure. The
- //! function must return its result inside the `M` Monad.
- //!
- //!
- //! Example
- //! -------
- //! @include example/monadic_fold_right.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename M>
- constexpr auto monadic_fold_right = [](auto&& xs[, auto&& state], auto&& f) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename = void>
- struct monadic_fold_right_impl : monadic_fold_right_impl<T, when<true>> { };
-
- template <typename M>
- struct monadic_fold_right_t;
-
- template <typename M>
- constexpr monadic_fold_right_t<M> monadic_fold_right{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_MONADIC_FOLD_RIGHT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/mult.hpp b/contrib/restricted/boost/boost/hana/fwd/mult.hpp
deleted file mode 100644
index d322071d9c..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/mult.hpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::mult`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_MULT_HPP
-#define BOOST_HANA_FWD_MULT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Associative operation of a `Ring`.
- //! @ingroup group-Ring
- //!
- //! @param x, y
- //! Two `Ring` elements to combine with the `Ring` binary operation.
- //!
- //!
- //! Cross-type version of the method
- //! --------------------------------
- //! The `mult` method is "overloaded" to handle distinct data types
- //! with certain properties. Specifically, `mult` is defined for
- //! _distinct_ data types `A` and `B` such that
- //! 1. `A` and `B` share a common data type `C`, as determined by the
- //! `common` metafunction
- //! 2. `A`, `B` and `C` are all `Ring`s when taken individually
- //! 3. `to<C> : A -> B` and `to<C> : B -> C` are `Ring`-embeddings, as
- //! determined by the `is_embedding` metafunction.
- //!
- //! The definition of `mult` for data types satisfying the above
- //! properties is obtained by setting
- //! @code
- //! mult(x, y) = mult(to<C>(x), to<C>(y))
- //! @endcode
- //!
- //!
- //! Example
- //! -------
- //! @include example/mult.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto mult = [](auto&& x, auto&& y) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename U, typename = void>
- struct mult_impl : mult_impl<T, U, when<true>> { };
-
- struct mult_t {
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) const;
- };
-
- constexpr mult_t mult{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_MULT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/negate.hpp b/contrib/restricted/boost/boost/hana/fwd/negate.hpp
deleted file mode 100644
index 6c4f70da8d..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/negate.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::negate`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_NEGATE_HPP
-#define BOOST_HANA_FWD_NEGATE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Return the inverse of an element of a group.
- //! @ingroup group-Group
- //!
- //!
- //! Example
- //! -------
- //! @include example/negate.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto negate = [](auto&& x) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename G, typename = void>
- struct negate_impl : negate_impl<G, when<true>> { };
-
- struct negate_t {
- template <typename X>
- constexpr decltype(auto) operator()(X&& x) const;
- };
-
- constexpr negate_t negate{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_NEGATE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/none.hpp b/contrib/restricted/boost/boost/hana/fwd/none.hpp
deleted file mode 100644
index d0d2da94a9..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/none.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::none`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_NONE_HPP
-#define BOOST_HANA_FWD_NONE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns whether all of the keys of the structure are false-valued.
- //! @ingroup group-Searchable
- //!
- //! The keys of the structure must be `Logical`s. If the structure is not
- //! finite, a true-valued key must appear at a finite "index" in order
- //! for this method to finish.
- //!
- //!
- //! Example
- //! -------
- //! @include example/none.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto none = [](auto&& xs) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct none_impl : none_impl<S, when<true>> { };
-
- struct none_t {
- template <typename Xs>
- constexpr auto operator()(Xs&& xs) const;
- };
-
- constexpr none_t none{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_NONE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/none_of.hpp b/contrib/restricted/boost/boost/hana/fwd/none_of.hpp
deleted file mode 100644
index 3e57cf1d65..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/none_of.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::none_of`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_NONE_OF_HPP
-#define BOOST_HANA_FWD_NONE_OF_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns whether none of the keys of the structure satisfy the
- //! `predicate`.
- //! @ingroup group-Searchable
- //!
- //! If the structure is not finite, `predicate` has to return a true-
- //! valued `Logical` after looking at a finite number of keys for this
- //! method to finish.
- //!
- //!
- //! @param xs
- //! The structure to search.
- //!
- //! @param predicate
- //! A function called as `predicate(k)`, where `k` is a key of the
- //! structure, and returning a `Logical`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/none_of.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto none_of = [](auto&& xs, auto&& predicate) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct none_of_impl : none_of_impl<S, when<true>> { };
-
- struct none_of_t {
- template <typename Xs, typename Pred>
- constexpr auto operator()(Xs&& xs, Pred&& pred) const;
- };
-
- constexpr none_of_t none_of{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_NONE_OF_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/not.hpp b/contrib/restricted/boost/boost/hana/fwd/not.hpp
deleted file mode 100644
index 08d19d2bd5..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/not.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::not_`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_NOT_HPP
-#define BOOST_HANA_FWD_NOT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Negates a `Logical`.
- //! @ingroup group-Logical
- //!
- //! This method returns a `Logical` with the same tag, but whose
- //! truth-value is negated. Specifically, `not_(x)` returns a false-valued
- //! `Logical` if `x` is a true-valued `Logical`, and a true-valued one
- //! otherwise.
- //!
- //!
- //! Example
- //! -------
- //! @include example/not.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto not_ = [](auto&& x) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename L, typename = void>
- struct not_impl : not_impl<L, when<true>> { };
-
- struct not_t {
- template <typename X>
- constexpr decltype(auto) operator()(X&& x) const;
- };
-
- constexpr not_t not_{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_NOT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/not_equal.hpp b/contrib/restricted/boost/boost/hana/fwd/not_equal.hpp
deleted file mode 100644
index 7063a3796c..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/not_equal.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::not_equal`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_NOT_EQUAL_HPP
-#define BOOST_HANA_FWD_NOT_EQUAL_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/nested_to_fwd.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns a `Logical` representing whether `x` is not equal to `y`.
- //! @ingroup group-Comparable
- //!
- //! The `not_equal` function can be called in two different ways. First,
- //! it can be called like a normal function:
- //! @code
- //! not_equal(x, y)
- //! @endcode
- //!
- //! However, it may also be partially applied to an argument by using
- //! `not_equal.to`:
- //! @code
- //! not_equal.to(x)(y) == not_equal(x, y)
- //! @endcode
- //!
- //! In other words, `not_equal.to(x)` is a function object that is
- //! equivalent to `partial(not_equal, x)`. This is provided to enhance
- //! the readability of some constructs, especially when using higher
- //! order algorithms.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a Logical `Bool` and two Comparables `A` and `B` that
- //! share a common embedding, the signature is
- //! @f$ \mathtt{not\_equal} : A \times B \to Bool @f$.
- //!
- //! @param x, y
- //! Two objects to compare for inequality.
- //!
- //!
- //! Example
- //! -------
- //! @include example/not_equal.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto not_equal = [](auto&& x, auto&& y) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename U, typename = void>
- struct not_equal_impl : not_equal_impl<T, U, when<true>> { };
-
- struct not_equal_t : detail::nested_to<not_equal_t> {
- template <typename X, typename Y>
- constexpr auto operator()(X&& x, Y&& y) const;
- };
-
- constexpr not_equal_t not_equal{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_NOT_EQUAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/one.hpp b/contrib/restricted/boost/boost/hana/fwd/one.hpp
deleted file mode 100644
index d2c67b7228..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/one.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::one`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ONE_HPP
-#define BOOST_HANA_FWD_ONE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Identity of the `Ring` multiplication.
- //! @ingroup group-Ring
- //!
- //! @tparam R
- //! The tag (must be a model of `Ring`) of the returned identity.
- //!
- //!
- //! Example
- //! -------
- //! @include example/one.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename R>
- constexpr auto one = []() -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename R, typename = void>
- struct one_impl : one_impl<R, when<true>> { };
-
- template <typename R>
- struct one_t;
-
- template <typename R>
- constexpr one_t<R> one{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ONE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/optional.hpp b/contrib/restricted/boost/boost/hana/fwd/optional.hpp
deleted file mode 100644
index 28bb68e8af..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/optional.hpp
+++ /dev/null
@@ -1,510 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::optional`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_OPTIONAL_HPP
-#define BOOST_HANA_FWD_OPTIONAL_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/operators/adl.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-datatypes
- //! Optional value whose optional-ness is known at compile-time.
- //!
- //! An `optional` either contains a value (represented as `just(x)`), or
- //! it is empty (represented as `nothing`). In essence, `hana::optional`
- //! is pretty much like a `boost::optional` or the upcoming `std::optional`,
- //! except for the fact that whether a `hana::optional` is empty or not is
- //! known at compile-time. This can be particularly useful for returning
- //! from a function that might fail, but whose reason for failing is not
- //! important. Of course, whether the function will fail has to be known
- //! at compile-time.
- //!
- //! This is really an important difference between `hana::optional` and
- //! `std::optional`. Unlike `std::optional<T>{}` and `std::optional<T>{x}`
- //! who share the same type (`std::optional<T>`), `hana::just(x)` and
- //! `hana::nothing` do not share the same type, since the state of the
- //! optional has to be known at compile-time. Hence, whether a `hana::just`
- //! or a `hana::nothing` will be returned from a function has to be known
- //! at compile-time for the return type of that function to be computable
- //! by the compiler. This makes `hana::optional` well suited for static
- //! metaprogramming tasks, but very poor for anything dynamic.
- //!
- //!
- //! Interoperation with `type`s
- //! ---------------------------
- //! When a `just` contains an object of type `T` which is a `type`,
- //! it has a nested `::%type` alias equivalent to `T::%type`. `nothing`,
- //! however, never has a nested `::%type` alias. If `t` is a `type`,
- //! this allows `decltype(just(t))` to be seen as a nullary metafunction
- //! equivalent to `decltype(t)`. Along with the `sfinae` function,
- //! this allows `hana::optional` to interact seamlessly with
- //! SFINAE-friendly metafunctions.
- //! Example:
- //! @include example/optional/sfinae_friendly_metafunctions.cpp
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! 1. `Comparable`\n
- //! Two `optional`s are equal if and only if they are both empty or they
- //! both contain a value and those values are equal.
- //! @include example/optional/comparable.cpp
- //!
- //! 2. `Orderable`\n
- //! Optional values can be ordered by considering the value they are
- //! holding, if any. To handle the case of an empty optional value, we
- //! arbitrarily set `nothing` as being less than any other `just`. Hence,
- //! @code
- //! just(x) < just(y) if and only if x < y
- //! nothing < just(anything)
- //! @endcode
- //! Example:
- //! @include example/optional/orderable.cpp
- //!
- //! 3. `Functor`\n
- //! An optional value can be seen as a list containing either one element
- //! (`just(x)`) or no elements at all (`nothing`). As such, mapping
- //! a function over an optional value is equivalent to applying it to
- //! its value if there is one, and to `nothing` otherwise:
- //! @code
- //! transform(just(x), f) == just(f(x))
- //! transform(nothing, f) == nothing
- //! @endcode
- //! Example:
- //! @include example/optional/functor.cpp
- //!
- //! 4. `Applicative`\n
- //! First, a value can be made optional with `lift<optional_tag>`, which
- //! is equivalent to `just`. Second, one can feed an optional value to an
- //! optional function with `ap`, which will return `just(f(x))` if there
- //! is both a function _and_ a value, and `nothing` otherwise:
- //! @code
- //! ap(just(f), just(x)) == just(f(x))
- //! ap(nothing, just(x)) == nothing
- //! ap(just(f), nothing) == nothing
- //! ap(nothing, nothing) == nothing
- //! @endcode
- //! A simple example:
- //! @include example/optional/applicative.cpp
- //! A more complex example:
- //! @include example/optional/applicative.complex.cpp
- //!
- //! 5. `Monad`\n
- //! The `Monad` model makes it easy to compose actions that might fail.
- //! One can feed an optional value if there is one into a function with
- //! `chain`, which will return `nothing` if there is no value. Finally,
- //! optional-optional values can have their redundant level of optionality
- //! removed with `flatten`. Also note that the `|` operator can be used in
- //! place of the `chain` function.
- //! Example:
- //! @include example/optional/monad.cpp
- //!
- //! 6. `MonadPlus`\n
- //! The `MonadPlus` model allows choosing the first valid value out of
- //! two optional values with `concat`. If both optional values are
- //! `nothing`s, `concat` will return `nothing`.
- //! Example:
- //! @include example/optional/monad_plus.cpp
- //!
- //! 7. `Foldable`\n
- //! Folding an optional value is equivalent to folding a list containing
- //! either no elements (for `nothing`) or `x` (for `just(x)`).
- //! Example:
- //! @include example/optional/foldable.cpp
- //!
- //! 8. `Searchable`\n
- //! Searching an optional value is equivalent to searching a list
- //! containing `x` for `just(x)` and an empty list for `nothing`.
- //! Example:
- //! @include example/optional/searchable.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename ...T>
- struct optional {
- // 5.3.1, Constructors
-
- //! Default-construct an `optional`. Only exists if the optional
- //! contains a value, and if that value is DefaultConstructible.
- constexpr optional() = default;
-
- //! Copy-construct an `optional`.
- //! An empty optional may only be copy-constructed from another
- //! empty `optional`, and an `optional` with a value may only be
- //! copy-constructed from another `optional` with a value.
- //! Furthermore, this constructor only exists if the value
- //! held in the `optional` is CopyConstructible.
- optional(optional const&) = default;
-
- //! Move-construct an `optional`.
- //! An empty optional may only be move-constructed from another
- //! empty `optional`, and an `optional` with a value may only be
- //! move-constructed from another `optional` with a value.
- //! Furthermore, this constructor only exists if the value
- //! held in the `optional` is MoveConstructible.
- optional(optional&&) = default;
-
- //! Construct an `optional` holding a value of type `T` from another
- //! object of type `T`. The value is copy-constructed.
- constexpr optional(T const& t)
- : value_(t)
- { }
-
- //! Construct an `optional` holding a value of type `T` from another
- //! object of type `T`. The value is move-constructed.
- constexpr optional(T&& t)
- : value_(static_cast<T&&>(t))
- { }
-
- // 5.3.3, Assignment
-
- //! Copy-assign an `optional`.
- //! An empty optional may only be copy-assigned from another empty
- //! `optional`, and an `optional` with a value may only be copy-assigned
- //! from another `optional` with a value. Furthermore, this assignment
- //! operator only exists if the value held in the `optional` is
- //! CopyAssignable.
- constexpr optional& operator=(optional const&) = default;
-
- //! Move-assign an `optional`.
- //! An empty optional may only be move-assigned from another empty
- //! `optional`, and an `optional` with a value may only be move-assigned
- //! from another `optional` with a value. Furthermore, this assignment
- //! operator only exists if the value held in the `optional` is
- //! MoveAssignable.
- constexpr optional& operator=(optional&&) = default;
-
- // 5.3.5, Observers
-
- //! Returns a pointer to the contained value, or a `nullptr` if the
- //! `optional` is empty.
- //!
- //!
- //! @note Overloads of this method are provided for both the `const`
- //! and the non-`const` cases.
- //!
- //!
- //! Example
- //! -------
- //! @include example/optional/value.cpp
- constexpr T* operator->();
-
- //! Extract the content of an `optional`, or fail at compile-time.
- //!
- //! If `*this` contains a value, that value is returned. Otherwise,
- //! a static assertion is triggered.
- //!
- //! @note
- //! Overloads of this method are provided for the cases where `*this`
- //! is a reference, a rvalue-reference and their `const` counterparts.
- //!
- //!
- //! Example
- //! -------
- //! @include example/optional/value.cpp
- constexpr T& value();
-
- //! Equivalent to `value()`, provided for convenience.
- //!
- //! @note
- //! Overloads of this method are provided for the cases where `*this`
- //! is a reference, a rvalue-reference and their `const` counterparts.
- //!
- //!
- //! Example
- //! -------
- //! @include example/optional/value.cpp
- constexpr T& operator*();
-
- //! Return the contents of an `optional`, with a fallback result.
- //!
- //! If `*this` contains a value, that value is returned. Otherwise,
- //! the default value provided is returned.
- //!
- //! @note
- //! Overloads of this method are provided for the cases where `*this`
- //! is a reference, a rvalue-reference and their `const` counterparts.
- //!
- //!
- //! @param default_
- //! The default value to return if `*this` does not contain a value.
- //!
- //!
- //! Example
- //! -------
- //! @include example/optional/value_or.cpp
- template <typename U>
- constexpr decltype(auto) value_or(U&& default_);
-
- //! Equivalent to `hana::chain`.
- template <typename ...T, typename F>
- friend constexpr auto operator|(optional<T...>, F);
-
- //! Equivalent to `hana::equal`
- template <typename X, typename Y>
- friend constexpr auto operator==(X&& x, Y&& y);
-
- //! Equivalent to `hana::not_equal`
- template <typename X, typename Y>
- friend constexpr auto operator!=(X&& x, Y&& y);
-
- //! Equivalent to `hana::less`
- template <typename X, typename Y>
- friend constexpr auto operator<(X&& x, Y&& y);
-
- //! Equivalent to `hana::greater`
- template <typename X, typename Y>
- friend constexpr auto operator>(X&& x, Y&& y);
-
- //! Equivalent to `hana::less_equal`
- template <typename X, typename Y>
- friend constexpr auto operator<=(X&& x, Y&& y);
-
- //! Equivalent to `hana::greater_equal`
- template <typename X, typename Y>
- friend constexpr auto operator>=(X&& x, Y&& y);
- };
-#else
- template <typename ...T>
- struct optional;
-#endif
-
- //! Tag representing a `hana::optional`.
- //! @relates hana::optional
- struct optional_tag { };
-
- //! Create an optional value.
- //! @relates hana::optional
- //!
- //! Specifically, `make<optional_tag>()` is equivalent to `nothing`, and
- //! `make<optional_tag>(x)` is equivalent to `just(x)`. This is provided
- //! for consistency with the other `make<...>` functions.
- //!
- //!
- //! Example
- //! -------
- //! @include example/optional/make.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <>
- constexpr auto make<optional_tag> = []([auto&& x]) {
- return optional<std::decay<decltype(x)>::type>{forwarded(x)};
- };
-#endif
-
- //! Alias to `make<optional_tag>`; provided for convenience.
- //! @relates hana::optional
- //!
- //!
- //! Example
- //! -------
- //! @include example/optional/make.cpp
- constexpr auto make_optional = make<optional_tag>;
-
- //! Create an optional value containing `x`.
- //! @relates hana::optional
- //!
- //!
- //! Example
- //! -------
- //! @include example/optional/just.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto just = [](auto&& x) {
- return optional<std::decay<decltype(x)>::type>{forwarded(x)};
- };
-#else
- struct make_just_t {
- template <typename T>
- constexpr auto operator()(T&&) const;
- };
-
- constexpr make_just_t just{};
-#endif
-
- //! An empty optional value.
- //! @relates hana::optional
- //!
- //!
- //! Example
- //! -------
- //! @include example/optional/nothing.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr optional<> nothing{};
-#else
- template <>
- struct optional<> : detail::operators::adl<optional<>> {
- // 5.3.1, Constructors
- constexpr optional() = default;
- constexpr optional(optional const&) = default;
- constexpr optional(optional&&) = default;
-
- // 5.3.3, Assignment
- constexpr optional& operator=(optional const&) = default;
- constexpr optional& operator=(optional&&) = default;
-
- // 5.3.5, Observers
- constexpr decltype(nullptr) operator->() const { return nullptr; }
-
- template <typename ...dummy>
- constexpr auto value() const;
-
- template <typename ...dummy>
- constexpr auto operator*() const;
-
- template <typename U>
- constexpr U&& value_or(U&& u) const;
- };
-
- constexpr optional<> nothing{};
-#endif
-
- //! Apply a function to the contents of an optional, with a fallback
- //! result.
- //! @relates hana::optional
- //!
- //! Specifically, `maybe` takes a default value, a function and an
- //! optional value. If the optional value is `nothing`, the default
- //! value is returned. Otherwise, the function is applied to the
- //! content of the `just`.
- //!
- //!
- //! @param default_
- //! A default value returned if `m` is `nothing`.
- //!
- //! @param f
- //! A function called as `f(x)` if and only if `m` is an optional value
- //! of the form `just(x)`. In that case, the result returend by `maybe`
- //! is the result of `f`.
- //!
- //! @param m
- //! An optional value.
- //!
- //!
- //! Example
- //! -------
- //! @include example/optional/maybe.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto maybe = [](auto&& default_, auto&& f, auto&& m) -> decltype(auto) {
- if (m is a just(x)) {
- return forwarded(f)(forwarded(x));
- else
- return forwarded(default_);
- }
- };
-#else
- struct maybe_t {
- template <typename Def, typename F, typename T>
- constexpr decltype(auto) operator()(Def&&, F&& f, optional<T> const& m) const
- { return static_cast<F&&>(f)(m.value_); }
-
- template <typename Def, typename F, typename T>
- constexpr decltype(auto) operator()(Def&&, F&& f, optional<T>& m) const
- { return static_cast<F&&>(f)(m.value_); }
-
- template <typename Def, typename F, typename T>
- constexpr decltype(auto) operator()(Def&&, F&& f, optional<T>&& m) const
- { return static_cast<F&&>(f)(static_cast<optional<T>&&>(m).value_); }
-
- template <typename Def, typename F>
- constexpr Def operator()(Def&& def, F&&, optional<> const&) const
- { return static_cast<Def&&>(def); }
- };
-
- constexpr maybe_t maybe{};
-#endif
-
- //! Calls a function if the call expression is well-formed.
- //! @relates hana::optional
- //!
- //! Given a function `f`, `sfinae` returns a new function applying `f`
- //! to its arguments and returning `just` the result if the call is
- //! well-formed, and `nothing` otherwise. In other words, `sfinae(f)(x...)`
- //! is `just(f(x...))` if that expression is well-formed, and `nothing`
- //! otherwise. Note, however, that it is possible for an expression
- //! `f(x...)` to be well-formed as far as SFINAE is concerned, but
- //! trying to actually compile `f(x...)` still fails. In this case,
- //! `sfinae` won't be able to detect it and a hard failure is likely
- //! to happen.
- //!
- //!
- //! @note
- //! The function given to `sfinae` must not return `void`, since
- //! `just(void)` does not make sense. A compilation error is
- //! triggered if the function returns void.
- //!
- //!
- //! Example
- //! -------
- //! @include example/optional/sfinae.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- auto sfinae = [](auto&& f) {
- return [perfect-capture](auto&& ...x) {
- if (decltype(forwarded(f)(forwarded(x)...)) is well-formed)
- return just(forwarded(f)(forwarded(x)...));
- else
- return nothing;
- };
- };
-#else
- struct sfinae_t {
- template <typename F>
- constexpr decltype(auto) operator()(F&& f) const;
- };
-
- constexpr sfinae_t sfinae{};
-#endif
-
- //! Return whether an `optional` contains a value.
- //! @relates hana::optional
- //!
- //! Specifically, returns a compile-time true-valued `Logical` if `m` is
- //! of the form `just(x)` for some `x`, and a false-valued one otherwise.
- //!
- //!
- //! Example
- //! -------
- //! @include example/optional/is_just.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto is_just = [](auto const& m) {
- return m is a just(x);
- };
-#else
- struct is_just_t {
- template <typename ...T>
- constexpr auto operator()(optional<T...> const&) const;
- };
-
- constexpr is_just_t is_just{};
-#endif
-
- //! Return whether an `optional` is empty.
- //! @relates hana::optional
- //!
- //! Specifically, returns a compile-time true-valued `Logical` if `m` is
- //! a `nothing`, and a false-valued one otherwise.
- //!
- //!
- //! Example
- //! -------
- //! @include example/optional/is_nothing.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto is_nothing = [](auto const& m) {
- return m is a nothing;
- };
-#else
- struct is_nothing_t {
- template <typename ...T>
- constexpr auto operator()(optional<T...> const&) const;
- };
-
- constexpr is_nothing_t is_nothing{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_OPTIONAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/or.hpp b/contrib/restricted/boost/boost/hana/fwd/or.hpp
deleted file mode 100644
index c14efc8e34..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/or.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::or_`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_OR_HPP
-#define BOOST_HANA_FWD_OR_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Return whether any of the arguments is true-valued.
- //! @ingroup group-Logical
- //!
- //! `or_` can be called with one argument or more. When called with
- //! two arguments, `or_` uses tag-dispatching to find the right
- //! implementation. Otherwise,
- //! @code
- //! or_(x) == x
- //! or_(x, y, ...z) == or_(or_(x, y), z...)
- //! @endcode
- //!
- //!
- //! Example
- //! -------
- //! @include example/or.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto or_ = [](auto&& x, auto&& ...y) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename L, typename = void>
- struct or_impl : or_impl<L, when<true>> { };
-
- struct or_t {
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) const;
-
- template <typename X, typename ...Y>
- constexpr decltype(auto) operator()(X&& x, Y&& ...y) const;
- };
-
- constexpr or_t or_{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_OR_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/ordering.hpp b/contrib/restricted/boost/boost/hana/fwd/ordering.hpp
deleted file mode 100644
index 78c9e2c3b8..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/ordering.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::ordering`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ORDERING_HPP
-#define BOOST_HANA_FWD_ORDERING_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns a function performing `less` after applying a transformation
- //! to both arguments.
- //! @ingroup group-Orderable
- //!
- //! `ordering` creates a total order based on the result of applying a
- //! function to some objects, which is especially useful in conjunction
- //! with algorithms that accept a custom predicate that must represent
- //! a total order.
- //!
- //! Specifically, `ordering` is such that
- //! @code
- //! ordering(f) == less ^on^ f
- //! @endcode
- //! or, equivalently,
- //! @code
- //! ordering(f)(x, y) == less(f(x), f(y))
- //! @endcode
- //!
- //! @note
- //! This is not a tag-dispatched method (hence it can't be customized),
- //! but just a convenience function provided with the `Orderable` concept.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a Logical `Bool` and an Orderable `B`, the signature is
- //! @f$ \mathrm{ordering} : (A \to B) \to (A \times A \to Bool) @f$.
- //!
- //!
- //! Example
- //! -------
- //! @include example/ordering.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto ordering = [](auto&& f) {
- return [perfect-capture](auto&& x, auto&& y) -> decltype(auto) {
- return less(f(forwarded(x)), f(forwarded(y)));
- };
- };
-#else
- struct ordering_t {
- template <typename F>
- constexpr auto operator()(F&& f) const;
- };
-
- constexpr ordering_t ordering{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ORDERING_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/pair.hpp b/contrib/restricted/boost/boost/hana/fwd/pair.hpp
deleted file mode 100644
index 897e87ad12..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/pair.hpp
+++ /dev/null
@@ -1,153 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::pair`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_PAIR_HPP
-#define BOOST_HANA_FWD_PAIR_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-datatypes
- //! Generic container for two elements.
- //!
- //! `hana::pair` is conceptually the same as `std::pair`. However,
- //! `hana::pair` automatically compresses the storage of empty types,
- //! and as a result it does not have the `.first` and `.second` members.
- //! Instead, one must use the `hana::first` and `hana::second` free
- //! functions to access the elements of a pair.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! 1. `Comparable`\n
- //! Two pairs `(x, y)` and `(x', y')` are equal if and only if both
- //! `x == x'` and `y == y'`.
- //! @include example/pair/comparable.cpp
- //!
- //! 2. `Orderable`\n
- //! Pairs are ordered as-if they were 2-element tuples, using a
- //! lexicographical ordering.
- //! @include example/pair/orderable.cpp
- //!
- //! 3. `Foldable`\n
- //! Folding a pair is equivalent to folding a 2-element tuple. In other
- //! words:
- //! @code
- //! fold_left(make_pair(x, y), s, f) == f(f(s, x), y)
- //! fold_right(make_pair(x, y), s, f) == f(x, f(y, s))
- //! @endcode
- //! Example:
- //! @include example/pair/foldable.cpp
- //!
- //! 4. `Product`\n
- //! The model of `Product` is the simplest one possible; the first element
- //! of a pair `(x, y)` is `x`, and its second element is `y`.
- //! @include example/pair/product.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename First, typename Second>
- struct pair {
- //! Default constructs the `pair`. Only exists when both elements
- //! of the pair are default constructible.
- constexpr pair();
-
- //! Initialize each element of the pair with the corresponding element.
- //! Only exists when both elements of the pair are copy-constructible.
- constexpr pair(First const& first, Second const& second);
-
- //! Initialize both elements of the pair by perfect-forwarding the
- //! corresponding argument. Only exists when both arguments are
- //! implicitly-convertible to the corresponding element of the pair.
- template <typename T, typename U>
- constexpr pair(T&& t, U&& u);
-
- //! Copy-initialize a pair from another pair. Only exists when both
- //! elements of the source pair are implicitly convertible to the
- //! corresponding element of the constructed pair.
- template <typename T, typename U>
- constexpr pair(pair<T, U> const& other);
-
- //! Move-initialize a pair from another pair. Only exists when both
- //! elements of the source pair are implicitly convertible to the
- //! corresponding element of the constructed pair.
- template <typename T, typename U>
- constexpr pair(pair<T, U>&& other);
-
- //! Assign a pair to another pair. Only exists when both elements
- //! of the destination pair are assignable from the corresponding
- //! element in the source pair.
- template <typename T, typename U>
- constexpr pair& operator=(pair<T, U> const& other);
-
- //! Move-assign a pair to another pair. Only exists when both elements
- //! of the destination pair are move-assignable from the corresponding
- //! element in the source pair.
- template <typename T, typename U>
- constexpr pair& operator=(pair<T, U>&& other);
-
- //! Equivalent to `hana::equal`
- template <typename X, typename Y>
- friend constexpr auto operator==(X&& x, Y&& y);
-
- //! Equivalent to `hana::not_equal`
- template <typename X, typename Y>
- friend constexpr auto operator!=(X&& x, Y&& y);
-
- //! Equivalent to `hana::less`
- template <typename X, typename Y>
- friend constexpr auto operator<(X&& x, Y&& y);
-
- //! Equivalent to `hana::greater`
- template <typename X, typename Y>
- friend constexpr auto operator>(X&& x, Y&& y);
-
- //! Equivalent to `hana::less_equal`
- template <typename X, typename Y>
- friend constexpr auto operator<=(X&& x, Y&& y);
-
- //! Equivalent to `hana::greater_equal`
- template <typename X, typename Y>
- friend constexpr auto operator>=(X&& x, Y&& y);
- };
-#else
- template <typename First, typename Second>
- struct pair;
-#endif
-
- //! Tag representing `hana::pair`.
- //! @relates hana::pair
- struct pair_tag { };
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- //! Creates a `hana::pair` with the given elements.
- //! @relates hana::pair
- //!
- //!
- //! Example
- //! -------
- //! @include example/pair/make.cpp
- template <>
- constexpr auto make<pair_tag> = [](auto&& first, auto&& second)
- -> hana::pair<std::decay_t<decltype(first)>, std::decay_t<decltype(second)>>
- {
- return {forwarded(first), forwarded(second)};
- };
-#endif
-
- //! Alias to `make<pair_tag>`; provided for convenience.
- //! @relates hana::pair
- //!
- //! Example
- //! -------
- //! @include example/pair/make.cpp
- constexpr auto make_pair = make<pair_tag>;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_PAIR_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/partition.hpp b/contrib/restricted/boost/boost/hana/fwd/partition.hpp
deleted file mode 100644
index b7a7d3a2ae..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/partition.hpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::partition`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_PARTITION_HPP
-#define BOOST_HANA_FWD_PARTITION_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/nested_by_fwd.hpp>
-
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Partition a sequence based on a `predicate`.
- //! @ingroup group-Sequence
- //!
- //! Specifically, returns an unspecified `Product` whose first element is
- //! a sequence of the elements satisfying the predicate, and whose second
- //! element is a sequence of the elements that do not satisfy the predicate.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a Sequence `S(T)`, an `IntegralConstant` `Bool` holding a value
- //! of type `bool`, and a predicate \f$ T \to Bool \f$, `partition` has
- //! the following signature:
- //! \f[
- //! \mathtt{partition} : S(T) \times (T \to Bool) \to S(T) \times S(T)
- //! \f]
- //!
- //! @param xs
- //! The sequence to be partitioned.
- //!
- //! @param predicate
- //! A function called as `predicate(x)` for each element `x` in the
- //! sequence, and returning whether `x` should be added to the sequence
- //! in the first component or in the second component of the resulting
- //! pair. In the current version of the library, `predicate` must return
- //! an `IntegralConstant` holding a value convertible to `bool`.
- //!
- //!
- //! Syntactic sugar (`partition.by`)
- //! --------------------------------
- //! `partition` can be called in an alternate way, which provides a nice
- //! syntax in some cases where the predicate is short:
- //! @code
- //! partition.by(predicate, xs) == partition(xs, predicate)
- //! partition.by(predicate) == partition(-, predicate)
- //! @endcode
- //!
- //! where `partition(-, predicate)` denotes the partial application of
- //! `partition` to `predicate`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/partition.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto partition = [](auto&& xs, auto&& predicate) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct partition_impl : partition_impl<S, when<true>> { };
-
- struct partition_t : detail::nested_by<partition_t> {
- template <typename Xs, typename Pred>
- constexpr auto operator()(Xs&& xs, Pred&& pred) const;
- };
-
- constexpr partition_t partition{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_PARTITION_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/permutations.hpp b/contrib/restricted/boost/boost/hana/fwd/permutations.hpp
deleted file mode 100644
index 7aeb27b2e8..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/permutations.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::permutations`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_PERMUTATIONS_HPP
-#define BOOST_HANA_FWD_PERMUTATIONS_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Return a sequence of all the permutations of the given sequence.
- //! @ingroup group-Sequence
- //!
- //! Specifically, `permutations(xs)` is a sequence whose elements are
- //! permutations of the original sequence `xs`. The permutations are not
- //! guaranteed to be in any specific order. Also note that the number
- //! of permutations grows very rapidly as the length of the original
- //! sequence increases. The growth rate is `O(length(xs)!)`; with a
- //! sequence `xs` of length only 8, `permutations(xs)` contains over
- //! 40 000 elements!
- //!
- //!
- //! Example
- //! -------
- //! @include example/permutations.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto permutations = [](auto&& xs) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct permutations_impl : permutations_impl<S, when<true>> { };
-
- struct permutations_t {
- template <typename Xs>
- constexpr auto operator()(Xs&& xs) const;
- };
-
- constexpr permutations_t permutations{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_PERMUTATIONS_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/plus.hpp b/contrib/restricted/boost/boost/hana/fwd/plus.hpp
deleted file mode 100644
index 6d6cac82e2..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/plus.hpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::plus`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_PLUS_HPP
-#define BOOST_HANA_FWD_PLUS_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Associative binary operation on a `Monoid`.
- //! @ingroup group-Monoid
- //!
- //! @param x, y
- //! Two objects to combine with the `Monoid`'s binary operation.
- //!
- //!
- //! Cross-type version of the method
- //! --------------------------------
- //! The `plus` method is "overloaded" to handle distinct data types
- //! with certain properties. Specifically, `plus` is defined for
- //! _distinct_ data types `A` and `B` such that
- //! 1. `A` and `B` share a common data type `C`, as determined by the
- //! `common` metafunction
- //! 2. `A`, `B` and `C` are all `Monoid`s when taken individually
- //! 3. `to<C> : A -> B` and `to<C> : B -> C` are `Monoid`-embeddings, as
- //! determined by the `is_embedding` metafunction.
- //!
- //! The definition of `plus` for data types satisfying the above
- //! properties is obtained by setting
- //! @code
- //! plus(x, y) = plus(to<C>(x), to<C>(y))
- //! @endcode
- //!
- //!
- //! Example
- //! -------
- //! @include example/plus.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto plus = [](auto&& x, auto&& y) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename U, typename = void>
- struct plus_impl : plus_impl<T, U, when<true>> { };
-
- struct plus_t {
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) const;
- };
-
- constexpr plus_t plus{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_PLUS_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/power.hpp b/contrib/restricted/boost/boost/hana/fwd/power.hpp
deleted file mode 100644
index c94b841194..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/power.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::power`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_POWER_HPP
-#define BOOST_HANA_FWD_POWER_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Elevate a ring element to its `n`th power.
- //! @ingroup group-Ring
- //!
- //! Specifically, `power(x, n)`, is equivalent to multiplying `x` with
- //! itself `n` times using the Ring's multiplication. If the power is
- //! equal to `zero`, the Ring's identity (`one`) is returned.
- //!
- //! @param x
- //! A `Ring` element that is elevated to its `n`th power.
- //!
- //! @param n
- //! A non-negative `IntegralConstant` representing the power to which `x`
- //! is elevated.
- //!
- //!
- //! @note
- //! Only the tag of `x` is used for tag-dispatching.
- //!
- //! Example
- //! -------
- //! @include example/power.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto power = [](auto&& x, auto const& n) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename R, typename = void>
- struct power_impl : power_impl<R, when<true>> { };
-
- struct power_t {
- template <typename X, typename N>
- constexpr decltype(auto) operator()(X&& x, N const& n) const;
- };
-
- constexpr power_t power{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_POWER_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/prefix.hpp b/contrib/restricted/boost/boost/hana/fwd/prefix.hpp
deleted file mode 100644
index 78592e11f2..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/prefix.hpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::prefix`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_PREFIX_HPP
-#define BOOST_HANA_FWD_PREFIX_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Inserts a value before each element of a monadic structure.
- //! @ingroup group-MonadPlus
- //!
- //! Given a monadic structure `xs` and a value `z` called the prefix,
- //! `prefix` returns a new monadic structure. `prefix` satisfies
- //! @code
- //! prefix(xs, z) == flatten(transform(xs, [](auto x) {
- //! return concat(lift<M>(z), lift<M>(x));
- //! }))
- //! @endcode
- //!
- //! For sequences, this simply corresponds to inserting the prefix before
- //! each element of the sequence. For example, given a sequence
- //! `[x1, ..., xn]`, `prefix` will return
- //! @code
- //! [z, x1, z, x2, ..., z, xn]
- //! @endcode
- //! As explained above, this can be generalized to other MonadPlus models,
- //! with various levels of interest.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a MonadPlus `M`, the signature is
- //! @f$ \mathrm{prefix} : M(T) \times T \to M(T) @f$.
- //!
- //! @param xs
- //! A monadic structure.
- //!
- //! @param pref
- //! A value (the prefix) to insert before each element of a monadic
- //! structure.
- //!
- //!
- //! Example
- //! -------
- //! @include example/prefix.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto prefix = [](auto&& xs, auto&& pref) {
- return tag-dispatched;
- };
-#else
- template <typename M, typename = void>
- struct prefix_impl : prefix_impl<M, when<true>> { };
-
- struct prefix_t {
- template <typename Xs, typename Pref>
- constexpr auto operator()(Xs&& xs, Pref&& pref) const;
- };
-
- constexpr prefix_t prefix{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_PREFIX_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/prepend.hpp b/contrib/restricted/boost/boost/hana/fwd/prepend.hpp
deleted file mode 100644
index 8bb44ea2db..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/prepend.hpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::prepend`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_PREPEND_HPP
-#define BOOST_HANA_FWD_PREPEND_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Prepend an element to a monadic structure.
- //! @ingroup group-MonadPlus
- //!
- //! Given a monadic structure `xs` and an element `x`, `prepend` returns
- //! a new monadic structure which is the result of lifting `x` into the
- //! monadic structure and then combining that (to the left) with `xs`.
- //! In other words,
- //! @code
- //! prepend(xs, x) == concat(lift<Xs>(x), xs)
- //! @endcode
- //!
- //! For sequences, this has the intuitive behavior of simply prepending
- //! an element to the beginning of the sequence, hence the name.
- //!
- //! > #### Rationale for not calling this `push_front`
- //! > While `push_front` is the de-facto name used in the standard library,
- //! > it also strongly suggests mutation of the underlying sequence, which
- //! > is not the case here. The author also finds that `push_front`
- //! > suggests too strongly the sole interpretation of putting an
- //! > element to the front of a sequence, whereas `prepend` is slightly
- //! > more nuanced and bears its name better for e.g. `hana::optional`.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a MonadPlus `M`, the signature is
- //! @f$ \mathtt{prepend} : M(T) \times T \to M(T) @f$.
- //!
- //! @param xs
- //! A monadic structure that will be combined to the right of the element.
- //!
- //! @param x
- //! An element to combine to the left of the monadic structure.
- //!
- //!
- //! Example
- //! -------
- //! @include example/prepend.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto prepend = [](auto&& xs, auto&& x) {
- return tag-dispatched;
- };
-#else
- template <typename M, typename = void>
- struct prepend_impl : prepend_impl<M, when<true>> { };
-
- struct prepend_t {
- template <typename Xs, typename X>
- constexpr auto operator()(Xs&& xs, X&& x) const;
- };
-
- constexpr prepend_t prepend{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_PREPEND_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/product.hpp b/contrib/restricted/boost/boost/hana/fwd/product.hpp
deleted file mode 100644
index 96bbd77c4e..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/product.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::product`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_PRODUCT_HPP
-#define BOOST_HANA_FWD_PRODUCT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/fwd/integral_constant.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Compute the product of the numbers of a structure.
- //! @ingroup group-Foldable
- //!
- //! More generally, `product` will take any foldable structure containing
- //! objects forming a Ring and reduce them using the Ring's binary
- //! operation. The initial state for folding is the identity of the
- //! Ring's operation. It is sometimes necessary to specify the Ring to
- //! use; this is possible by using `product<R>`. If no Ring is specified,
- //! the structure will use the Ring formed by the elements it contains
- //! (if it knows it), or `integral_constant_tag<int>` otherwise.
- //! Hence,
- //! @code
- //! product<R>(xs) = fold_left(xs, one<R or inferred Ring>(), mult)
- //! product<> = product<integral_constant_tag<int>>
- //! @endcode
- //!
- //! For numbers, this will just compute the product of the numbers in the
- //! `xs` structure.
- //!
- //! @note
- //! The elements of the structure are not actually required to be in the
- //! same Ring, but it must be possible to perform `mult` on any two
- //! adjacent elements of the structure, which requires each pair of
- //! adjacent element to at least have a common Ring embedding. The
- //! meaning of "adjacent" as used here is that two elements of the
- //! structure `x` and `y` are adjacent if and only if they are adjacent
- //! in the linearization of that structure, as documented by the Iterable
- //! concept.
- //!
- //! @note
- //! See the documentation for `sum` to understand why the Ring must
- //! sometimes be specified explicitly.
- //!
- //!
- //! Example
- //! -------
- //! @include example/product.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto product = see documentation;
-#else
- template <typename T, typename = void>
- struct product_impl : product_impl<T, when<true>> { };
-
- template <typename R>
- struct product_t;
-
- template <typename R = integral_constant_tag<int>>
- constexpr product_t<R> product{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_PRODUCT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/range.hpp b/contrib/restricted/boost/boost/hana/fwd/range.hpp
deleted file mode 100644
index 82d0f75232..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/range.hpp
+++ /dev/null
@@ -1,149 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::range`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_RANGE_HPP
-#define BOOST_HANA_FWD_RANGE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/integral_constant.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- //! @ingroup group-datatypes
- //! Compile-time half-open interval of `hana::integral_constant`s.
- //!
- //! A `range` represents a half-open interval of the form `[from, to)`
- //! containing `hana::integral_constant`s of a given type. The `[from, to)`
- //! notation represents the values starting at `from` (inclusively) up
- //! to but excluding `from`. In other words, it is a bit like the list
- //! `from, from+1, ..., to-1`.
- //!
- //! In particular, note that the bounds of the range can be any
- //! `hana::integral_constant`s (negative numbers are allowed) and the
- //! range does not have to start at zero. The only requirement is that
- //! `from <= to`.
- //!
- //! @note
- //! The representation of `hana::range` is implementation defined. In
- //! particular, one should not take for granted the number and types
- //! of template parameters. The proper way to create a `hana::range`
- //! is to use `hana::range_c` or `hana::make_range`.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! 1. `Comparable`\n
- //! Two ranges are equal if and only if they are both empty or they both
- //! span the same interval.
- //! @include example/range/comparable.cpp
- //!
- //! 2. `Foldable`\n
- //! Folding a `range` is equivalent to folding a list of the
- //! `integral_constant`s in the interval it spans.
- //! @include example/range/foldable.cpp
- //!
- //! 3. `Iterable`\n
- //! Iterating over a `range` is equivalent to iterating over a list of
- //! the values it spans. In other words, iterating over the range
- //! `[from, to)` is equivalent to iterating over a list containing
- //! `from, from+1, from+2, ..., to-1`. Also note that `operator[]` can
- //! be used in place of the `at` function.
- //! @include example/range/iterable.cpp
- //!
- //! 4. `Searchable`\n
- //! Searching a `range` is equivalent to searching a list of the values
- //! in the range `[from, to)`, but it is much more compile-time efficient.
- //! @include example/range/searchable.cpp
- template <typename T, T from, T to>
- struct range {
- //! Equivalent to `hana::equal`
- template <typename X, typename Y>
- friend constexpr auto operator==(X&& x, Y&& y);
-
- //! Equivalent to `hana::not_equal`
- template <typename X, typename Y>
- friend constexpr auto operator!=(X&& x, Y&& y);
-
- //! Equivalent to `hana::at`
- template <typename N>
- constexpr decltype(auto) operator[](N&& n);
- };
-#else
- template <typename T, T from, T to>
- struct range;
-#endif
-
- //! Tag representing a `hana::range`.
- //! @relates hana::range
- struct range_tag { };
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- //! Create a `hana::range` representing a half-open interval of
- //! `integral_constant`s.
- //! @relates hana::range
- //!
- //! Given two `IntegralConstant`s `from` and `to`, `make<range_tag>`
- //! returns a `hana::range` representing the half-open interval of
- //! `integral_constant`s `[from, to)`. `from` and `to` must form a
- //! valid interval, which means that `from <= to` must be true. Otherwise,
- //! a compilation error is triggered. Also note that if `from` and `to`
- //! are `IntegralConstant`s with different underlying integral types,
- //! the created range contains `integral_constant`s whose underlying
- //! type is their common type.
- //!
- //!
- //! Example
- //! -------
- //! @include example/range/make.cpp
- template <>
- constexpr auto make<range_tag> = [](auto const& from, auto const& to) {
- return range<implementation_defined>{implementation_defined};
- };
-#endif
-
- //! Alias to `make<range_tag>`; provided for convenience.
- //! @relates hana::range
- constexpr auto make_range = make<range_tag>;
-
- //! Shorthand to create a `hana::range` with the given bounds.
- //! @relates hana::range
- //!
- //! This shorthand is provided for convenience only and it is equivalent
- //! to `make_range`. Specifically, `range_c<T, from, to>` is such that
- //! @code
- //! range_c<T, from, to> == make_range(integral_c<T, from>, integral_c<T, to>)
- //! @endcode
- //!
- //!
- //! @tparam T
- //! The underlying integral type of the `integral_constant`s in the
- //! created range.
- //!
- //! @tparam from
- //! The inclusive lower bound of the created range.
- //!
- //! @tparam to
- //! The exclusive upper bound of the created range.
- //!
- //!
- //! Example
- //! -------
- //! @include example/range/range_c.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename T, T from, T to>
- constexpr auto range_c = make_range(integral_c<T, from>, integral_c<T, to>);
-#else
- template <typename T, T from, T to>
- constexpr range<T, from, to> range_c{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/remove.hpp b/contrib/restricted/boost/boost/hana/fwd/remove.hpp
deleted file mode 100644
index 88254410a9..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/remove.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::remove`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_REMOVE_HPP
-#define BOOST_HANA_FWD_REMOVE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Remove all the elements of a monadic structure that are equal to some
- //! value.
- //! @ingroup group-MonadPlus
- //!
- //! Given a monadic structure `xs` and a `value`, `remove` returns a new
- //! monadic structure equal to `xs` without all its elements that are
- //! equal to the given `value`. `remove` is equivalent to `remove_if`
- //! with the `equal.to(value)` predicate, i.e.
- //! @code
- //! remove(xs, value) == remove_if(xs, equal.to(value))
- //! @endcode
- //!
- //!
- //! Signature
- //! ---------
- //! Given a MonadPlus `M` and a value of type `T`, the signature is
- //! \f$
- //! \mathrm{remove} : M(T) \times T \to M(T)
- //! \f$
- //!
- //! @param xs
- //! A monadic structure to remove some elements from.
- //!
- //! @param value
- //! A value that is compared to every element `x` of the structure.
- //! Elements of the structure that are equal to that value are removed
- //! from the structure. This requires every element to be Comparable
- //! with `value`. Furthermore, in the current version of the library,
- //! comparing `value` with any element of the structure must yield a
- //! compile-time Logical.
- //!
- //!
- //! Example
- //! -------
- //! @include example/remove.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto remove = [](auto&& xs, auto&& value) {
- return tag-dispatched;
- };
-#else
- template <typename M, typename = void>
- struct remove_impl : remove_impl<M, when<true>> { };
-
- struct remove_t {
- template <typename Xs, typename Value>
- constexpr auto operator()(Xs&& xs, Value&& value) const;
- };
-
- constexpr remove_t remove{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_REMOVE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/remove_at.hpp b/contrib/restricted/boost/boost/hana/fwd/remove_at.hpp
deleted file mode 100644
index f997d6e4c5..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/remove_at.hpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::remove_at` and `boost::hana::remove_at_c`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_REMOVE_AT_HPP
-#define BOOST_HANA_FWD_REMOVE_AT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Remove the element at a given index from a sequence.
- //! @ingroup group-Sequence
- //!
- //! `remove_at` returns a new sequence identical to the original, except
- //! that the element at the given index is removed. Specifically,
- //! `remove_at([x0, ..., xn-1, xn, xn+1, ..., xm], n)` is a new
- //! sequence equivalent to `[x0, ..., xn-1, xn+1, ..., xm]`.
- //!
- //! @note
- //! The behavior is undefined if the index is out of the bounds of the
- //! sequence.
- //!
- //!
- //! @param xs
- //! A sequence from which an element is to be removed.
- //!
- //! @param n
- //! An non-negative `IntegralConstant` representing the index of the
- //! element to be removed from the sequence. The behavior is undefined
- //! if that index is not in the bounds of the sequence.
- //!
- //!
- //! Example
- //! -------
- //! @include example/remove_at.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto remove_at = [](auto&& xs, auto const& n) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct remove_at_impl : remove_at_impl<S, when<true>> { };
-
- struct remove_at_t {
- template <typename Xs, typename N>
- constexpr auto operator()(Xs&& xs, N const& n) const;
- };
-
- constexpr remove_at_t remove_at{};
-#endif
-
- //! Equivalent to `remove_at`; provided for convenience.
- //! @ingroup group-Sequence
- //!
- //!
- //! Example
- //! -------
- //! @include example/remove_at_c.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <std::size_t n>
- constexpr auto remove_at_c = [](auto&& xs) {
- return hana::remove_at(forwarded(xs), hana::size_c<n>);
- };
-#else
- template <std::size_t n>
- struct remove_at_c_t;
-
- template <std::size_t n>
- constexpr remove_at_c_t<n> remove_at_c{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_REMOVE_AT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/remove_if.hpp b/contrib/restricted/boost/boost/hana/fwd/remove_if.hpp
deleted file mode 100644
index 590a6e195e..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/remove_if.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::remove_if`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_REMOVE_IF_HPP
-#define BOOST_HANA_FWD_REMOVE_IF_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Remove all the elements of a monadic structure that satisfy some
- //! predicate.
- //! @ingroup group-MonadPlus
- //!
- //! Given a monadic structure `xs` and a unary predicate, `remove_if`
- //! returns a new monadic structure equal to `xs` without all its elements
- //! that satisfy the predicate. This is equivalent to `filter` with a
- //! negated predicate, i.e.
- //! @code
- //! remove_if(xs, predicate) == filter(xs, negated predicated)
- //! @endcode
- //!
- //!
- //! Signature
- //! ---------
- //! Given a MonadPlus `M` and a predicate of type \f$ T \to Bool \f$ for
- //! some compile-time Logical `Bool`, the signature is
- //! \f$
- //! \mathrm{remove\_if} : M(T) \times (T \to Bool) \to M(T)
- //! \f$
- //!
- //! @param xs
- //! A monadic structure to remove some elements from.
- //!
- //! @param predicate
- //! A unary predicate called as `predicate(x)`, where `x` is an element
- //! of the structure, and returning whether `x` should be removed from
- //! the structure. In the current version of the library, `predicate`
- //! must return a compile-time Logical.
- //!
- //!
- //! Example
- //! -------
- //! @include example/remove_if.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto remove_if = [](auto&& xs, auto&& predicate) {
- return tag-dispatched;
- };
-#else
- template <typename M, typename = void>
- struct remove_if_impl : remove_if_impl<M, when<true>> { };
-
- struct remove_if_t {
- template <typename Xs, typename Pred>
- constexpr auto operator()(Xs&& xs, Pred&& pred) const;
- };
-
- constexpr remove_if_t remove_if{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_REMOVE_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/remove_range.hpp b/contrib/restricted/boost/boost/hana/fwd/remove_range.hpp
deleted file mode 100644
index 1645cce598..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/remove_range.hpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::remove_range` and `boost::hana::remove_range_c`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_REMOVE_RANGE_HPP
-#define BOOST_HANA_FWD_REMOVE_RANGE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Remove the elements inside a given range of indices from a sequence.
- //! @ingroup group-Sequence
- //!
- //! `remove_range` returns a new sequence identical to the original,
- //! except that elements at indices in the provided range are removed.
- //! Specifically, `remove_range([x0, ..., xn], from, to)` is a new
- //! sequence equivalent to `[x0, ..., x_from-1, x_to, ..., xn]`.
- //!
- //!
- //! @note
- //! The behavior is undefined if the range contains any index out of the
- //! bounds of the sequence.
- //!
- //!
- //! @param xs
- //! A sequence from which elements are removed.
- //!
- //! @param [from, to)
- //! An half-open interval of `IntegralConstant`s representing the indices
- //! of the elements to be removed from the sequence. The `IntegralConstant`s
- //! in the half-open interval must be non-negative and in the bounds of
- //! the sequence. The half-open interval must also be valid, meaning that
- //! `from <= to`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/remove_range.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto remove_range = [](auto&& xs, auto const& from, auto const& to) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct remove_range_impl : remove_range_impl<S, when<true>> { };
-
- struct remove_range_t {
- template <typename Xs, typename From, typename To>
- constexpr auto operator()(Xs&& xs, From const& from, To const& to) const;
- };
-
- constexpr remove_range_t remove_range{};
-#endif
-
- //! Equivalent to `remove_range`; provided for convenience.
- //! @ingroup group-Sequence
- //!
- //!
- //! Example
- //! -------
- //! @include example/remove_range_c.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <std::size_t from, std::size_t to>
- constexpr auto remove_range_c = [](auto&& xs) {
- return hana::remove_range(forwarded(xs), hana::size_c<from>, hana::size_c<to>);
- };
-#else
- template <std::size_t from, std::size_t to>
- struct remove_range_c_t;
-
- template <std::size_t from, std::size_t to>
- constexpr remove_range_c_t<from, to> remove_range_c{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_REMOVE_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/repeat.hpp b/contrib/restricted/boost/boost/hana/fwd/repeat.hpp
deleted file mode 100644
index 0151b5c9e0..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/repeat.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::repeat`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_REPEAT_HPP
-#define BOOST_HANA_FWD_REPEAT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Invokes a nullary function `n` times.
- //! @ingroup group-IntegralConstant
- //!
- //! Given an `IntegralConstant` `n` and a nullary function `f`,
- //! `repeat(n, f)` will call `f` `n` times. In particular, any
- //! decent compiler should expand `repeat(n, f)` to
- //! @code
- //! f(); f(); ... f(); // n times total
- //! @endcode
- //!
- //!
- //! @param n
- //! An `IntegralConstant` holding a non-negative value representing
- //! the number of times `f` should be repeatedly invoked.
- //!
- //! @param f
- //! A function to repeatedly invoke `n` times. `f` is allowed to have
- //! side effects.
- //!
- //!
- //! Example
- //! -------
- //! @include example/repeat.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto repeat = [](auto const& n, auto&& f) -> void {
- f(); f(); ... f(); // n times total
- };
-#else
- template <typename N, typename = void>
- struct repeat_impl : repeat_impl<N, when<true>> { };
-
- struct repeat_t {
- template <typename N, typename F>
- constexpr void operator()(N const& n, F&& f) const;
- };
-
- constexpr repeat_t repeat{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_REPEAT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/replace.hpp b/contrib/restricted/boost/boost/hana/fwd/replace.hpp
deleted file mode 100644
index 6edb858a7f..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/replace.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::replace`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_REPLACE_HPP
-#define BOOST_HANA_FWD_REPLACE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Replace all the elements of a structure that compare equal
- //! to some `value` with some new fixed value.
- //! @ingroup group-Functor
- //!
- //!
- //! Signature
- //! ---------
- //! Given `F` a Functor and `U` a type that can be compared with `T`,
- //! the signature is
- //! \f$
- //! \mathtt{replace} : F(T) \times U \times T \to F(T)
- //! \f$
- //!
- //! @param xs
- //! The structure to replace elements of.
- //!
- //! @param oldval
- //! An object compared with each element of the structure. Elements
- //! of the structure that compare equal to `oldval` are replaced
- //! by `newval` in the new structure.
- //!
- //! @param newval
- //! A value by which every element `x` of the structure that compares
- //! equal to `oldval` is replaced.
- //!
- //!
- //! Example
- //! -------
- //! @include example/replace.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto replace = [](auto&& xs, auto&& oldval, auto&& newval) {
- return tag-dispatched;
- };
-#else
- template <typename Xs, typename = void>
- struct replace_impl : replace_impl<Xs, when<true>> { };
-
- struct replace_t {
- template <typename Xs, typename OldVal, typename NewVal>
- constexpr auto operator()(Xs&& xs, OldVal&& oldval, NewVal&& newval) const;
- };
-
- constexpr replace_t replace{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_REPLACE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/replace_if.hpp b/contrib/restricted/boost/boost/hana/fwd/replace_if.hpp
deleted file mode 100644
index 48d5b4c15c..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/replace_if.hpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::replace_if`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_REPLACE_IF_HPP
-#define BOOST_HANA_FWD_REPLACE_IF_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Replace all the elements of a structure satisfying a `predicate`
- //! with a fixed value.
- //! @ingroup group-Functor
- //!
- //!
- //! Signature
- //! ---------
- //! Given `F` a Functor and `Bool` a Logical, the signature is
- //! \f$
- //! \mathtt{replace\_if} : F(T) \times (T \to Bool) \times T \to F(T)
- //! \f$
- //!
- //! @param xs
- //! The structure to replace elements of.
- //!
- //! @param predicate
- //! A function called as `predicate(x)` for element(s) `x` of the
- //! structure and returning a `Logical` representing whether `x`
- //! should be replaced by `value`.
- //!
- //! @param value
- //! A value by which every element `x` of the structure for which
- //! `predicate` returns a true-valued `Logical` is replaced.
- //!
- //!
- //! Example
- //! -------
- //! @include example/replace_if.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto replace_if = [](auto&& xs, auto&& predicate, auto&& value) {
- return tag-dispatched;
- };
-#else
- template <typename Xs, typename = void>
- struct replace_if_impl : replace_if_impl<Xs, when<true>> { };
-
- struct replace_if_t {
- template <typename Xs, typename Pred, typename Value>
- constexpr auto operator()(Xs&& xs, Pred&& pred, Value&& value) const;
- };
-
- constexpr replace_if_t replace_if{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_REPLACE_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/replicate.hpp b/contrib/restricted/boost/boost/hana/fwd/replicate.hpp
deleted file mode 100644
index 4861adabae..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/replicate.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::replicate`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_REPLICATE_HPP
-#define BOOST_HANA_FWD_REPLICATE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Create a monadic structure by combining a lifted value with itself
- //! `n` times.
- //! @ingroup group-MonadPlus
- //!
- //! Given a value `x`, a non-negative `IntegralConstant` `n` and the tag
- //! of a monadic structure `M`, `replicate` creates a new monadic structure
- //! which is the result of combining `x` with itself `n` times inside the
- //! monadic structure. In other words, `replicate` simply `lift`s `x` into
- //! the monadic structure, and then combines that with itself `n` times:
- //! @code
- //! replicate<M>(x, n) == cycle(lift<M>(x), n)
- //! @endcode
- //!
- //! If `n` is zero, then the identity of the `concat` operation is returned.
- //! In the case of sequences, this corresponds to creating a new sequence
- //! holding `n` copies of `x`.
- //!
- //!
- //! Signature
- //! ---------
- //! Given an `IntegralConstant` `C` and MonadPlus `M`, the signature is
- //! @f$ \mathtt{replicate}_M : T \times C \to M(T) @f$.
- //!
- //! @tparam M
- //! The tag of the returned monadic structure. It must be a
- //! model of the MonadPlus concept.
- //!
- //! @param x
- //! The value to lift into a monadic structure and then combine with
- //! itself.
- //!
- //! @param n
- //! A non-negative `IntegralConstant` representing the number of times to
- //! combine `lift<M>(x)` with itself. If `n == 0`, `replicate` returns
- //! `empty<M>()`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/replicate.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename M>
- constexpr auto replicate = [](auto&& x, auto const& n) {
- return tag-dispatched;
- };
-#else
- template <typename M, typename = void>
- struct replicate_impl : replicate_impl<M, when<true>> { };
-
- template <typename M>
- struct replicate_t;
-
- template <typename M>
- constexpr replicate_t<M> replicate{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_REPLICATE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/reverse.hpp b/contrib/restricted/boost/boost/hana/fwd/reverse.hpp
deleted file mode 100644
index b47b610bb8..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/reverse.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::reverse`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_REVERSE_HPP
-#define BOOST_HANA_FWD_REVERSE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Reverse a sequence.
- //! @ingroup group-Sequence
- //!
- //! Specifically, `reverse(xs)` is a new sequence containing the same
- //! elements as `xs`, except in reverse order.
- //!
- //!
- //! @param xs
- //! The sequence to reverse.
- //!
- //!
- //! Example
- //! -------
- //! @include example/reverse.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto reverse = [](auto&& xs) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct reverse_impl : reverse_impl<S, when<true>> { };
-
- struct reverse_t {
- template <typename Xs>
- constexpr auto operator()(Xs&& xs) const;
- };
-
- constexpr reverse_t reverse{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_REVERSE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/reverse_fold.hpp b/contrib/restricted/boost/boost/hana/fwd/reverse_fold.hpp
deleted file mode 100644
index 607dd2dc4d..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/reverse_fold.hpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::reverse_fold`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_REVERSE_FOLD_HPP
-#define BOOST_HANA_FWD_REVERSE_FOLD_HPP
-
-#include <boost/hana/config.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Equivalent to `reverse_fold` in Boost.Fusion and Boost.MPL.
- //! @ingroup group-Foldable
- //!
- //! This method has the same semantics as `reverse_fold` in Boost.Fusion
- //! and Boost.MPL, with the extension that an initial state is not
- //! required. This method is equivalent to `fold_right`, except that
- //! the accumulating function must take its arguments in reverse order,
- //! to match the order used in Fusion. In other words,
- //! @code
- //! reverse_fold(sequence, state, f) == fold_right(sequence, state, flip(f))
- //! reverse_fold(sequence, f) == fold_right(sequence, flip(f))
- //! @endcode
- //!
- //! @note
- //! This method is a convenience alias to `fold_right`. As an alias,
- //! `reverse_fold` is not tag-dispatched on its own and `fold_right`
- //! should be customized instead.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a `Foldable` `F` and an optional initial state of tag `S`,
- //! the signatures for `reverse_fold` are
- //! \f[
- //! \mathtt{reverse\_fold} : F(T) \times S \times (S \times T \to S) \to S
- //! \f]
- //!
- //! for the variant with an initial state, and
- //! \f[
- //! \mathtt{reverse\_fold} : F(T) \times (T \times T \to T) \to T
- //! \f]
- //!
- //! for the variant without an initial state.
- //!
- //! @param xs
- //! The structure to fold.
- //!
- //! @param state
- //! The initial value used for folding.
- //!
- //! @param f
- //! A binary function called as `f(state, x)`, where `state` is the
- //! result accumulated so far and `x` is an element in the structure.
- //! For reverse folds without an initial state, the function is called as
- //! `f(x1, x2)`, where `x1` and `x2` are elements of the structure.
- //!
- //!
- //! Example
- //! -------
- //! @include example/reverse_fold.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto reverse_fold = [](auto&& xs[, auto&& state], auto&& f) -> decltype(auto) {
- return fold_right(forwarded(xs), forwarded(state), flip(forwarded(f)));
- };
-#else
- struct reverse_fold_t {
- template <typename Xs, typename S, typename F>
- constexpr decltype(auto) operator()(Xs&& xs, S&& s, F&& f) const;
-
- template <typename Xs, typename F>
- constexpr decltype(auto) operator()(Xs&& xs, F&& f) const;
- };
-
- constexpr reverse_fold_t reverse_fold{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_REVERSE_FOLD_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/scan_left.hpp b/contrib/restricted/boost/boost/hana/fwd/scan_left.hpp
deleted file mode 100644
index 2418196d32..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/scan_left.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::scan_left`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_SCAN_LEFT_HPP
-#define BOOST_HANA_FWD_SCAN_LEFT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Fold a Sequence to the left and return a list containing the
- //! successive reduction states.
- //! @ingroup group-Sequence
- //!
- //! Like `fold_left`, `scan_left` reduces a sequence to a single value
- //! using a binary operation. However, unlike `fold_left`, it builds up
- //! a sequence of the intermediary results computed along the way and
- //! returns that instead of only the final reduction state. Like
- //! `fold_left`, `scan_left` can be used with or without an initial
- //! reduction state.
- //!
- //! When the sequence is empty, two things may arise. If an initial state
- //! was provided, a singleton list containing that state is returned.
- //! Otherwise, if no initial state was provided, an empty list is
- //! returned. In particular, unlike for `fold_left`, using `scan_left`
- //! on an empty sequence without an initial state is not an error.
- //!
- //! More specifically, `scan_left([x1, ..., xn], state, f)` is a sequence
- //! whose `i`th element is equivalent to `fold_left([x1, ..., xi], state, f)`.
- //! The no-state variant is handled in an analogous way. For illustration,
- //! consider this left fold on a short sequence:
- //! @code
- //! fold_left([x1, x2, x3], state, f) == f(f(f(state, x1), x2), x3)
- //! @endcode
- //!
- //! The analogous sequence generated with `scan_left` will be
- //! @code
- //! scan_left([x1, x2, x3], state, f) == [
- //! state,
- //! f(state, x1),
- //! f(f(state, x1), x2),
- //! f(f(f(state, x1), x2), x3)
- //! ]
- //! @endcode
- //!
- //! Similarly, consider this left fold (without an initial state) on
- //! a short sequence:
- //! @code
- //! fold_left([x1, x2, x3, x4], f) == f(f(f(x1, x2), x3), x4)
- //! @endcode
- //!
- //! The analogous sequence generated with `scan_left` will be
- //! @code
- //! scan_left([x1, x2, x3, x4], f) == [
- //! x1,
- //! f(x1, x2),
- //! f(f(x1, x2), x3),
- //! f(f(f(x1, x2), x3), x4)
- //! ]
- //! @endcode
- //!
- //! @param xs
- //! The sequence to scan from the left.
- //!
- //! @param state
- //! The (optional) initial reduction state.
- //!
- //! @param f
- //! A binary function called as `f(state, x)`, where `state` is the
- //! result accumulated so far and `x` is an element in the sequence.
- //! If no initial state is provided, `f` is called as `f(x1, x2)`,
- //! where `x1` and `x2` are both elements of the sequence.
- //!
- //!
- //! Example
- //! -------
- //! @include example/scan_left.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto scan_left = [](auto&& xs[, auto&& state], auto const& f) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct scan_left_impl : scan_left_impl<S, when<true>> { };
-
- struct scan_left_t {
- template <typename Xs, typename State, typename F>
- constexpr auto operator()(Xs&& xs, State&& state, F const& f) const;
-
- template <typename Xs, typename F>
- constexpr auto operator()(Xs&& xs, F const& f) const;
- };
-
- constexpr scan_left_t scan_left{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_SCAN_LEFT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/scan_right.hpp b/contrib/restricted/boost/boost/hana/fwd/scan_right.hpp
deleted file mode 100644
index c99cc911e9..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/scan_right.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::scan_right`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_SCAN_RIGHT_HPP
-#define BOOST_HANA_FWD_SCAN_RIGHT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Fold a Sequence to the right and return a list containing the
- //! successive reduction states.
- //! @ingroup group-Sequence
- //!
- //! Like `fold_right`, `scan_right` reduces a sequence to a single value
- //! using a binary operation. However, unlike `fold_right`, it builds up
- //! a sequence of the intermediary results computed along the way and
- //! returns that instead of only the final reduction state. Like
- //! `fold_right`, `scan_right` can be used with or without an initial
- //! reduction state.
- //!
- //! When the sequence is empty, two things may arise. If an initial state
- //! was provided, a singleton list containing that state is returned.
- //! Otherwise, if no initial state was provided, an empty list is
- //! returned. In particular, unlike for `fold_right`, using `scan_right`
- //! on an empty sequence without an initial state is not an error.
- //!
- //! More specifically, `scan_right([x1, ..., xn], state, f)` is a sequence
- //! whose `i`th element is equivalent to `fold_right([x1, ..., xi], state, f)`.
- //! The no-state variant is handled in an analogous way. For illustration,
- //! consider this right fold on a short sequence:
- //! @code
- //! fold_right([x1, x2, x3], state, f) == f(x1, f(x2, f(x3, state)))
- //! @endcode
- //!
- //! The analogous sequence generated with `scan_right` will be
- //! @code
- //! scan_right([x1, x2, x3], state, f) == [
- //! f(x1, f(x2, f(x3, state))),
- //! f(x2, f(x3, state)),
- //! f(x3, state),
- //! state
- //! ]
- //! @endcode
- //!
- //! Similarly, consider this right fold (without an initial state) on
- //! a short sequence:
- //! @code
- //! fold_right([x1, x2, x3, x4], f) == f(x1, f(x2, f(x3, x4)))
- //! @endcode
- //!
- //! The analogous sequence generated with `scan_right` will be
- //! @code
- //! scan_right([x1, x2, x3, x4], f) == [
- //! f(x1, f(x2, f(x3, x4))),
- //! f(x2, f(x3, x4)),
- //! f(x3, x4),
- //! x4
- //! ]
- //! @endcode
- //!
- //! @param xs
- //! The sequence to scan from the right.
- //!
- //! @param state
- //! The (optional) initial reduction state.
- //!
- //! @param f
- //! A binary function called as `f(x, state)`, where `state` is the
- //! result accumulated so far and `x` is an element in the sequence.
- //! When no initial state is provided, `f` is called as `f(x1, x2)`,
- //! where `x1` and `x2` are elements of the sequence.
- //!
- //!
- //! Example
- //! -------
- //! @include example/scan_right.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto scan_right = [](auto&& xs[, auto&& state], auto const& f) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct scan_right_impl : scan_right_impl<S, when<true>> { };
-
- struct scan_right_t {
- template <typename Xs, typename State, typename F>
- constexpr auto operator()(Xs&& xs, State&& state, F const& f) const;
-
- template <typename Xs, typename F>
- constexpr auto operator()(Xs&& xs, F const& f) const;
- };
-
- constexpr scan_right_t scan_right{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_SCAN_RIGHT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/second.hpp b/contrib/restricted/boost/boost/hana/fwd/second.hpp
deleted file mode 100644
index 6dc4623b79..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/second.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::second`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_SECOND_HPP
-#define BOOST_HANA_FWD_SECOND_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns the second element of a pair.
- //! @ingroup group-Product
- //!
- //! Note that if the `Product` actually stores the elements it contains,
- //! `hana::second` is required to return a lvalue reference, a lvalue
- //! reference to const or a rvalue reference to the second element, where
- //! the type of reference must match that of the pair passed to `second`.
- //! If the `Product` does not store the elements it contains (i.e. it
- //! generates them on demand), this requirement is dropped.
- //!
- //! Example
- //! -------
- //! @include example/second.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto second = [](auto&& product) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename P, typename = void>
- struct second_impl : second_impl<P, when<true>> { };
-
- struct second_t {
- template <typename Pair>
- constexpr decltype(auto) operator()(Pair&& pair) const;
- };
-
- constexpr second_t second{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_SECOND_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/set.hpp b/contrib/restricted/boost/boost/hana/fwd/set.hpp
deleted file mode 100644
index 7312854782..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/set.hpp
+++ /dev/null
@@ -1,297 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::set`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_SET_HPP
-#define BOOST_HANA_FWD_SET_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/fwd/core/to.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/erase_key.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-datatypes
- //! Basic unordered container requiring unique, `Comparable` and
- //! `Hashable` keys.
- //!
- //! A set is an unordered container that can hold heterogeneous keys.
- //! A set requires (and ensures) that no duplicates are present when
- //! inserting new keys.
- //!
- //! @note
- //! The actual representation of a `hana::set` is implementation-defined.
- //! In particular, one should not take for granted the order of the
- //! template parameters and the presence of any additional constructors
- //! or assignment operators than what is documented. The canonical way of
- //! creating a `hana::set` is through `hana::make_set`.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! 1. `Comparable`\n
- //! Two sets are equal iff they contain the same elements, regardless of
- //! the order.
- //! @include example/set/comparable.cpp
- //!
- //! 2. Foldable\n
- //! Folding a set is equivalent to folding the sequence of its values.
- //! However, note that the values are not required to be in any specific
- //! order, so using the folds provided here with an operation that is not
- //! both commutative and associative will yield non-deterministic behavior.
- //! @include example/set/foldable.cpp
- //!
- //! 3. Searchable\n
- //! The elements in a set act as both its keys and its values. Since the
- //! elements of a set are unique, searching for an element will return
- //! either the only element which is equal to the searched value, or
- //! `nothing`. Also note that `operator[]` can be used instead of the
- //! `at_key` function.
- //! @include example/set/searchable.cpp
- //!
- //!
- //! Conversion from any `Foldable`
- //! ------------------------------
- //! Any `Foldable` structure can be converted into a `hana::set` with
- //! `to<set_tag>`. The elements of the structure must all be compile-time
- //! `Comparable`. If the structure contains duplicate elements, only
- //! the first occurence will appear in the resulting set. More
- //! specifically, conversion from a `Foldable` is equivalent to
- //! @code
- //! to<set_tag>(xs) == fold_left(xs, make_set(), insert)
- //! @endcode
- //!
- //! __Example__
- //! @include example/set/to.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename implementation_defined>
- struct set {
- //! Default-construct a set. This constructor only exists when all the
- //! elements of the set are default-constructible.
- constexpr set() = default;
-
- //! Copy-construct a set from another set. This constructor only
- //! exists when all the elements of the set are copy-constructible.
- constexpr set(set const& other) = default;
-
- //! Move-construct a set from another set. This constructor only
- //! exists when all the elements of the set are move-constructible.
- constexpr set(set&& other) = default;
-
- //! Equivalent to `hana::equal`
- template <typename X, typename Y>
- friend constexpr auto operator==(X&& x, Y&& y);
-
- //! Equivalent to `hana::not_equal`
- template <typename X, typename Y>
- friend constexpr auto operator!=(X&& x, Y&& y);
-
- //! Equivalent to `hana::at_key`
- template <typename Key>
- constexpr decltype(auto) operator[](Key&& key);
- };
-#else
- template <typename ...Xs>
- struct set;
-#endif
-
- //! Tag representing the `hana::set` container.
- //! @relates hana::set
- struct set_tag { };
-
- //! Function object for creating a `hana::set`.
- //! @relates hana::set
- //!
- //! Given zero or more values `xs...`, `make<set_tag>` returns a `set`
- //! containing those values. The values must all be compile-time
- //! `Comparable`, and no duplicate values may be provided. To create
- //! a `set` from a sequence with possible duplicates, use `to<set_tag>`
- //! instead.
- //!
- //!
- //! Example
- //! -------
- //! @include example/set/make.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <>
- constexpr auto make<set_tag> = [](auto&& ...xs) {
- return set<implementation_defined>{forwarded(xs)...};
- };
-#endif
-
- //! Equivalent to `make<set_tag>`; provided for convenience.
- //! @relates hana::set
- //!
- //!
- //! Example
- //! -------
- //! @include example/set/make.cpp
- constexpr auto make_set = make<set_tag>;
-
- //! Insert an element in a `hana::set`.
- //! @relates hana::set
- //!
- //! If the set already contains an element that compares equal, then
- //! nothing is done and the set is returned as is.
- //!
- //!
- //! @param set
- //! The set in which to insert a value.
- //!
- //! @param element
- //! The value to insert. It must be compile-time `Comparable`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/set/insert.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto insert = [](auto&& set, auto&& element) {
- return tag-dispatched;
- };
-#endif
-
- //! Remove an element from a `hana::set`.
- //! @relates hana::set
- //!
- //! Returns a new set containing all the elements of the original,
- //! except the one comparing `equal` to the given element. If the set
- //! does not contain such an element, a new set equal to the original
- //! set is returned.
- //!
- //!
- //! @param set
- //! The set in which to remove a value.
- //!
- //! @param element
- //! The value to remove. It must be compile-time `Comparable`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/set/erase_key.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto erase_key = [](auto&& set, auto&& element) {
- return tag-dispatched;
- };
-#endif
-
- //! Returns the union of two sets.
- //! @relates hana::set
- //!
- //! Given two sets `xs` and `ys`, `union_(xs, ys)` is a new set containing
- //! all the elements of `xs` and all the elements of `ys`, without
- //! duplicates. For any object `x`, the following holds: `x` is in
- //! `hana::union_(xs, ys)` if and only if `x` is in `xs` or `x` is in `ys`.
- //!
- //!
- //! @param xs, ys
- //! Two sets to compute the union of.
- //!
- //!
- //! Example
- //! -------
- //! @include example/set/union.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto union_ = [](auto&& xs, auto&& ys) {
- return tag-dispatched;
- };
-#endif
-
- //! Returns the intersection of two sets.
- //! @relates hana::set
- //!
- //! Given two sets `xs` and `ys`, `intersection(xs, ys)` is a new set
- //! containing exactly those elements that are present both in `xs` and
- //! in `ys`.
- //! In other words, the following holds for any object `x`:
- //! @code
- //! x ^in^ intersection(xs, ys) if and only if x ^in^ xs && x ^in^ ys
- //! @endcode
- //!
- //!
- //! @param xs, ys
- //! Two sets to intersect.
- //!
- //!
- //! Example
- //! -------
- //! @include example/set/intersection.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto intersection = [](auto&& xs, auto&& ys) {
- return tag-dispatched;
- };
-#endif
- //! Equivalent to `to<set_tag>`; provided for convenience.
- //! @relates hana::set
- constexpr auto to_set = to<set_tag>;
-
- //! Returns the set-theoretic difference of two sets.
- //! @relates hana::set
- //!
- //! Given two sets `xs` and `ys`, `difference(xs, ys)` is a new set
- //! containing all the elements of `xs` that are _not_ contained in `ys`.
- //! For any object `x`, the following holds:
- //! @code
- //! x ^in^ difference(xs, ys) if and only if x ^in^ xs && !(x ^in^ ys)
- //! @endcode
- //!
- //!
- //! This operation is not commutative, i.e. `difference(xs, ys)` is not
- //! necessarily the same as `difference(ys, xs)`. Indeed, consider the
- //! case where `xs` is empty and `ys` isn't. Then, `difference(xs, ys)`
- //! is empty but `difference(ys, xs)` is equal to `ys`. For the symmetric
- //! version of this operation, see `symmetric_difference`.
- //!
- //!
- //! @param xs
- //! A set param to remove values from.
- //!
- //! @param ys
- //! The set whose values are removed from `xs`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/set/difference.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto difference = [](auto&& xs, auto&& ys) {
- return tag-dispatched;
-};
-#endif
-
- //! Returns the symmetric set-theoretic difference of two sets.
- //! @relates hana::set
- //!
- //! Given two sets `xs` and `ys`, `symmetric_difference(xs, ys)` is a new
- //! set containing all the elements of `xs` that are not contained in `ys`,
- //! and all the elements of `ys` that are not contained in `xs`. The
- //! symmetric difference of two sets satisfies the following:
- //! @code
- //! symmetric_difference(xs, ys) == union_(difference(xs, ys), difference(ys, xs))
- //! @endcode
- //!
- //!
- //! @param xs, ys
- //! Two sets to compute the symmetric difference of.
- //!
- //!
- //! Example
- //! -------
- //! @include example/set/symmetric_difference.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
-constexpr auto symmetric_difference = [](auto&& xs, auto&& ys) {
- return tag-dispatched;
- };
-#endif
-
-
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_SET_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/size.hpp b/contrib/restricted/boost/boost/hana/fwd/size.hpp
deleted file mode 100644
index 8999b91413..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/size.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::size`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_SIZE_HPP
-#define BOOST_HANA_FWD_SIZE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/fwd/length.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Equivalent to `length`; provided for consistency with the
- //! standard library.
- //! @ingroup group-Foldable
- //!
- //! This method is an alias to `length` provided for convenience and
- //! consistency with the standard library. As an alias, `size` is not
- //! tag-dispatched on its own and `length` should be customized instead.
- //!
- //!
- //! Example
- //! -------
- //! @include example/size.cpp
- constexpr auto size = hana::length;
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_SIZE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/slice.hpp b/contrib/restricted/boost/boost/hana/fwd/slice.hpp
deleted file mode 100644
index f8dfafc02d..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/slice.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::slice` and `boost::hana::slice_c`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_SLICE_HPP
-#define BOOST_HANA_FWD_SLICE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Extract the elements of a `Sequence` at the given indices.
- //! @ingroup group-Sequence
- //!
- //! Given an arbitrary sequence of `indices`, `slice` returns a new
- //! sequence of the elements of the original sequence that appear at
- //! those indices. In other words,
- //! @code
- //! slice([x1, ..., xn], [i1, ..., ik]) == [x_i1, ..., x_ik]
- //! @endcode
- //!
- //! The indices do not have to be ordered or contiguous in any particular
- //! way, but they must not be out of the bounds of the sequence. It is
- //! also possible to specify the same index multiple times, in which case
- //! the element at this index will be repeatedly included in the resulting
- //! sequence.
- //!
- //!
- //! @param xs
- //! The sequence from which a subsequence is extracted.
- //!
- //! @param indices
- //! A compile-time `Foldable` containing non-negative `IntegralConstant`s
- //! representing the indices. The indices are 0-based, and they must all
- //! be in bounds of the `xs` sequence. Note that any `Foldable` will
- //! really do (no need for an `Iterable`, for example); the linearization
- //! of the `indices` is used to determine the order of the elements
- //! included in the slice.
- //!
- //!
- //! Example
- //! -------
- //! @include example/slice.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto slice = [](auto&& xs, auto&& indices) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct slice_impl : slice_impl<S, when<true>> { };
-
- struct slice_t {
- template <typename Xs, typename Indices>
- constexpr auto operator()(Xs&& xs, Indices&& indices) const;
- };
-
- constexpr slice_t slice{};
-#endif
-
- //! Shorthand to `slice` a contiguous range of elements.
- //! @ingroup group-Sequence
- //!
- //! `slice_c` is simply a shorthand to slice a contiguous range of
- //! elements. In particular, `slice_c<from, to>(xs)` is equivalent to
- //! `slice(xs, range_c<std::size_t, from, to>)`, which simply slices
- //! all the elements of `xs` contained in the half-open interval
- //! delimited by `[from, to)`. Like for `slice`, the indices used with
- //! `slice_c` are 0-based and they must be in the bounds of the sequence
- //! being sliced.
- //!
- //!
- //! @tparam from
- //! The index of the first element in the slice.
- //!
- //! @tparam to
- //! One-past the index of the last element in the slice. It must hold
- //! that `from <= to`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/slice_c.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <std::size_t from, std::size_t to>
- constexpr auto slice_c = [](auto&& xs) {
- return hana::slice(forwarded(xs), hana::range_c<std::size_t, from, to>);
- };
-#else
- template <std::size_t from, std::size_t to>
- struct slice_c_t;
-
- template <std::size_t from, std::size_t to>
- constexpr slice_c_t<from, to> slice_c{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_SLICE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/sort.hpp b/contrib/restricted/boost/boost/hana/fwd/sort.hpp
deleted file mode 100644
index c0d45aee23..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/sort.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::sort`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_SORT_HPP
-#define BOOST_HANA_FWD_SORT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/nested_by_fwd.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Sort a sequence, optionally based on a custom `predicate`.
- //! @ingroup group-Sequence
- //!
- //! Given a Sequence and an optional predicate (by default `less`), `sort`
- //! returns a new sequence containing the same elements as the original,
- //! except they are ordered in such a way that if `x` comes before `y` in
- //! the sequence, then either `predicate(x, y)` is true, or both
- //! `predicate(x, y)` and `predicate(y, x)` are false.
- //!
- //! Also note that the sort is guaranteed to be stable. Hence, if `x`
- //! comes before `y` in the original sequence and both `predicate(x, y)`
- //! and `predicate(y, x)` are false, then `x` will come before `y` in the
- //! resulting sequence.
- //!
- //! If no predicate is provided, the elements in the sequence must all be
- //! compile-time `Orderable`.
- //!
- //! Signature
- //! ---------
- //! Given a `Sequence` `S(T)`, a boolean `IntegralConstant` `Bool` and a
- //! binary predicate \f$ T \times T \to Bool \f$, `sort` has the following
- //! signatures. For the variant with a provided predicate,
- //! \f[
- //! \mathtt{sort} : S(T) \times (T \times T \to Bool) \to S(T)
- //! \f]
- //!
- //! for the variant without a custom predicate, `T` is required to be
- //! `Orderable`. The signature is then
- //! \f[
- //! \mathtt{sort} : S(T) \to S(T)
- //! \f]
- //!
- //! @param xs
- //! The sequence to sort.
- //!
- //! @param predicate
- //! A function called as `predicate(x, y)` for two elements `x` and `y` of
- //! the sequence, and returning a boolean `IntegralConstant` representing
- //! whether `x` is to be considered _less_ than `y`, i.e. whether `x` should
- //! appear _before_ `y` in the resulting sequence. More specifically,
- //! `predicate` must define a [strict weak ordering][1] on the elements
- //! of the sequence. When the predicate is not specified, this defaults
- //! to `less`. In the current version of the library, the predicate has
- //! to return an `IntegralConstant` holding a value convertible to a `bool`.
- //!
- //!
- //! Syntactic sugar (`sort.by`)
- //! ---------------------------
- //! `sort` can be called in a third way, which provides a nice syntax
- //! especially when working with the `ordering` combinator:
- //! @code
- //! sort.by(predicate, xs) == sort(xs, predicate)
- //! sort.by(predicate) == sort(-, predicate)
- //! @endcode
- //!
- //! where `sort(-, predicate)` denotes the partial application of
- //! `sort` to `predicate`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/sort.cpp
- //!
- //! [1]: http://en.wikipedia.org/wiki/Strict_weak_ordering
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto sort = [](auto&& xs[, auto&& predicate]) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct sort_impl : sort_impl<S, when<true>> { };
-
- struct sort_t : detail::nested_by<sort_t> {
- template <typename Xs>
- constexpr auto operator()(Xs&& xs) const;
-
- template <typename Xs, typename Predicate>
- constexpr auto operator()(Xs&& xs, Predicate&& pred) const;
- };
-
- constexpr sort_t sort{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_SORT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/span.hpp b/contrib/restricted/boost/boost/hana/fwd/span.hpp
deleted file mode 100644
index 047b2bc174..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/span.hpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::span`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_SPAN_HPP
-#define BOOST_HANA_FWD_SPAN_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/nested_by_fwd.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns a `Product` containing the longest prefix of a sequence
- //! satisfying a predicate, and the rest of the sequence.
- //! @ingroup group-Sequence
- //!
- //! The first component of the returned `Product` is a sequence for which
- //! all elements satisfy the given predicate. The second component of the
- //! returned `Product` is a sequence containing the remainder of the
- //! argument. Both or either sequences may be empty, depending on the
- //! input argument. More specifically,
- //! @code
- //! span(xs, predicate) == make_pair(take_while(xs, predicate),
- //! drop_while(xs, predicate))
- //! @endcode
- //! except that `make_pair` may be an arbitrary `Product`.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a `Sequence` `S(T)`, a `Logical` `Bool` and a predicate
- //! \f$ T \to Bool \f$, `span` has the following signature:
- //! \f[
- //! \mathtt{span} : S(T) \times (T \to Bool) \to S(T) \times S(T)
- //! \f]
- //!
- //! @param xs
- //! The sequence to break into two parts.
- //!
- //! @param predicate
- //! A function called as `predicate(x)`, where `x` is an element of the
- //! sequence, and returning a `Logical. In the current implementation of
- //! the library, `predicate` has to return a compile-time `Logical`.
- //!
- //!
- //! Syntactic sugar (`span.by`)
- //! ---------------------------
- //! `span` can be called in an alternate way, which provides a nice syntax
- //! in some cases where the predicate is short:
- //! @code
- //! span.by(predicate, xs) == span(xs, predicate)
- //! span.by(predicate) == span(-, predicate)
- //! @endcode
- //!
- //! where `span(-, predicate)` denotes the partial application of
- //! `span` to `predicate`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/span.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto span = [](auto&& xs, auto&& predicate) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct span_impl : span_impl<S, when<true>> { };
-
- struct span_t : detail::nested_by<span_t> {
- template <typename Xs, typename Pred>
- constexpr auto operator()(Xs&& xs, Pred&& pred) const;
- };
-
- constexpr span_t span{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_SPAN_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/string.hpp b/contrib/restricted/boost/boost/hana/fwd/string.hpp
deleted file mode 100644
index 80c1622500..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/string.hpp
+++ /dev/null
@@ -1,271 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::string`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_STRING_HPP
-#define BOOST_HANA_FWD_STRING_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/core/to.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- //! @ingroup group-datatypes
- //! Compile-time string.
- //!
- //! Conceptually, a `hana::string` is like a tuple holding
- //! `integral_constant`s of underlying type `char`. However, the
- //! interface of `hana::string` is not as rich as that of a tuple,
- //! because a string can only hold compile-time characters as opposed
- //! to any kind of object.
- //!
- //! Compile-time strings are used for simple purposes like being keys in a
- //! `hana::map` or tagging the members of a `Struct`. However, you might
- //! find that `hana::string` does not provide enough functionality to be
- //! used as a full-blown compile-time string implementation (e.g. regexp
- //! matching or substring finding). Indeed, providing a comprehensive
- //! string interface is a lot of job, and it is out of the scope of the
- //! library for the time being.
- //!
- //!
- //! @note
- //! The representation of `hana::string` is implementation-defined.
- //! In particular, one should not take for granted that the template
- //! parameters are `char`s. The proper way to access the contents of
- //! a `hana::string` as character constants is to use `hana::unpack`,
- //! `.c_str()` or `hana::to<char const*>`, as documented below.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! For most purposes, a `hana::string` is functionally equivalent to a
- //! tuple holding `Constant`s of underlying type `char`.
- //!
- //! 1. `Comparable`\n
- //! Two strings are equal if and only if they have the same number of
- //! characters and characters at corresponding indices are equal.
- //! @include example/string/comparable.cpp
- //!
- //! 2. `Orderable`\n
- //! The total order implemented for `Orderable` is the usual
- //! lexicographical comparison of strings.
- //! @include example/string/orderable.cpp
- //!
- //! 3. `Monoid`\n
- //! Strings form a monoid under concatenation, with the neutral element
- //! being the empty string.
- //! @include example/string/monoid.cpp
- //!
- //! 4. `Foldable`\n
- //! Folding a string is equivalent to folding the sequence of its
- //! characters.
- //! @include example/string/foldable.cpp
- //!
- //! 5. `Iterable`\n
- //! Iterating over a string is equivalent to iterating over the sequence
- //! of its characters. Also note that `operator[]` can be used instead of
- //! the `at` function.
- //! @include example/string/iterable.cpp
- //!
- //! 6. `Searchable`\n
- //! Searching through a string is equivalent to searching through the
- //! sequence of its characters.
- //! @include example/string/searchable.cpp
- //!
- //! 7. `Hashable`\n
- //! The hash of a compile-time string is a type uniquely representing
- //! that string.
- //! @include example/string/hashable.cpp
- //!
- //!
- //! Conversion to `char const*`
- //! ---------------------------
- //! A `hana::string` can be converted to a `constexpr` null-delimited
- //! string of type `char const*` by using the `c_str()` method or
- //! `hana::to<char const*>`. This makes it easy to turn a compile-time
- //! string into a runtime string. However, note that this conversion is
- //! not an embedding, because `char const*` does not model the same
- //! concepts as `hana::string` does.
- //! @include example/string/to.cpp
- //!
- //! Conversion from any Constant holding a `char const*`
- //! ----------------------------------------------------
- //! A `hana::string` can be created from any `Constant` whose underlying
- //! value is convertible to a `char const*` by using `hana::to`. The
- //! contents of the `char const*` are used to build the content of the
- //! `hana::string`.
- //! @include example/string/from_c_str.cpp
- //!
- //! Rationale for `hana::string` not being a `Constant` itself
- //! ----------------------------------------------------------
- //! The underlying type held by a `hana::string` could be either `char const*`
- //! or some other constexpr-enabled string-like container. In the first case,
- //! `hana::string` can not be a `Constant` because the models of several
- //! concepts would not be respected by the underlying type, causing `value`
- //! not to be structure-preserving. Providing an underlying value of
- //! constexpr-enabled string-like container type like `std::string_view`
- //! would be great, but that's a bit complicated for the time being.
- template <typename implementation_defined>
- struct string {
- // Default-construct a `hana::string`; no-op since `hana::string` is stateless.
- constexpr string() = default;
-
- // Copy-construct a `hana::string`; no-op since `hana::string` is stateless.
- constexpr string(string const&) = default;
-
- //! Equivalent to `hana::equal`
- template <typename X, typename Y>
- friend constexpr auto operator==(X&& x, Y&& y);
-
- //! Equivalent to `hana::not_equal`
- template <typename X, typename Y>
- friend constexpr auto operator!=(X&& x, Y&& y);
-
- //! Equivalent to `hana::less`
- template <typename X, typename Y>
- friend constexpr auto operator<(X&& x, Y&& y);
-
- //! Equivalent to `hana::greater`
- template <typename X, typename Y>
- friend constexpr auto operator>(X&& x, Y&& y);
-
- //! Equivalent to `hana::less_equal`
- template <typename X, typename Y>
- friend constexpr auto operator<=(X&& x, Y&& y);
-
- //! Equivalent to `hana::greater_equal`
- template <typename X, typename Y>
- friend constexpr auto operator>=(X&& x, Y&& y);
-
- //! Performs concatenation; equivalent to `hana::plus`
- template <typename X, typename Y>
- friend constexpr auto operator+(X&& x, Y&& y);
-
- //! Equivalent to `hana::at`
- template <typename N>
- constexpr decltype(auto) operator[](N&& n);
-
- //! Returns a null-delimited C-style string.
- static constexpr char const* c_str();
- };
-#else
- template <char ...s>
- struct string;
-#endif
-
- //! Tag representing a compile-time string.
- //! @relates hana::string
- struct string_tag { };
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- //! Create a compile-time `hana::string` from a parameter pack of `char`
- //! `integral_constant`s.
- //! @relates hana::string
- //!
- //! Given zero or more `integral_constant`s of underlying type `char`,
- //! `make<string_tag>` creates a `hana::string` containing those characters.
- //! This is provided mostly for consistency with the rest of the library,
- //! as `hana::string_c` is more convenient to use in most cases.
- //!
- //!
- //! Example
- //! -------
- //! @include example/string/make.cpp
- template <>
- constexpr auto make<string_tag> = [](auto&& ...chars) {
- return string<implementation_defined>{};
- };
-#endif
-
- //! Alias to `make<string_tag>`; provided for convenience.
- //! @relates hana::string
- constexpr auto make_string = make<string_tag>;
-
- //! Equivalent to `to<string_tag>`; provided for convenience.
- //! @relates hana::string
- constexpr auto to_string = to<string_tag>;
-
- //! Create a compile-time string from a parameter pack of characters.
- //! @relates hana::string
- //!
- //!
- //! Example
- //! -------
- //! @include example/string/string_c.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <char ...s>
- constexpr string<implementation_defined> string_c{};
-#else
- template <char ...s>
- constexpr string<s...> string_c{};
-#endif
-
- //! Create a compile-time string from a string literal.
- //! @relates hana::string
- //!
- //! This macro is a more convenient alternative to `string_c` for creating
- //! compile-time strings. However, since this macro uses a lambda
- //! internally, it can't be used in an unevaluated context.
- //!
- //!
- //! Example
- //! -------
- //! @include example/string/macro.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- auto BOOST_HANA_STRING(s) = see documentation;
- #define BOOST_HANA_STRING(s) see documentation
-
- // Note:
- // The trick above seems to exploit a bug in Doxygen, which makes the
- // BOOST_HANA_STRING macro appear in the related objects of hana::string
- // (as we want it to).
-#else
- // defined in <boost/hana/string.hpp>
-#endif
-
-#ifdef BOOST_HANA_CONFIG_ENABLE_STRING_UDL
- namespace literals {
- //! Creates a compile-time string from a string literal.
- //! @relatesalso boost::hana::string
- //!
- //! The string literal is parsed at compile-time and the result is
- //! returned as a `hana::string`. This feature is an extension that
- //! is disabled by default; see below for details.
- //!
- //! @note
- //! Only narrow string literals are supported right now; support for
- //! fancier types of string literals like wide or UTF-XX might be
- //! added in the future if there is a demand for it. See [this issue]
- //! [Hana.issue80] if you need this.
- //!
- //! @warning
- //! This user-defined literal is an extension which requires a special
- //! string literal operator that is not part of the standard yet.
- //! That operator is supported by both Clang and GCC, and several
- //! proposals were made for it to enter C++17. However, since it is
- //! not standard, it is disabled by default and defining the
- //! `BOOST_HANA_CONFIG_ENABLE_STRING_UDL` config macro is required
- //! to get this operator. Hence, if you want to stay safe, just use
- //! the `BOOST_HANA_STRING` macro instead. If you want to be fast and
- //! furious (I do), define `BOOST_HANA_CONFIG_ENABLE_STRING_UDL`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/string/literal.cpp
- //!
- //! [Hana.issue80]: https://github.com/boostorg/hana/issues/80
- template <typename CharT, CharT ...s>
- constexpr auto operator"" _s();
- }
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_STRING_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/suffix.hpp b/contrib/restricted/boost/boost/hana/fwd/suffix.hpp
deleted file mode 100644
index 331854fe5d..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/suffix.hpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::suffix`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_SUFFIX_HPP
-#define BOOST_HANA_FWD_SUFFIX_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Inserts a value after each element of a monadic structure.
- //! @ingroup group-MonadPlus
- //!
- //! Given a monadic structure `xs` and a value `z` (called the suffix),
- //! `suffix` returns a new monadic structure such that
- //! @code
- //! suffix(xs, z) == flatten(transform(xs, [](auto x) {
- //! return concat(lift<M>(x), lift<M>(z));
- //! }))
- //! @endcode
- //!
- //! For sequences, this simply corresponds to inserting the suffix after
- //! each element of the sequence. For example, given a sequence
- //! `[x1, ..., xn]`, `suffix` will return
- //! @code
- //! [x1, z, x2, z, ..., xn, z]
- //! @endcode
- //! As explained above, this can be generalized to other MonadPlus models,
- //! with various levels of interest.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a MonadPlus `M`, the signature is
- //! @f$ \mathtt{suffix} : M(T) \times T \to M(T) @f$.
- //!
- //! @param xs
- //! A monadic structure.
- //!
- //! @param sfx
- //! A value (the suffix) to insert after each element of a monadic
- //! structure.
- //!
- //!
- //! Example
- //! -------
- //! @include example/suffix.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto suffix = [](auto&& xs, auto&& sfx) {
- return tag-dispatched;
- };
-#else
- template <typename M, typename = void>
- struct suffix_impl : suffix_impl<M, when<true>> { };
-
- struct suffix_t {
- template <typename Xs, typename Sfx>
- constexpr auto operator()(Xs&& xs, Sfx&& sfx) const;
- };
-
- constexpr suffix_t suffix{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_SUFFIX_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/sum.hpp b/contrib/restricted/boost/boost/hana/fwd/sum.hpp
deleted file mode 100644
index c565ecd7f7..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/sum.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::sum`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_SUM_HPP
-#define BOOST_HANA_FWD_SUM_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/fwd/integral_constant.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Compute the sum of the numbers of a structure.
- //! @ingroup group-Foldable
- //!
- //! More generally, `sum` will take any foldable structure containing
- //! objects forming a Monoid and reduce them using the Monoid's binary
- //! operation. The initial state for folding is the identity of the
- //! Monoid. It is sometimes necessary to specify the Monoid to use;
- //! this is possible by using `sum<M>`. If no Monoid is specified,
- //! the structure will use the Monoid formed by the elements it contains
- //! (if it knows it), or `integral_constant_tag<int>` otherwise. Hence,
- //! @code
- //! sum<M>(xs) = fold_left(xs, zero<M or inferred Monoid>(), plus)
- //! sum<> = sum<integral_constant_tag<int>>
- //! @endcode
- //!
- //! For numbers, this will just compute the sum of the numbers in the
- //! `xs` structure.
- //!
- //!
- //! @note
- //! The elements of the structure are not actually required to be in the
- //! same Monoid, but it must be possible to perform `plus` on any two
- //! adjacent elements of the structure, which requires each pair of
- //! adjacent element to at least have a common Monoid embedding. The
- //! meaning of "adjacent" as used here is that two elements of the
- //! structure `x` and `y` are adjacent if and only if they are adjacent
- //! in the linearization of that structure, as documented by the Iterable
- //! concept.
- //!
- //!
- //! Why must we sometimes specify the `Monoid` by using `sum<M>`?
- //! -------------------------------------------------------------
- //! This is because sequence tags like `tuple_tag` are not parameterized
- //! (by design). Hence, we do not know what kind of objects are in the
- //! sequence, so we can't know a `0` value of which type should be
- //! returned when the sequence is empty. Therefore, the type of the
- //! `0` to return in the empty case must be specified explicitly. Other
- //! foldable structures like `hana::range`s will ignore the suggested
- //! Monoid because they know the tag of the objects they contain. This
- //! inconsistent behavior is a limitation of the current design with
- //! non-parameterized tags, but we have no good solution for now.
- //!
- //!
- //! Example
- //! -------
- //! @include example/sum.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto sum = see documentation;
-#else
- template <typename T, typename = void>
- struct sum_impl : sum_impl<T, when<true>> { };
-
- template <typename M>
- struct sum_t;
-
- template <typename M = integral_constant_tag<int>>
- constexpr sum_t<M> sum{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_SUM_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/symmetric_difference.hpp b/contrib/restricted/boost/boost/hana/fwd/symmetric_difference.hpp
deleted file mode 100644
index 2253f167eb..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/symmetric_difference.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::symmetric_difference`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_SYMMETRIC_DIFFERENCE_HPP
-#define BOOST_HANA_FWD_SYMMETRIC_DIFFERENCE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- // Note: This function is documented per datatype/concept only.
- //! @cond
- template <typename S, typename = void>
- struct symmetric_difference_impl : symmetric_difference_impl<S, when<true>> { };
- //! @endcond
-
- struct symmetric_difference_t {
- template <typename Xs, typename Ys>
- constexpr auto operator()(Xs&&, Ys&&) const;
- };
-
- constexpr symmetric_difference_t symmetric_difference{};
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_SYMMETRIC_DIFFERENCE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/take_back.hpp b/contrib/restricted/boost/boost/hana/fwd/take_back.hpp
deleted file mode 100644
index 5ba1cf932f..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/take_back.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::take_back`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_TAKE_BACK_HPP
-#define BOOST_HANA_FWD_TAKE_BACK_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns the last `n` elements of a sequence, or the whole sequence
- //! if the sequence has less than `n` elements.
- //! @ingroup group-Sequence
- //!
- //! Given a `Sequence` `xs` and an `IntegralConstant` `n`, `take_back(xs, n)`
- //! is a new sequence containing the last `n` elements of `xs`, in the
- //! same order. If `length(xs) <= n`, the whole sequence is returned and
- //! no error is triggered.
- //!
- //!
- //! @param xs
- //! The sequence to take the elements from.
- //!
- //! @param n
- //! A non-negative `IntegralConstant` representing the number of elements
- //! to keep in the resulting sequence.
- //!
- //!
- //! Example
- //! -------
- //! @include example/take_back.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto take_back = [](auto&& xs, auto const& n) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct take_back_impl : take_back_impl<S, when<true>> { };
-
- struct take_back_t {
- template <typename Xs, typename N>
- constexpr auto operator()(Xs&& xs, N const& n) const;
- };
-
- constexpr take_back_t take_back{};
-#endif
-
- //! Equivalent to `take_back`; provided for convenience.
- //! @ingroup group-Sequence
- //!
- //!
- //! Example
- //! -------
- //! @include example/take_back_c.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <std::size_t n>
- constexpr auto take_back_c = [](auto&& xs) {
- return hana::take_back(forwarded(xs), hana::size_c<n>);
- };
-#else
- template <std::size_t n>
- struct take_back_c_t;
-
- template <std::size_t n>
- constexpr take_back_c_t<n> take_back_c{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_TAKE_BACK_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/take_front.hpp b/contrib/restricted/boost/boost/hana/fwd/take_front.hpp
deleted file mode 100644
index 9ce3b9c030..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/take_front.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::take_front` and `boost::hana::take_front_c`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_TAKE_FRONT_HPP
-#define BOOST_HANA_FWD_TAKE_FRONT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Returns the first `n` elements of a sequence, or the whole sequence
- //! if the sequence has less than `n` elements.
- //! @ingroup group-Sequence
- //!
- //! Given a `Sequence` `xs` and an `IntegralConstant` `n`, `take_front(xs, n)`
- //! is a new sequence containing the first `n` elements of `xs`, in the
- //! same order. If `length(xs) <= n`, the whole sequence is returned and
- //! no error is triggered.
- //!
- //!
- //! @param xs
- //! The sequence to take the elements from.
- //!
- //! @param n
- //! A non-negative `IntegralConstant` representing the number of elements
- //! to keep in the resulting sequence.
- //!
- //!
- //! Example
- //! -------
- //! @include example/take_front.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto take_front = [](auto&& xs, auto const& n) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct take_front_impl : take_front_impl<S, when<true>> { };
-
- struct take_front_t {
- template <typename Xs, typename N>
- constexpr auto operator()(Xs&& xs, N const& n) const;
- };
-
- constexpr take_front_t take_front{};
-#endif
-
- //! Equivalent to `take_front`; provided for convenience.
- //! @ingroup group-Sequence
- //!
- //!
- //! Example
- //! -------
- //! @include example/take_front_c.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <std::size_t n>
- constexpr auto take_front_c = [](auto&& xs) {
- return hana::take_front(forwarded(xs), hana::size_c<n>);
- };
-#else
- template <std::size_t n>
- struct take_front_c_t;
-
- template <std::size_t n>
- constexpr take_front_c_t<n> take_front_c{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_TAKE_FRONT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/take_while.hpp b/contrib/restricted/boost/boost/hana/fwd/take_while.hpp
deleted file mode 100644
index 29f1ba24e0..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/take_while.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::take_while`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_TAKE_WHILE_HPP
-#define BOOST_HANA_FWD_TAKE_WHILE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Take elements from a sequence while the `predicate` is satisfied.
- //! @ingroup group-Sequence
- //!
- //! Specifically, `take_while` returns a new sequence containing the
- //! longest prefix of `xs` in which all the elements satisfy the given
- //! predicate.
- //!
- //!
- //! @param xs
- //! The sequence to take elements from.
- //!
- //! @param predicate
- //! A function called as `predicate(x)`, where `x` is an element of the
- //! sequence, and returning a `Logical` representing whether `x` should be
- //! included in the resulting sequence. In the current version of the
- //! library, `predicate` has to return a `Constant Logical`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/take_while.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto take_while = [](auto&& xs, auto&& predicate) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct take_while_impl : take_while_impl<S, when<true>> { };
-
- struct take_while_t {
- template <typename Xs, typename Pred>
- constexpr auto operator()(Xs&& xs, Pred&& pred) const;
- };
-
- constexpr take_while_t take_while{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_TAKE_WHILE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/tap.hpp b/contrib/restricted/boost/boost/hana/fwd/tap.hpp
deleted file mode 100644
index 846c1d00e6..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/tap.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::tap`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_TAP_HPP
-#define BOOST_HANA_FWD_TAP_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Tap inside a monadic chain.
- //! @ingroup group-Monad
- //!
- //! Given a function `f`, `tap<M>` returns a new function which performs
- //! `f` on its argument and then returns the argument lifted in the `M`
- //! `Monad`. Combined with the property that `chain(m, lift<M>) == m`,
- //! this provides a way of executing an action inside a monadic chain
- //! without influencing its overall result. This is useful to e.g. insert
- //! debug statements or perform actions that are not tied to the chain but
- //! that need to be executed inside of it.
- //!
- //! @note
- //! Since C++ is not a pure language, it is possible to perform side
- //! effects inside the `f` function. Actually, side effects are the
- //! only reason why one might want to use `tap`. However, one should
- //! not rely on the side effects being done in any specific order.
- //!
- //!
- //! @tparam M
- //! The tag (a `Monad`) of the monads in the tapped monadic chain.
- //!
- //! @param f
- //! A function to be executed inside a monadic chain. It will be called
- //! as `f(x)`, where `x` is a value inside the previous monad in the
- //! chain. The result of `f` is always discarded.
- //!
- //!
- //! Example
- //! -------
- //! @include example/tap.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename M>
- constexpr auto tap = [](auto&& f) {
- return tag-dispatched;
- };
-#else
- template <typename M, typename = void>
- struct tap_impl : tap_impl<M, when<true>> { };
-
- template <typename M>
- struct tap_t;
-
- template <typename M>
- constexpr tap_t<M> tap{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_TAP_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/then.hpp b/contrib/restricted/boost/boost/hana/fwd/then.hpp
deleted file mode 100644
index b4adf3d4fe..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/then.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::then`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_THEN_HPP
-#define BOOST_HANA_FWD_THEN_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Sequentially compose two monadic actions, discarding any value
- //! produced by the first but not its effects.
- //! @ingroup group-Monad
- //!
- //!
- //! @param before
- //! The first `Monad` in the monadic composition chain. The result of
- //! this monad is ignored, but its effects are combined with that of the
- //! second monad.
- //!
- //! @param xs
- //! The second `Monad` in the monadic composition chain.
- //!
- //!
- //! Example
- //! -------
- //! @include example/then.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto then = [](auto&& before, auto&& xs) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename M, typename = void>
- struct then_impl : then_impl<M, when<true>> { };
-
- struct then_t {
- template <typename Before, typename Xs>
- constexpr decltype(auto) operator()(Before&& before, Xs&& xs) const;
- };
-
- constexpr then_t then{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_THEN_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/transform.hpp b/contrib/restricted/boost/boost/hana/fwd/transform.hpp
deleted file mode 100644
index af645f3d23..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/transform.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::transform`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_TRANSFORM_HPP
-#define BOOST_HANA_FWD_TRANSFORM_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Map a function over a `Functor`.
- //! @ingroup group-Functor
- //!
- //!
- //! Signature
- //! ---------
- //! Given `F` a Functor, the signature is
- //! \f$
- //! \mathtt{transform} : F(T) \times (T \to U) \to F(U)
- //! \f$
- //!
- //! @param xs
- //! The structure to map `f` over.
- //!
- //! @param f
- //! A function called as `f(x)` on element(s) `x` of the structure,
- //! and returning a new value to replace `x` in the structure.
- //!
- //!
- //! Example
- //! -------
- //! @include example/transform.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto transform = [](auto&& xs, auto&& f) {
- return tag-dispatched;
- };
-#else
- template <typename Xs, typename = void>
- struct transform_impl : transform_impl<Xs, when<true>> { };
-
- struct transform_t {
- template <typename Xs, typename F>
- constexpr auto operator()(Xs&& xs, F&& f) const;
- };
-
- constexpr transform_t transform{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_TRANSFORM_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/tuple.hpp b/contrib/restricted/boost/boost/hana/fwd/tuple.hpp
deleted file mode 100644
index f51ab9ac22..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/tuple.hpp
+++ /dev/null
@@ -1,224 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::tuple`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_TUPLE_HPP
-#define BOOST_HANA_FWD_TUPLE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/core/to.hpp>
-#include <boost/hana/fwd/integral_constant.hpp>
-#include <boost/hana/fwd/type.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @ingroup group-datatypes
- //! General purpose index-based heterogeneous sequence with a fixed length.
- //!
- //! The tuple is the bread and butter for static metaprogramming.
- //! Conceptually, it is like a `std::tuple`; it is a container able
- //! of holding objects of different types and whose size is fixed at
- //! compile-time. However, Hana's tuple provides much more functionality
- //! than its `std` counterpart, and it is also much more efficient than
- //! all standard library implementations tested so far.
- //!
- //! Tuples are index-based sequences. If you need an associative
- //! sequence with a key-based access, then you should consider
- //! `hana::map` or `hana::set` instead.
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! `Sequence`, and all the concepts it refines
- //!
- //!
- //! Provided operators
- //! ------------------
- //! For convenience, the following operators are provided:
- //! @code
- //! xs == ys -> equal(xs, ys)
- //! xs != ys -> not_equal(xs, ys)
- //!
- //! xs < ys -> less(xs, ys)
- //! xs <= ys -> less_equal(xs, ys)
- //! xs > ys -> greater(xs, ys)
- //! xs >= ys -> greater_equal(xs, ys)
- //!
- //! xs | f -> chain(xs, f)
- //!
- //! xs[n] -> at(xs, n)
- //! @endcode
- //!
- //!
- //! Example
- //! -------
- //! @include example/tuple/tuple.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename ...Xn>
- struct tuple {
- //! Default constructs the `tuple`. Only exists when all the elements
- //! of the tuple are default constructible.
- constexpr tuple();
-
- //! Initialize each element of the tuple with the corresponding element
- //! from `xn...`. Only exists when all the elements of the tuple are
- //! copy-constructible.
- //!
- //! @note
- //! Unlike the corresponding constructor for `std::tuple`, this
- //! constructor is not explicit. This allows returning a tuple
- //! from a function with the brace-initialization syntax.
- constexpr tuple(Xn const& ...xn);
-
- //! Initialize each element of the tuple by perfect-forwarding the
- //! corresponding element in `yn...`. Only exists when all the
- //! elements of the created tuple are constructible from the
- //! corresponding perfect-forwarded value.
- //!
- //! @note
- //! Unlike the corresponding constructor for `std::tuple`, this
- //! constructor is not explicit. This allows returning a tuple
- //! from a function with the brace-initialization syntax.
- template <typename ...Yn>
- constexpr tuple(Yn&& ...yn);
-
- //! Copy-initialize a tuple from another tuple. Only exists when all
- //! the elements of the constructed tuple are copy-constructible from
- //! the corresponding element in the source tuple.
- template <typename ...Yn>
- constexpr tuple(tuple<Yn...> const& other);
-
- //! Move-initialize a tuple from another tuple. Only exists when all
- //! the elements of the constructed tuple are move-constructible from
- //! the corresponding element in the source tuple.
- template <typename ...Yn>
- constexpr tuple(tuple<Yn...>&& other);
-
- //! Assign a tuple to another tuple. Only exists when all the elements
- //! of the destination tuple are assignable from the corresponding
- //! element in the source tuple.
- template <typename ...Yn>
- constexpr tuple& operator=(tuple<Yn...> const& other);
-
- //! Move-assign a tuple to another tuple. Only exists when all the
- //! elements of the destination tuple are move-assignable from the
- //! corresponding element in the source tuple.
- template <typename ...Yn>
- constexpr tuple& operator=(tuple<Yn...>&& other);
-
- //! Equivalent to `hana::chain`.
- template <typename ...T, typename F>
- friend constexpr auto operator|(tuple<T...>, F);
-
- //! Equivalent to `hana::equal`
- template <typename X, typename Y>
- friend constexpr auto operator==(X&& x, Y&& y);
-
- //! Equivalent to `hana::not_equal`
- template <typename X, typename Y>
- friend constexpr auto operator!=(X&& x, Y&& y);
-
- //! Equivalent to `hana::less`
- template <typename X, typename Y>
- friend constexpr auto operator<(X&& x, Y&& y);
-
- //! Equivalent to `hana::greater`
- template <typename X, typename Y>
- friend constexpr auto operator>(X&& x, Y&& y);
-
- //! Equivalent to `hana::less_equal`
- template <typename X, typename Y>
- friend constexpr auto operator<=(X&& x, Y&& y);
-
- //! Equivalent to `hana::greater_equal`
- template <typename X, typename Y>
- friend constexpr auto operator>=(X&& x, Y&& y);
-
- //! Equivalent to `hana::at`
- template <typename N>
- constexpr decltype(auto) operator[](N&& n);
- };
-#else
- template <typename ...Xn>
- struct tuple;
-#endif
-
- //! Tag representing `hana::tuple`s.
- //! @related tuple
- struct tuple_tag { };
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- //! Function object for creating a `tuple`.
- //! @relates hana::tuple
- //!
- //! Given zero or more objects `xs...`, `make<tuple_tag>` returns a new tuple
- //! containing those objects. The elements are held by value inside the
- //! resulting tuple, and they are hence copied or moved in. This is
- //! analogous to `std::make_tuple` for creating Hana tuples.
- //!
- //!
- //! Example
- //! -------
- //! @include example/tuple/make.cpp
- template <>
- constexpr auto make<tuple_tag> = [](auto&& ...xs) {
- return tuple<std::decay_t<decltype(xs)>...>{forwarded(xs)...};
- };
-#endif
-
- //! Alias to `make<tuple_tag>`; provided for convenience.
- //! @relates hana::tuple
- constexpr auto make_tuple = make<tuple_tag>;
-
- //! Equivalent to `to<tuple_tag>`; provided for convenience.
- //! @relates hana::tuple
- constexpr auto to_tuple = to<tuple_tag>;
-
- //! Create a tuple specialized for holding `hana::type`s.
- //! @relates hana::tuple
- //!
- //! This is functionally equivalent to `make<tuple_tag>(type_c<T>...)`, except
- //! that using `tuple_t` allows the library to perform some compile-time
- //! optimizations. Also note that the type of the objects returned by
- //! `tuple_t` and an equivalent call to `make<tuple_tag>` may differ.
- //!
- //!
- //! Example
- //! -------
- //! @include example/tuple/tuple_t.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename ...T>
- constexpr implementation_defined tuple_t{};
-#else
- template <typename ...T>
- constexpr hana::tuple<hana::type<T>...> tuple_t{};
-#endif
-
- //! Create a tuple specialized for holding `hana::integral_constant`s.
- //! @relates hana::tuple
- //!
- //! This is functionally equivalent to `make<tuple_tag>(integral_c<T, v>...)`,
- //! except that using `tuple_c` allows the library to perform some
- //! compile-time optimizations. Also note that the type of the objects
- //! returned by `tuple_c` and an equivalent call to `make<tuple_tag>` may differ.
- //!
- //!
- //! Example
- //! -------
- //! @include example/tuple/tuple_c.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename T, T ...v>
- constexpr implementation_defined tuple_c{};
-#else
- template <typename T, T ...v>
- constexpr hana::tuple<hana::integral_constant<T, v>...> tuple_c{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_TUPLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/type.hpp b/contrib/restricted/boost/boost/hana/fwd/type.hpp
deleted file mode 100644
index c3c220db78..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/type.hpp
+++ /dev/null
@@ -1,535 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::type` and related utilities.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_TYPE_HPP
-#define BOOST_HANA_FWD_TYPE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Base class of `hana::type`; used for pattern-matching.
- //! @relates hana::type
- //!
- //! Example
- //! -------
- //! @include example/type/basic_type.cpp
- template <typename T>
- struct basic_type;
-
- //! @ingroup group-datatypes
- //! C++ type in value-level representation.
- //!
- //! A `type` is a special kind of object representing a C++ type like
- //! `int`, `void`, `std::vector<float>` or anything else you can imagine.
- //!
- //! This page explains how `type`s work at a low level. To gain
- //! intuition about type-level metaprogramming in Hana, you should
- //! read the [tutorial section](@ref tutorial-type) on type-level
- //! computations.
- //!
- //!
- //! @note
- //! For subtle reasons, the actual representation of `hana::type` is
- //! implementation-defined. In particular, `hana::type` may be a dependent
- //! type, so one should not attempt to do pattern matching on it. However,
- //! one can assume that `hana::type` _inherits_ from `hana::basic_type`,
- //! which can be useful when declaring overloaded functions:
- //! @code
- //! template <typename T>
- //! void f(hana::basic_type<T>) {
- //! // do something with T
- //! }
- //! @endcode
- //! The full story is that [ADL][] causes template arguments to be
- //! instantiated. Hence, if `hana::type` were defined naively, expressions
- //! like `hana::type<T>{} == hana::type<U>{}` would cause both `T` and `U`
- //! to be instantiated. This is usually not a problem, except when `T` or
- //! `U` should not be instantiated. To avoid these instantiations,
- //! `hana::type` is implemented using some cleverness, and that is
- //! why the representation is implementation-defined. When that
- //! behavior is not required, `hana::basic_type` can be used instead.
- //!
- //!
- //! @anchor type_lvalues_and_rvalues
- //! Lvalues and rvalues
- //! -------------------
- //! When storing `type`s in heterogeneous containers, some algorithms
- //! will return references to those objects. Since we are primarily
- //! interested in accessing their nested `::%type`, receiving a reference
- //! is undesirable; we would end up trying to fetch the nested `::%type`
- //! inside a reference type, which is a compilation error:
- //! @code
- //! auto ts = make_tuple(type_c<int>, type_c<char>);
- //! using T = decltype(ts[0_c])::type; // error: 'ts[0_c]' is a reference!
- //! @endcode
- //!
- //! For this reason, `type`s provide an overload of the unary `+`
- //! operator that can be used to turn a lvalue into a rvalue. So when
- //! using a result which might be a reference to a `type` object, one
- //! can use `+` to make sure a rvalue is obtained before fetching its
- //! nested `::%type`:
- //! @code
- //! auto ts = make_tuple(type_c<int>, type_c<char>);
- //! using T = decltype(+ts[0_c])::type; // ok: '+ts[0_c]' is an rvalue
- //! @endcode
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! 1. `Comparable`\n
- //! Two types are equal if and only if they represent the same C++ type.
- //! Hence, equality is equivalent to the `std::is_same` type trait.
- //! @include example/type/comparable.cpp
- //!
- //! 2. `Hashable`\n
- //! The hash of a type is just that type itself. In other words, `hash`
- //! is the identity function on `hana::type`s.
- //! @include example/type/hashable.cpp
- //!
- //! [ADL]: http://en.cppreference.com/w/cpp/language/adl
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename T>
- struct type {
- //! Returns rvalue of self.
- //! See @ref type_lvalues_and_rvalues "description".
- constexpr auto operator+() const;
-
- //! Equivalent to `hana::equal`
- template <typename X, typename Y>
- friend constexpr auto operator==(X&& x, Y&& y);
-
- //! Equivalent to `hana::not_equal`
- template <typename X, typename Y>
- friend constexpr auto operator!=(X&& x, Y&& y);
- };
-#else
- template <typename T>
- struct type_impl;
-
- template <typename T>
- using type = typename type_impl<T>::_;
-#endif
-
- //! Tag representing `hana::type`.
- //! @relates hana::type
- struct type_tag { };
-
- //! Creates an object representing the C++ type `T`.
- //! @relates hana::type
- template <typename T>
- constexpr type<T> type_c{};
-
- //! `decltype` keyword, lifted to Hana.
- //! @relates hana::type
- //!
- //! @deprecated
- //! The semantics of `decltype_` can be confusing, and `hana::typeid_`
- //! should be preferred instead. `decltype_` may be removed in the next
- //! major version of the library.
- //!
- //! `decltype_` is somewhat equivalent to `decltype` in that it returns
- //! the type of an object, except it returns it as a `hana::type` which
- //! is a first-class citizen of Hana instead of a raw C++ type.
- //! Specifically, given an object `x`, `decltype_` satisfies
- //! @code
- //! decltype_(x) == type_c<decltype(x) with references stripped>
- //! @endcode
- //!
- //! As you can see, `decltype_` will strip any reference from the
- //! object's actual type. The reason for doing so is explained below.
- //! However, any `cv`-qualifiers will be retained. Also, when given a
- //! `hana::type`, `decltype_` is just the identity function. Hence,
- //! for any C++ type `T`,
- //! @code
- //! decltype_(type_c<T>) == type_c<T>
- //! @endcode
- //!
- //! In conjunction with the way `metafunction` & al. are specified, this
- //! behavior makes it easier to interact with both types and values at
- //! the same time. However, it does make it impossible to create a `type`
- //! containing another `type` with `decltype_`. In other words, it is
- //! not possible to create a `type_c<decltype(type_c<T>)>` with this
- //! utility, because `decltype_(type_c<T>)` would be just `type_c<T>`
- //! instead of `type_c<decltype(type_c<T>)>`. This use case is assumed
- //! to be rare and a hand-coded function can be used if this is needed.
- //!
- //!
- //! ### Rationale for stripping the references
- //! The rules for template argument deduction are such that a perfect
- //! solution that always matches `decltype` is impossible. Hence, we
- //! have to settle on a solution that's good and and consistent enough
- //! for our needs. One case where matching `decltype`'s behavior is
- //! impossible is when the argument is a plain, unparenthesized variable
- //! or function parameter. In that case, `decltype_`'s argument will be
- //! deduced as a reference to that variable, but `decltype` would have
- //! given us the actual type of that variable, without references. Also,
- //! given the current definition of `metafunction` & al., it would be
- //! mostly useless if `decltype_` could return a reference, because it
- //! is unlikely that `F` expects a reference in its simplest use case:
- //! @code
- //! int i = 0;
- //! auto result = metafunction<F>(i);
- //! @endcode
- //!
- //! Hence, always discarding references seems to be the least painful
- //! solution.
- //!
- //!
- //! Example
- //! -------
- //! @include example/type/decltype.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto decltype_ = see documentation;
-#else
- struct decltype_t {
- template <typename T>
- constexpr auto operator()(T&&) const;
- };
-
- constexpr decltype_t decltype_{};
-#endif
-
- //! Returns a `hana::type` representing the type of a given object.
- //! @relates hana::type
- //!
- //! `hana::typeid_` is somewhat similar to `typeid` in that it returns
- //! something that represents the type of an object. However, what
- //! `typeid` returns represent the _runtime_ type of the object, while
- //! `hana::typeid_` returns the _static_ type of the object. Specifically,
- //! given an object `x`, `typeid_` satisfies
- //! @code
- //! typeid_(x) == type_c<decltype(x) with ref and cv-qualifiers stripped>
- //! @endcode
- //!
- //! As you can see, `typeid_` strips any reference and cv-qualifier from
- //! the object's actual type. The reason for doing so is that it faithfully
- //! models how the language's `typeid` behaves with respect to reference
- //! and cv-qualifiers, and it also turns out to be the desirable behavior
- //! most of the time. Also, when given a `hana::type`, `typeid_` is just
- //! the identity function. Hence, for any C++ type `T`,
- //! @code
- //! typeid_(type_c<T>) == type_c<T>
- //! @endcode
- //!
- //! In conjunction with the way `metafunction` & al. are specified, this
- //! behavior makes it easier to interact with both types and values at
- //! the same time. However, it does make it impossible to create a `type`
- //! containing another `type` using `typeid_`. This use case is assumed
- //! to be rare and a hand-coded function can be used if this is needed.
- //!
- //!
- //! Example
- //! -------
- //! @include example/type/typeid.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto typeid_ = see documentation;
-#else
- struct typeid_t {
- template <typename T>
- constexpr auto operator()(T&&) const;
- };
-
- constexpr typeid_t typeid_{};
-#endif
-
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- //! Equivalent to `decltype_`, provided for convenience.
- //! @relates hana::type
- //!
- //!
- //! Example
- //! -------
- //! @include example/type/make.cpp
- template <>
- constexpr auto make<type_tag> = hana::decltype_;
-#endif
-
- //! Equivalent to `make<type_tag>`, provided for convenience.
- //! @relates hana::type
- //!
- //!
- //! Example
- //! -------
- //! @include example/type/make.cpp
- constexpr auto make_type = hana::make<type_tag>;
-
- //! `sizeof` keyword, lifted to Hana.
- //! @relates hana::type
- //!
- //! `sizeof_` is somewhat equivalent to `sizeof` in that it returns the
- //! size of an expression or type, but it takes an arbitrary expression
- //! or a `hana::type` and returns its size as an `integral_constant`.
- //! Specifically, given an expression `expr`, `sizeof_` satisfies
- //! @code
- //! sizeof_(expr) == size_t<sizeof(decltype(expr) with references stripped)>
- //! @endcode
- //!
- //! However, given a `type`, `sizeof_` will simply fetch the size
- //! of the C++ type represented by that object. In other words,
- //! @code
- //! sizeof_(type_c<T>) == size_t<sizeof(T)>
- //! @endcode
- //!
- //! The behavior of `sizeof_` is consistent with that of `decltype_`.
- //! In particular, see `decltype_`'s documentation to understand why
- //! references are always stripped by `sizeof_`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/type/sizeof.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto sizeof_ = [](auto&& x) {
- using T = typename decltype(hana::decltype_(x))::type;
- return hana::size_c<sizeof(T)>;
- };
-#else
- struct sizeof_t {
- template <typename T>
- constexpr auto operator()(T&&) const;
- };
-
- constexpr sizeof_t sizeof_{};
-#endif
-
- //! `alignof` keyword, lifted to Hana.
- //! @relates hana::type
- //!
- //! `alignof_` is somewhat equivalent to `alignof` in that it returns the
- //! alignment required by any instance of a type, but it takes a `type`
- //! and returns its alignment as an `integral_constant`. Like `sizeof`
- //! which works for expressions and type-ids, `alignof_` can also be
- //! called on an arbitrary expression. Specifically, given an expression
- //! `expr` and a C++ type `T`, `alignof_` satisfies
- //! @code
- //! alignof_(expr) == size_t<alignof(decltype(expr) with references stripped)>
- //! alignof_(type_c<T>) == size_t<alignof(T)>
- //! @endcode
- //!
- //! The behavior of `alignof_` is consistent with that of `decltype_`.
- //! In particular, see `decltype_`'s documentation to understand why
- //! references are always stripped by `alignof_`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/type/alignof.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto alignof_ = [](auto&& x) {
- using T = typename decltype(hana::decltype_(x))::type;
- return hana::size_c<alignof(T)>;
- };
-#else
- struct alignof_t {
- template <typename T>
- constexpr auto operator()(T&&) const;
- };
-
- constexpr alignof_t alignof_{};
-#endif
-
- //! Checks whether a SFINAE-friendly expression is valid.
- //! @relates hana::type
- //!
- //! Given a SFINAE-friendly function, `is_valid` returns whether the
- //! function call is valid with the given arguments. Specifically, given
- //! a function `f` and arguments `args...`,
- //! @code
- //! is_valid(f, args...) == whether f(args...) is valid
- //! @endcode
- //!
- //! The result is returned as a compile-time `Logical`. Furthermore,
- //! `is_valid` can be used in curried form as follows:
- //! @code
- //! is_valid(f)(args...)
- //! @endcode
- //!
- //! This syntax makes it easy to create functions that check the validity
- //! of a generic expression on any given argument(s).
- //!
- //! @warning
- //! To check whether calling a nullary function `f` is valid, one should
- //! use the `is_valid(f)()` syntax. Indeed, `is_valid(f /* no args */)`
- //! will be interpreted as the currying of `is_valid` to `f` rather than
- //! the application of `is_valid` to `f` and no arguments.
- //!
- //!
- //! Example
- //! -------
- //! @include example/type/is_valid.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto is_valid = [](auto&& f) {
- return [](auto&& ...args) {
- return whether f(args...) is a valid expression;
- };
- };
-#else
- struct is_valid_t {
- template <typename F>
- constexpr auto operator()(F&&) const;
-
- template <typename F, typename ...Args>
- constexpr auto operator()(F&&, Args&&...) const;
- };
-
- constexpr is_valid_t is_valid{};
-#endif
-
- //! Lift a template to a Metafunction.
- //! @ingroup group-Metafunction
- //!
- //! Given a template class or template alias `f`, `template_<f>` is a
- //! `Metafunction` satisfying
- //! @code
- //! template_<f>(type_c<x>...) == type_c<f<x...>>
- //! decltype(template_<f>)::apply<x...>::type == f<x...>
- //! @endcode
- //!
- //! @note
- //! `template_` can't be SFINAE-friendly right now because of
- //! [Core issue 1430][1].
- //!
- //!
- //! Example
- //! -------
- //! @include example/type/template.cpp
- //!
- //! [1]: http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1430
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <template <typename ...> class F>
- constexpr auto template_ = [](basic_type<T>...) {
- return hana::type_c<F<T...>>;
- };
-#else
- template <template <typename ...> class F>
- struct template_t;
-
- template <template <typename ...> class F>
- constexpr template_t<F> template_{};
-#endif
-
- //! Lift a MPL-style metafunction to a Metafunction.
- //! @ingroup group-Metafunction
- //!
- //! Given a MPL-style metafunction, `metafunction<f>` is a `Metafunction`
- //! satisfying
- //! @code
- //! metafunction<f>(type_c<x>...) == type_c<f<x...>::type>
- //! decltype(metafunction<f>)::apply<x...>::type == f<x...>::type
- //! @endcode
- //!
- //!
- //! Example
- //! -------
- //! @include example/type/metafunction.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <template <typename ...> class F>
- constexpr auto metafunction = [](basic_type<T>...) {
- return hana::type_c<typename F<T...>::type>;
- };
-#else
- template <template <typename ...> class f>
- struct metafunction_t;
-
- template <template <typename ...> class f>
- constexpr metafunction_t<f> metafunction{};
-#endif
-
- //! Lift a MPL-style metafunction class to a Metafunction.
- //! @ingroup group-Metafunction
- //!
- //! Given a MPL-style metafunction class, `metafunction_class<f>` is a
- //! `Metafunction` satisfying
- //! @code
- //! metafunction_class<f>(type_c<x>...) == type_c<f::apply<x...>::type>
- //! decltype(metafunction_class<f>)::apply<x...>::type == f::apply<x...>::type
- //! @endcode
- //!
- //!
- //! Example
- //! -------
- //! @include example/type/metafunction_class.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename F>
- constexpr auto metafunction_class = [](basic_type<T>...) {
- return hana::type_c<typename F::template apply<T...>::type>;
- };
-#else
- template <typename F>
- struct metafunction_class_t
- : metafunction_t<F::template apply>
- { };
-
- template <typename F>
- constexpr metafunction_class_t<F> metafunction_class{};
-#endif
-
- //! Turn a `Metafunction` into a function taking `type`s and returning a
- //! default-constructed object.
- //! @ingroup group-Metafunction
- //!
- //! Given a `Metafunction` `f`, `integral` returns a new `Metafunction`
- //! that default-constructs an object of the type returned by `f`. More
- //! specifically, the following holds:
- //! @code
- //! integral(f)(t...) == decltype(f(t...))::type{}
- //! @endcode
- //!
- //! The principal use case for `integral` is to transform `Metafunction`s
- //! returning a type that inherits from a meaningful base like
- //! `std::integral_constant` into functions returning e.g. a
- //! `hana::integral_constant`.
- //!
- //! @note
- //! - This is not a `Metafunction` because it does not return a `type`.
- //! As such, it would not make sense to make `decltype(integral(f))`
- //! a MPL metafunction class like the usual `Metafunction`s are.
- //!
- //! - When using `integral` with metafunctions returning
- //! `std::integral_constant`s, don't forget to include the
- //! boost/hana/ext/std/integral_constant.hpp header to ensure
- //! Hana can interoperate with the result.
- //!
- //!
- //! Example
- //! -------
- //! @include example/type/integral.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto integral = [](auto f) {
- return [](basic_type<T>...) {
- return decltype(f)::apply<T...>::type{};
- };
- };
-#else
- template <typename F>
- struct integral_t;
-
- struct make_integral_t {
- template <typename F>
- constexpr integral_t<F> operator()(F const&) const
- { return {}; }
- };
-
- constexpr make_integral_t integral{};
-#endif
-
- //! Alias to `integral(metafunction<F>)`, provided for convenience.
- //! @ingroup group-Metafunction
- //!
- //!
- //! Example
- //! -------
- //! @include example/type/trait.cpp
- template <template <typename ...> class F>
- constexpr auto trait = hana::integral(hana::metafunction<F>);
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/unfold_left.hpp b/contrib/restricted/boost/boost/hana/fwd/unfold_left.hpp
deleted file mode 100644
index d753222630..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/unfold_left.hpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::unfold_left`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_UNFOLD_LEFT_HPP
-#define BOOST_HANA_FWD_UNFOLD_LEFT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Dual operation to `fold_left` for sequences.
- //! @ingroup group-Sequence
- //!
- //! While `fold_left` reduces a structure to a summary value from the left,
- //! `unfold_left` builds a sequence from a seed value and a function,
- //! starting from the left.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a `Sequence` `S`, an initial value `state` of tag `I`, an
- //! arbitrary Product `P` and a function \f$ f : I \to P(I, T) \f$,
- //! `unfold_left<S>` has the following signature:
- //! \f[
- //! \mathtt{unfold\_left}_S : I \times (I \to P(I, T)) \to S(T)
- //! \f]
- //!
- //! @tparam S
- //! The tag of the sequence to build up.
- //!
- //! @param state
- //! An initial value to build the sequence from.
- //!
- //! @param f
- //! A function called as `f(state)`, where `state` is an initial value,
- //! and returning
- //! 1. `nothing` if it is done producing the sequence.
- //! 2. otherwise, `just(make<P>(state, x))`, where `state` is the new
- //! initial value used in the next call to `f`, `x` is an element to
- //! be appended to the resulting sequence, and `P` is an arbitrary
- //! `Product`.
- //!
- //!
- //! Fun fact
- //! ---------
- //! In some cases, `unfold_left` can undo a `fold_left` operation:
- //! @code
- //! unfold_left<S>(fold_left(xs, state, f), g) == xs
- //! @endcode
- //!
- //! if the following holds
- //! @code
- //! g(f(x, y)) == just(make_pair(x, y))
- //! g(state) == nothing
- //! @endcode
- //!
- //!
- //! Example
- //! -------
- //! @include example/unfold_left.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename S>
- constexpr auto unfold_left = [](auto&& state, auto&& f) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct unfold_left_impl : unfold_left_impl<S, when<true>> { };
-
- template <typename S>
- struct unfold_left_t;
-
- template <typename S>
- constexpr unfold_left_t<S> unfold_left{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_UNFOLD_LEFT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/unfold_right.hpp b/contrib/restricted/boost/boost/hana/fwd/unfold_right.hpp
deleted file mode 100644
index 53ee56fc48..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/unfold_right.hpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::unfold_right`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_UNFOLD_RIGHT_HPP
-#define BOOST_HANA_FWD_UNFOLD_RIGHT_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Dual operation to `fold_right` for sequences.
- //! @ingroup group-Sequence
- //!
- //! While `fold_right` reduces a structure to a summary value from the
- //! right, `unfold_right` builds a sequence from a seed value and a
- //! function, starting from the right.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a `Sequence` `S`, an initial value `state` of tag `I`, an
- //! arbitrary Product `P` and a function \f$ f : I \to P(T, I) \f$,
- //! `unfold_right<S>` has the following signature:
- //! \f[
- //! \mathtt{unfold\_right}_S : I \times (I \to P(T, I)) \to S(T)
- //! \f]
- //!
- //! @tparam S
- //! The tag of the sequence to build up.
- //!
- //! @param state
- //! An initial value to build the sequence from.
- //!
- //! @param f
- //! A function called as `f(state)`, where `state` is an initial value,
- //! and returning
- //! 1. `nothing` if it is done producing the sequence.
- //! 2. otherwise, `just(make<P>(x, state))`, where `state` is the new
- //! initial value used in the next call to `f`, `x` is an element to
- //! be prepended to the resulting sequence, and `P` is an arbitrary
- //! `Product`.
- //!
- //!
- //! Fun fact
- //! ---------
- //! In some cases, `unfold_right` can undo a `fold_right` operation:
- //! @code
- //! unfold_right<S>(fold_right(xs, state, f), g) == xs
- //! @endcode
- //!
- //! if the following holds
- //! @code
- //! g(f(x, y)) == just(make_pair(x, y))
- //! g(state) == nothing
- //! @endcode
- //!
- //!
- //! Example
- //! -------
- //! @include example/unfold_right.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename S>
- constexpr auto unfold_right = [](auto&& state, auto&& f) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct unfold_right_impl : unfold_right_impl<S, when<true>> { };
-
- template <typename S>
- struct unfold_right_t;
-
- template <typename S>
- constexpr unfold_right_t<S> unfold_right{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_UNFOLD_RIGHT_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/union.hpp b/contrib/restricted/boost/boost/hana/fwd/union.hpp
deleted file mode 100644
index 5775151888..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/union.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::union_`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_UNION_HPP
-#define BOOST_HANA_FWD_UNION_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- // Note: This function is documented per datatype/concept only.
- //! @cond
- template <typename T, typename = void>
- struct union_impl : union_impl<T, when<true>> { };
- //! @endcond
-
- struct union_t {
- template <typename Xs, typename Ys>
- constexpr auto operator()(Xs&&, Ys&&) const;
- };
-
- constexpr union_t union_{};
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_UNION_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/unique.hpp b/contrib/restricted/boost/boost/hana/fwd/unique.hpp
deleted file mode 100644
index 5eab73eb3b..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/unique.hpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::unique`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_UNIQUE_HPP
-#define BOOST_HANA_FWD_UNIQUE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-#include <boost/hana/detail/nested_by_fwd.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Removes all consecutive duplicate elements from a Sequence.
- //! @ingroup group-Sequence
- //!
- //! Given a `Sequence` and an optional binary predicate, `unique` returns
- //! a new sequence containing only the first element of every subrange
- //! of the original sequence whose elements are all equal. In other words,
- //! it turns a sequence of the form `[a, a, b, c, c, c, d, d, d, a]` into
- //! a sequence `[a, b, c, d, a]`. The equality of two elements is
- //! determined by the provided `predicate`, or by `equal` if no
- //! `predicate` is provided.
- //!
- //!
- //! Signature
- //! ---------
- //! Given a `Sequence` `S(T)`, a `Logical` `Bool` and a binary predicate
- //! \f$ T \times T \to Bool \f$, `unique` has the following signature:
- //! \f[
- //! \mathtt{unique} : S(T) \times (T \times T \to Bool) \to S(T)
- //! \f]
- //!
- //! @param xs
- //! The sequence from which to remove consecutive duplicates.
- //!
- //! @param predicate
- //! A function called as `predicate(x, y)`, where `x` and `y` are adjacent
- //! elements of the sequence, and returning a `Logical` representing
- //! whether `x` and `y` should be considered equal. `predicate` should
- //! define an [equivalence relation][1] over the elements of the sequence.
- //! In the current implementation of the library, `predicate` has to
- //! return a compile-time `Logical`. This parameter is optional; it
- //! defaults to `equal` if it is not provided, which then requires the
- //! elements of the sequence to be compile-time `Comparable`.
- //!
- //!
- //! Syntactic sugar (`unique.by`)
- //! -----------------------------
- //! `unique` can be called in an alternate way, which provides a nice
- //! syntax, especially in conjunction with the `comparing` combinator:
- //! @code
- //! unique.by(predicate, xs) == unique(xs, predicate)
- //! unique.by(predicate) == unique(-, predicate)
- //! @endcode
- //!
- //! where `unique(-, predicate)` denotes the partial application of
- //! `unique` to `predicate`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/unique.cpp
- //!
- //! [1]: http://en.wikipedia.org/wiki/Equivalence_relation#Definition
-#if defined(BOOST_HANA_DOXYGEN_INVOKED)
- constexpr auto unique = [](auto&& xs[, auto&& predicate]) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct unique_impl : unique_impl<S, when<true>> { };
-
- struct unique_t : detail::nested_by<unique_t> {
- template <typename Xs>
- constexpr auto operator()(Xs&& xs) const;
-
- template <typename Xs, typename Predicate>
- constexpr auto operator()(Xs&& xs, Predicate&& predicate) const;
- };
-
- constexpr unique_t unique{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_UNIQUE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/unpack.hpp b/contrib/restricted/boost/boost/hana/fwd/unpack.hpp
deleted file mode 100644
index f66c29ae8b..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/unpack.hpp
+++ /dev/null
@@ -1,95 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::unpack`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_UNPACK_HPP
-#define BOOST_HANA_FWD_UNPACK_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Invoke a function with the elements of a Foldable as arguments.
- //! @ingroup group-Foldable
- //!
- //! Given a function and a foldable structure whose length can be known at
- //! compile-time, `unpack` invokes the function with the contents of that
- //! structure. In other words, `unpack(xs, f)` is equivalent to `f(x...)`,
- //! where `x...` are the elements of the structure. The length of the
- //! structure must be known at compile-time, because the version of `f`'s
- //! `operator()` that will be compiled depends on the number of arguments
- //! it is called with, which has to be known at compile-time.
- //!
- //! To create a function that accepts a foldable instead of variadic
- //! arguments, see `fuse` instead.
- //!
- //!
- //! @param xs
- //! The structure to expand into the function.
- //!
- //! @param f
- //! A function to be invoked as `f(x...)`, where `x...` are the elements
- //! of the structure as-if they had been linearized with `to<tuple_tag>`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/unpack.cpp
- //!
- //!
- //! Rationale: `unpack`'s name and parameter order
- //! ----------------------------------------------
- //! It has been suggested a couple of times that `unpack` be called
- //! `apply` instead, and that the parameter order be reversed to match
- //! that of the [proposed std::apply function][1]. However, the name
- //! `apply` is already used to denote normal function application, an use
- //! which is consistent with the Boost MPL library and with the rest of
- //! the world, especially the functional programming community.
- //! Furthermore, the author of this library considers the proposed
- //! `std::apply` to have both an unfortunate name and an unfortunate
- //! parameter order. Indeed, taking the function as the first argument
- //! means that using `std::apply` with a lambda function looks like
- //! @code
- //! std::apply([](auto ...args) {
- //! use(args...);
- //! }, tuple);
- //! @endcode
- //!
- //! which is undeniably ugly because of the trailing `, tuple)` part
- //! on the last line. On the other hand, taking the function as a
- //! second argument allows one to write
- //! @code
- //! hana::unpack(tuple, [](auto ...args) {
- //! use(args...);
- //! });
- //! @endcode
- //!
- //! which looks much nicer. Because of these observations, the author
- //! of this library feels justified to use `unpack` instead of `apply`,
- //! and to use a sane parameter order.
- //!
- //! [1]: http://en.cppreference.com/w/cpp/experimental/apply
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto unpack = [](auto&& xs, auto&& f) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename T, typename = void>
- struct unpack_impl : unpack_impl<T, when<true>> { };
-
- struct unpack_t {
- template <typename Xs, typename F>
- constexpr decltype(auto) operator()(Xs&& xs, F&& f) const;
- };
-
- constexpr unpack_t unpack{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_UNPACK_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/value.hpp b/contrib/restricted/boost/boost/hana/fwd/value.hpp
deleted file mode 100644
index 7db9384f77..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/value.hpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::value`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_VALUE_HPP
-#define BOOST_HANA_FWD_VALUE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Return the compile-time value associated to a constant.
- //! @ingroup group-Constant
- //!
- //! This function returns the value associated to a `Constant`. That
- //! value is always a constant expression. The normal way of using
- //! `value` on an object `c` is
- //! @code
- //! constexpr auto result = hana::value<decltype(c)>();
- //! @endcode
- //!
- //! However, for convenience, an overload of `value` is provided so that
- //! it can be called as:
- //! @code
- //! constexpr auto result = hana::value(c);
- //! @endcode
- //!
- //! This overload works by taking a `const&` to its argument, and then
- //! forwarding to the first version of `value`. Since it does not use
- //! its argument, the result can still be a constant expression, even
- //! if the argument is not a constant expression.
- //!
- //! @note
- //! `value<T>()` is tag-dispatched as `value_impl<C>::%apply<T>()`, where
- //! `C` is the tag of `T`.
- //!
- //! @note
- //! `hana::value` is an overloaded function, not a function object.
- //! Hence, it can't be passed to higher-order algorithms. If you need
- //! an equivalent function object, use `hana::value_of` instead.
- //!
- //!
- //! Example
- //! -------
- //! @include example/value.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename T>
- constexpr auto value = []() -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename C, typename = void>
- struct value_impl : value_impl<C, when<true>> { };
-
- template <typename T>
- constexpr decltype(auto) value();
-
- template <typename T>
- constexpr decltype(auto) value(T const&)
- { return hana::value<T>(); }
-#endif
-
- //! Equivalent to `value`, but can be passed to higher-order algorithms.
- //! @ingroup group-Constant
- //!
- //! This function object is equivalent to `value`, except it can be passed
- //! to higher order algorithms because it is a function object. `value`
- //! can't be passed to higher-order algorithms because it is implemented
- //! as an overloaded function.
- //!
- //! @note
- //! This function is a simple alias to `value`, and hence it is not
- //! tag-dispatched and can't be customized.
- //!
- //!
- //! Example
- //! -------
- //! @include example/value_of.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto value_of = [](auto const& c) -> decltype(auto) {
- return hana::value(c);
- };
-#else
- struct value_of_t {
- template <typename T>
- constexpr decltype(auto) operator()(T const&) const
- { return hana::value<T>(); }
- };
-
- constexpr value_of_t value_of{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_VALUE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/while.hpp b/contrib/restricted/boost/boost/hana/fwd/while.hpp
deleted file mode 100644
index 14923797b5..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/while.hpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::while_`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_WHILE_HPP
-#define BOOST_HANA_FWD_WHILE_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Apply a function to an initial state while some predicate is satisfied.
- //! @ingroup group-Logical
- //!
- //! This method is a natural extension of the `while` language construct
- //! to manipulate a state whose type may change from one iteration to
- //! another. However, note that having a state whose type changes from
- //! one iteration to the other is only possible as long as the predicate
- //! returns a `Logical` whose truth value is known at compile-time.
- //!
- //! Specifically, `while_(pred, state, f)` is equivalent to
- //! @code
- //! f(...f(f(state)))
- //! @endcode
- //! where `f` is iterated as long as `pred(f(...))` is a true-valued
- //! `Logical`.
- //!
- //!
- //! @param pred
- //! A predicate called on the state or on the result of applying `f` a
- //! certain number of times to the state, and returning whether `f`
- //! should be applied one more time.
- //!
- //! @param state
- //! The initial state on which `f` is applied.
- //!
- //! @param f
- //! A function that is iterated on the initial state. Note that the
- //! return type of `f` may change from one iteration to the other,
- //! but only while `pred` returns a compile-time `Logical`. In other
- //! words, `decltype(f(stateN))` may differ from `decltype(f(stateN+1))`,
- //! but only if `pred(f(stateN))` returns a compile-time `Logical`.
- //!
- //!
- //! Example
- //! -------
- //! @include example/while.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto while_ = [](auto&& pred, auto&& state, auto&& f) -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename L, typename = void>
- struct while_impl : while_impl<L, when<true>> { };
-
- struct while_t {
- template <typename Pred, typename State, typename F>
- constexpr decltype(auto) operator()(Pred&& pred, State&& state, F&& f) const;
- };
-
- constexpr while_t while_{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_WHILE_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/zero.hpp b/contrib/restricted/boost/boost/hana/fwd/zero.hpp
deleted file mode 100644
index 412614786d..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/zero.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::zero`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ZERO_HPP
-#define BOOST_HANA_FWD_ZERO_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Identity of `plus`.
- //! @ingroup group-Monoid
- //!
- //! @tparam M
- //! The tag (a `Monoid`) of the returned identity.
- //!
- //!
- //! Example
- //! -------
- //! @include example/zero.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- template <typename M>
- constexpr auto zero = []() -> decltype(auto) {
- return tag-dispatched;
- };
-#else
- template <typename M, typename = void>
- struct zero_impl : zero_impl<M, when<true>> { };
-
- template <typename M>
- struct zero_t;
-
- template <typename M>
- constexpr zero_t<M> zero{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ZERO_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/zip.hpp b/contrib/restricted/boost/boost/hana/fwd/zip.hpp
deleted file mode 100644
index 505decfcf0..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/zip.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::zip`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ZIP_HPP
-#define BOOST_HANA_FWD_ZIP_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Zip one sequence or more.
- //! @ingroup group-Sequence
- //!
- //! Given `n` sequences `s1, ..., sn`, `zip` produces a sequence whose
- //! `i`-th element is a tuple of `(s1[i], ..., sn[i])`, where `sk[i]`
- //! denotes the `i`-th element of the `k`-th sequence. In other words,
- //! `zip` produces a sequence of the form
- //! @code
- //! [
- //! make_tuple(s1[0], ..., sn[0]),
- //! make_tuple(s1[1], ..., sn[1]),
- //! ...
- //! make_tuple(s1[M], ..., sn[M])
- //! ]
- //! @endcode
- //! where `M` is the length of the sequences, which are all assumed to
- //! have the same length. Assuming the sequences to all have the same size
- //! allows the library to perform some optimizations. To zip sequences
- //! that may have different lengths, `zip_shortest` should be used
- //! instead. Also note that it is an error to provide no sequence at all,
- //! i.e. `zip` expects at least one sequence.
- //!
- //!
- //! Example
- //! -------
- //! @include example/zip.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto zip = [](auto&& x1, ..., auto&& xn) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct zip_impl : zip_impl<S, when<true>> { };
-
- struct zip_t {
- template <typename Xs, typename ...Ys>
- constexpr auto operator()(Xs&& xs, Ys&& ...ys) const;
- };
-
- constexpr zip_t zip{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ZIP_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/zip_shortest.hpp b/contrib/restricted/boost/boost/hana/fwd/zip_shortest.hpp
deleted file mode 100644
index 5f0622789d..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/zip_shortest.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::zip_shortest`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ZIP_SHORTEST_HPP
-#define BOOST_HANA_FWD_ZIP_SHORTEST_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Zip one sequence or more.
- //! @ingroup group-Sequence
- //!
- //! Given `n` sequences `s1, ..., sn`, `zip_shortest` produces a sequence
- //! whose `i`-th element is a tuple of `(s1[i], ..., sn[i])`, where `sk[i]`
- //! denotes the `i`-th element of the `k`-th sequence. In other words,
- //! `zip_shortest` produces a sequence of the form
- //! @code
- //! [
- //! make_tuple(s1[0], ..., sn[0]),
- //! make_tuple(s1[1], ..., sn[1]),
- //! ...
- //! make_tuple(s1[M], ..., sn[M])
- //! ]
- //! @endcode
- //! where `M` is the length of the shortest sequence. Hence, the returned
- //! sequence stops when the shortest input sequence is exhausted. If you
- //! know that all the sequences you are about to zip have the same length,
- //! you should use `zip` instead, since it can be more optimized. Also
- //! note that it is an error to provide no sequence at all, i.e.
- //! `zip_shortest` expects at least one sequence.
- //!
- //!
- //! Example
- //! -------
- //! @include example/zip_shortest.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto zip_shortest = [](auto&& x1, ..., auto&& xn) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct zip_shortest_impl : zip_shortest_impl<S, when<true>> { };
-
- struct zip_shortest_t {
- template <typename Xs, typename ...Ys>
- constexpr auto operator()(Xs&& xs, Ys&& ...ys) const;
- };
-
- constexpr zip_shortest_t zip_shortest{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ZIP_SHORTEST_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/zip_shortest_with.hpp b/contrib/restricted/boost/boost/hana/fwd/zip_shortest_with.hpp
deleted file mode 100644
index 47d5a43b61..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/zip_shortest_with.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::zip_shortest_with`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ZIP_SHORTEST_WITH_HPP
-#define BOOST_HANA_FWD_ZIP_SHORTEST_WITH_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Zip one sequence or more with a given function.
- //! @ingroup group-Sequence
- //!
- //! Given a `n`-ary function `f` and `n` sequences `s1, ..., sn`,
- //! `zip_shortest_with` produces a sequence whose `i`-th element is
- //! `f(s1[i], ..., sn[i])`, where `sk[i]` denotes the `i`-th element of
- //! the `k`-th sequence. In other words, `zip_shortest_with` produces a
- //! sequence of the form
- //! @code
- //! [
- //! f(s1[0], ..., sn[0]),
- //! f(s1[1], ..., sn[1]),
- //! ...
- //! f(s1[M], ..., sn[M])
- //! ]
- //! @endcode
- //! where `M` is the length of the shortest sequence. Hence, the returned
- //! sequence stops when the shortest input sequence is exhausted. If you
- //! know that all the sequences you are about to zip have the same length,
- //! you should use `zip_with` instead, since it can be more optimized.
- //! Also note that it is an error to provide no sequence at all, i.e.
- //! `zip_shortest_with` expects at least one sequence.
- //!
- //!
- //! Example
- //! -------
- //! @include example/zip_shortest_with.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto zip_shortest_with = [](auto&& f, auto&& x1, ..., auto&& xn) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct zip_shortest_with_impl : zip_shortest_with_impl<S, when<true>> { };
-
- struct zip_shortest_with_t {
- template <typename F, typename Xs, typename ...Ys>
- constexpr auto operator()(F&& f, Xs&& xs, Ys&& ...ys) const;
- };
-
- constexpr zip_shortest_with_t zip_shortest_with{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ZIP_SHORTEST_WITH_HPP
diff --git a/contrib/restricted/boost/boost/hana/fwd/zip_with.hpp b/contrib/restricted/boost/boost/hana/fwd/zip_with.hpp
deleted file mode 100644
index 3e153a3e6a..0000000000
--- a/contrib/restricted/boost/boost/hana/fwd/zip_with.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/*!
-@file
-Forward declares `boost::hana::zip_with`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_FWD_ZIP_WITH_HPP
-#define BOOST_HANA_FWD_ZIP_WITH_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/when.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! Zip one sequence or more with a given function.
- //! @ingroup group-Sequence
- //!
- //! Given a `n`-ary function `f` and `n` sequences `s1, ..., sn`,
- //! `zip_with` produces a sequence whose `i`-th element is
- //! `f(s1[i], ..., sn[i])`, where `sk[i]` denotes the `i`-th element of
- //! the `k`-th sequence. In other words, `zip_with` produces a sequence
- //! of the form
- //! @code
- //! [
- //! f(s1[0], ..., sn[0]),
- //! f(s1[1], ..., sn[1]),
- //! ...
- //! f(s1[M], ..., sn[M])
- //! ]
- //! @endcode
- //! where `M` is the length of the sequences, which are all assumed to
- //! have the same length. Assuming the sequences to all have the same size
- //! allows the library to perform some optimizations. To zip sequences
- //! that may have different lengths, `zip_shortest_with` should be used
- //! instead. Also note that it is an error to provide no sequence at all,
- //! i.e. `zip_with` expects at least one sequence.
- //!
- //!
- //! Example
- //! -------
- //! @include example/zip_with.cpp
-#ifdef BOOST_HANA_DOXYGEN_INVOKED
- constexpr auto zip_with = [](auto&& f, auto&& x1, ..., auto&& xn) {
- return tag-dispatched;
- };
-#else
- template <typename S, typename = void>
- struct zip_with_impl : zip_with_impl<S, when<true>> { };
-
- struct zip_with_t {
- template <typename F, typename Xs, typename ...Ys>
- constexpr auto operator()(F&& f, Xs&& xs, Ys&& ...ys) const;
- };
-
- constexpr zip_with_t zip_with{};
-#endif
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_FWD_ZIP_WITH_HPP
diff --git a/contrib/restricted/boost/boost/hana/greater.hpp b/contrib/restricted/boost/boost/hana/greater.hpp
deleted file mode 100644
index 84f7e23a1a..0000000000
--- a/contrib/restricted/boost/boost/hana/greater.hpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*!
-@file
-Defines `boost::hana::greater`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_GREATER_HPP
-#define BOOST_HANA_GREATER_HPP
-
-#include <boost/hana/fwd/greater.hpp>
-
-#include <boost/hana/concept/orderable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/common.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/concepts.hpp>
-#include <boost/hana/detail/has_common_embedding.hpp>
-#include <boost/hana/detail/nested_than.hpp> // required by fwd decl
-#include <boost/hana/if.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X, typename Y>
- constexpr decltype(auto) greater_t::operator()(X&& x, Y&& y) const {
- using T = typename hana::tag_of<X>::type;
- using U = typename hana::tag_of<Y>::type;
- using Greater = BOOST_HANA_DISPATCH_IF(decltype(greater_impl<T, U>{}),
- hana::Orderable<T>::value &&
- hana::Orderable<U>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Orderable<T>::value,
- "hana::greater(x, y) requires 'x' to be Orderable");
-
- static_assert(hana::Orderable<U>::value,
- "hana::greater(x, y) requires 'y' to be Orderable");
- #endif
-
- return Greater::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- //! @endcond
- template <typename T, typename U, bool condition>
- struct greater_impl<T, U, when<condition>> : default_ {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- return hana::less(static_cast<Y&&>(y),
- static_cast<X&&>(x));
- }
- };
-
- // Cross-type overload
- template <typename T, typename U>
- struct greater_impl<T, U, when<
- detail::has_nontrivial_common_embedding<Orderable, T, U>::value
- >> {
- using C = typename hana::common<T, U>::type;
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- return hana::greater(hana::to<C>(static_cast<X&&>(x)),
- hana::to<C>(static_cast<Y&&>(y)));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_GREATER_HPP
diff --git a/contrib/restricted/boost/boost/hana/greater_equal.hpp b/contrib/restricted/boost/boost/hana/greater_equal.hpp
deleted file mode 100644
index e9b34d2587..0000000000
--- a/contrib/restricted/boost/boost/hana/greater_equal.hpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/*!
-@file
-Defines `boost::hana::greater_equal`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_GREATER_EQUAL_HPP
-#define BOOST_HANA_GREATER_EQUAL_HPP
-
-#include <boost/hana/fwd/greater_equal.hpp>
-
-#include <boost/hana/concept/orderable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/common.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/concepts.hpp>
-#include <boost/hana/detail/has_common_embedding.hpp>
-#include <boost/hana/detail/nested_than.hpp> // required by fwd decl
-#include <boost/hana/if.hpp>
-#include <boost/hana/not.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X, typename Y>
- constexpr decltype(auto) greater_equal_t::operator()(X&& x, Y&& y) const {
- using T = typename hana::tag_of<X>::type;
- using U = typename hana::tag_of<Y>::type;
- using GreaterEqual = BOOST_HANA_DISPATCH_IF(
- decltype(greater_equal_impl<T, U>{}),
- hana::Orderable<T>::value &&
- hana::Orderable<U>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Orderable<T>::value,
- "hana::greater_equal(x, y) requires 'x' to be Orderable");
-
- static_assert(hana::Orderable<U>::value,
- "hana::greater_equal(x, y) requires 'y' to be Orderable");
- #endif
-
- return GreaterEqual::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- //! @endcond
-
- template <typename T, typename U, bool condition>
- struct greater_equal_impl<T, U, when<condition>> : default_ {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X x, Y y) {
- return hana::not_(hana::less(static_cast<X&&>(x),
- static_cast<Y&&>(y)));
- }
- };
-
- // Cross-type overload
- template <typename T, typename U>
- struct greater_equal_impl<T, U, when<
- detail::has_nontrivial_common_embedding<Orderable, T, U>::value
- >> {
- using C = typename hana::common<T, U>::type;
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- return hana::greater_equal(hana::to<C>(static_cast<X&&>(x)),
- hana::to<C>(static_cast<Y&&>(y)));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_GREATER_EQUAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/group.hpp b/contrib/restricted/boost/boost/hana/group.hpp
deleted file mode 100644
index 52a3d64f70..0000000000
--- a/contrib/restricted/boost/boost/hana/group.hpp
+++ /dev/null
@@ -1,158 +0,0 @@
-/*!
-@file
-Defines `boost::hana::group`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_GROUP_HPP
-#define BOOST_HANA_GROUP_HPP
-
-#include <boost/hana/fwd/group.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/detail/algorithm.hpp>
-#include <boost/hana/detail/array.hpp>
-#include <boost/hana/detail/nested_by.hpp> // required by fwd decl
-#include <boost/hana/equal.hpp>
-#include <boost/hana/length.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs>
- constexpr auto group_t::operator()(Xs&& xs) const {
- using S = typename hana::tag_of<Xs>::type;
- using Group = BOOST_HANA_DISPATCH_IF(group_impl<S>,
- hana::Sequence<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::group(xs) requires 'xs' to be a Sequence");
- #endif
-
- return Group::apply(static_cast<Xs&&>(xs));
- }
-
- template <typename Xs, typename Predicate>
- constexpr auto group_t::operator()(Xs&& xs, Predicate&& pred) const {
- using S = typename hana::tag_of<Xs>::type;
- using Group = BOOST_HANA_DISPATCH_IF(group_impl<S>,
- hana::Sequence<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::group(xs, predicate) requires 'xs' to be a Sequence");
- #endif
-
- return Group::apply(static_cast<Xs&&>(xs),
- static_cast<Predicate&&>(pred));
- }
- //! @endcond
-
- namespace detail {
- template <typename Xs, std::size_t ...i>
- constexpr auto get_subsequence_(Xs&& xs, std::index_sequence<i...>) {
- using S = typename hana::tag_of<Xs>::type;
- return hana::make<S>(hana::at_c<i>(static_cast<Xs&&>(xs))...);
- }
-
- template <std::size_t offset, typename Indices>
- struct offset_by;
-
- template <std::size_t offset, std::size_t ...i>
- struct offset_by<offset, std::index_sequence<i...>> {
- using type = std::index_sequence<(offset + i)...>;
- };
-
- template <bool ...b>
- struct group_indices {
- static constexpr bool bs[sizeof...(b)] = {b...};
- static constexpr std::size_t n_groups =
- detail::count(bs, bs + sizeof(bs), false) + 1;
-
- static constexpr auto compute_info() {
- detail::array<std::size_t, n_groups> sizes{}, offsets{};
- for (std::size_t g = 0, i = 0, offset = 0; g < n_groups; ++g) {
- offsets[g] = offset;
-
- sizes[g] = 1;
- while (i < sizeof...(b) && bs[i++])
- ++sizes[g];
-
- offset += sizes[g];
- }
- return std::make_pair(offsets, sizes);
- }
-
- static constexpr auto info = compute_info();
- static constexpr auto group_offsets = info.first;
- static constexpr auto group_sizes = info.second;
-
- template <typename S, typename Xs, std::size_t ...i>
- static constexpr auto finish(Xs&& xs, std::index_sequence<i...>) {
- return hana::make<S>(
- detail::get_subsequence_(
- static_cast<Xs&&>(xs),
- typename offset_by<
- group_offsets[i],
- std::make_index_sequence<group_sizes[i]>
- >::type{}
- )...
- );
- }
- };
- } // end namespace detail
-
- template <typename S, bool condition>
- struct group_impl<S, when<condition>> : default_ {
- template <typename Xs, typename Pred, std::size_t ...i>
- static constexpr auto
- group_helper(Xs&& xs, Pred&& pred, std::index_sequence<0, i...>) {
- using info = detail::group_indices<static_cast<bool>(decltype(
- pred(hana::at_c<i - 1>(static_cast<Xs&&>(xs)),
- hana::at_c<i>(static_cast<Xs&&>(xs)))
- )::value)...>;
- return info::template finish<S>(static_cast<Xs&&>(xs),
- std::make_index_sequence<info::n_groups>{}
- );
- }
-
- template <typename Xs, typename Pred>
- static constexpr auto
- group_helper(Xs&& xs, Pred&&, std::index_sequence<0>) {
- return hana::make<S>(static_cast<Xs&&>(xs));
- }
-
- template <typename Xs, typename Pred>
- static constexpr auto
- group_helper(Xs&&, Pred&&, std::index_sequence<>) {
- return hana::make<S>();
- }
-
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&& pred) {
- constexpr std::size_t len = decltype(hana::length(xs))::value;
- return group_helper(static_cast<Xs&&>(xs),
- static_cast<Pred&&>(pred),
- std::make_index_sequence<len>{});
- }
-
- template <typename Xs>
- static constexpr auto apply(Xs&& xs)
- { return group_impl::apply(static_cast<Xs&&>(xs), hana::equal); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_GROUP_HPP
diff --git a/contrib/restricted/boost/boost/hana/hash.hpp b/contrib/restricted/boost/boost/hana/hash.hpp
deleted file mode 100644
index 538ef36eca..0000000000
--- a/contrib/restricted/boost/boost/hana/hash.hpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/*!
-@file
-Defines `boost::hana::hash`.
-
-@copyright Jason Rice 2016
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_HASH_HPP
-#define BOOST_HANA_HASH_HPP
-
-#include <boost/hana/fwd/hash.hpp>
-
-#include <boost/hana/concept/hashable.hpp>
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/fwd/integral_constant.hpp>
-#include <boost/hana/type.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X>
- constexpr auto hash_t::operator()(X const& x) const {
- using Tag = typename hana::tag_of<X>::type;
- using Hash = BOOST_HANA_DISPATCH_IF(hash_impl<Tag>,
- hana::Hashable<Tag>::value
- );
-
-#ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Hashable<Tag>::value,
- "hana::hash(x) requires 'x' to be Hashable");
-#endif
-
- return Hash::apply(x);
- }
- //! @endcond
-
- template <typename Tag, bool condition>
- struct hash_impl<Tag, when<condition>> : default_ {
- template <typename X>
- static constexpr auto apply(X const&) = delete;
- };
-
- namespace detail {
- template <typename T, typename = void>
- struct hash_integral_helper;
-
- template <typename Member, typename T>
- struct hash_integral_helper<Member T::*> {
- template <typename X>
- static constexpr auto apply(X const&) {
- return hana::type_c<hana::integral_constant<Member T::*, X::value>>;
- }
- };
-
- template <typename T>
- struct hash_integral_helper<T,
- typename std::enable_if<std::is_signed<T>::value>::type
- > {
- template <typename X>
- static constexpr auto apply(X const&) {
- constexpr signed long long x = X::value;
- return hana::type_c<hana::integral_constant<signed long long, x>>;
- }
- };
-
- template <typename T>
- struct hash_integral_helper<T,
- typename std::enable_if<std::is_unsigned<T>::value>::type
- > {
- template <typename X>
- static constexpr auto apply(X const&) {
- constexpr unsigned long long x = X::value;
- return hana::type_c<hana::integral_constant<unsigned long long, x>>;
- }
- };
-
- template <>
- struct hash_integral_helper<bool> {
- template <typename X>
- static constexpr auto apply(X const&) {
- return hana::type_c<hana::integral_constant<bool, X::value>>;
- }
- };
-
- template <>
- struct hash_integral_helper<char> {
- template <typename X>
- static constexpr auto apply(X const&) {
- using T = std::conditional<std::is_signed<char>::value,
- signed long long, unsigned long long
- >::type;
- constexpr T x = X::value;
- return hana::type_c<hana::integral_constant<T, x>>;
- }
- };
- }
-
- template <typename Tag>
- struct hash_impl<Tag, when<hana::IntegralConstant<Tag>::value>> {
- template <typename X>
- static constexpr auto apply(X const& x) {
- using T = typename std::remove_cv<decltype(X::value)>::type;
- return detail::hash_integral_helper<T>::apply(x);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_HASH_HPP
diff --git a/contrib/restricted/boost/boost/hana/if.hpp b/contrib/restricted/boost/boost/hana/if.hpp
deleted file mode 100644
index 5d7f2bb969..0000000000
--- a/contrib/restricted/boost/boost/hana/if.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*!
-@file
-Defines `boost::hana::if_`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_IF_HPP
-#define BOOST_HANA_IF_HPP
-
-#include <boost/hana/fwd/if.hpp>
-
-#include <boost/hana/concept/logical.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/eval_if.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Cond, typename Then, typename Else>
- constexpr decltype(auto) if_t::operator()(Cond&& cond, Then&& then_, Else&& else_) const {
- using Bool = typename hana::tag_of<Cond>::type;
- using If = BOOST_HANA_DISPATCH_IF(if_impl<Bool>,
- hana::Logical<Bool>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Logical<Bool>::value,
- "hana::if_(cond, then, else) requires 'cond' to be a Logical");
- #endif
-
- return If::apply(static_cast<Cond&&>(cond),
- static_cast<Then&&>(then_),
- static_cast<Else&&>(else_));
- }
- //! @endcond
-
- namespace detail {
- template <typename T>
- struct hold {
- T value;
- constexpr T&& operator()() && { return static_cast<T&&>(value); }
- };
- }
-
- template <typename L, bool condition>
- struct if_impl<L, when<condition>> : default_ {
- template <typename C, typename T, typename E>
- static constexpr auto apply(C&& c, T&& t, E&& e) {
- return hana::eval_if(static_cast<C&&>(c),
- detail::hold<T&&>{static_cast<T&&>(t)},
- detail::hold<E&&>{static_cast<E&&>(e)}
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/index_if.hpp b/contrib/restricted/boost/boost/hana/index_if.hpp
deleted file mode 100644
index dfa508a81e..0000000000
--- a/contrib/restricted/boost/boost/hana/index_if.hpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*!
-@file
-Defines `boost::hana::index_if`.
-
-@copyright Louis Dionne 2013-2017
-@copyright Jason Rice 2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_INDEX_IF_HPP
-#define BOOST_HANA_INDEX_IF_HPP
-
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/concept/iterable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/detail/index_if.hpp>
-#include <boost/hana/fwd/at.hpp>
-#include <boost/hana/fwd/basic_tuple.hpp>
-#include <boost/hana/fwd/index_if.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/optional.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Pred>
- constexpr auto index_if_t::operator()(Xs&& xs, Pred&& pred) const {
- using S = typename hana::tag_of<Xs>::type;
- using IndexIf = BOOST_HANA_DISPATCH_IF(index_if_impl<S>,
- hana::Iterable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Iterable<S>::value,
- "hana::index_if(xs, pred) requires 'xs' to be a Iterable");
- #endif
-
- return IndexIf::apply(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred));
- }
- //! @endcond
-
- namespace detail {
- template <std::size_t i, std::size_t N, bool Done>
- struct iterate_while;
-
- template <std::size_t i, std::size_t N>
- struct iterate_while<i, N, false> {
- template <typename Xs, typename Pred>
- using f = typename iterate_while<i + 1, N,
- static_cast<bool>(detail::decay<decltype(
- std::declval<Pred>()(
- hana::at(std::declval<Xs>(), hana::size_c<i>)))>::type::value)
- >::template f<Xs, Pred>;
- };
-
- template <std::size_t N>
- struct iterate_while<N, N, false> {
- template <typename Xs, typename Pred>
- using f = hana::optional<>;
- };
-
- template <std::size_t i, std::size_t N>
- struct iterate_while<i, N, true> {
- template <typename Xs, typename Pred>
- using f = hana::optional<hana::size_t<i - 1>>;
- };
- }
-
- template <typename Tag>
- struct index_if_impl<Tag, when<Foldable<Tag>::value>> {
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs const& xs, Pred const&)
- -> typename detail::iterate_while<0,
- decltype(hana::length(xs))::value, false>
- ::template f<Xs, Pred>
- { return {}; }
- };
-
- template <typename It>
- struct index_if_impl<It, when<!Foldable<It>::value>> {
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs const&, Pred const&)
- -> typename detail::iterate_while<0,
- static_cast<std::size_t>(-1), false>
- ::template f<Xs, Pred>
- { return {}; }
- };
-
- // basic_tuple is implemented here to solve circular dependency issues.
- template <>
- struct index_if_impl<basic_tuple_tag> {
- template <typename ...Xs, typename Pred>
- static constexpr auto apply(basic_tuple<Xs...> const&, Pred const&)
- -> typename detail::index_if<Pred, Xs...>::type
- { return {}; }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_INDEX_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/insert.hpp b/contrib/restricted/boost/boost/hana/insert.hpp
deleted file mode 100644
index 3752a64a29..0000000000
--- a/contrib/restricted/boost/boost/hana/insert.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*!
-@file
-Defines `boost::hana::insert`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_INSERT_HPP
-#define BOOST_HANA_INSERT_HPP
-
-#include <boost/hana/fwd/insert.hpp>
-
-#include <boost/hana/append.hpp>
-#include <boost/hana/concat.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/drop_front.hpp>
-#include <boost/hana/take_front.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Set, typename ...Args>
- constexpr decltype(auto) insert_t::operator()(Set&& set, Args&& ...args) const {
- return insert_impl<typename hana::tag_of<Set>::type>::apply(
- static_cast<Set&&>(set),
- static_cast<Args&&>(args)...
- );
- }
- //! @endcond
-
- template <typename T, bool condition>
- struct insert_impl<T, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- template <typename S>
- struct insert_impl<S, when<Sequence<S>::value>> {
- template <typename Xs, typename N, typename Element>
- static constexpr auto apply(Xs&& xs, N const& n, Element&& e) {
- return hana::concat(hana::append(hana::take_front(xs, n),
- static_cast<Element&&>(e)),
- hana::drop_front(xs, n));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_INSERT_HPP
diff --git a/contrib/restricted/boost/boost/hana/insert_range.hpp b/contrib/restricted/boost/boost/hana/insert_range.hpp
deleted file mode 100644
index 26ad8f765e..0000000000
--- a/contrib/restricted/boost/boost/hana/insert_range.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/*!
-@file
-Defines `boost::hana::insert_range`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_INSERT_RANGE_HPP
-#define BOOST_HANA_INSERT_RANGE_HPP
-
-#include <boost/hana/fwd/insert_range.hpp>
-
-#include <boost/hana/concat.hpp>
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/drop_front.hpp>
-#include <boost/hana/take_front.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename N, typename Elements>
- constexpr auto insert_range_t::operator()(Xs&& xs, N&& n, Elements&& elements) const {
- using S = typename hana::tag_of<Xs>::type;
- using InsertRange = BOOST_HANA_DISPATCH_IF(insert_range_impl<S>,
- hana::Sequence<Xs>::value &&
- hana::Foldable<Elements>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<Xs>::value,
- "hana::insert_range(xs, n, elements) requires 'xs' to be a Sequence");
-
- static_assert(hana::Foldable<Elements>::value,
- "hana::insert_range(xs, n, elements) requires 'elements' to be a Foldable");
- #endif
-
- return InsertRange::apply(static_cast<Xs&&>(xs),
- static_cast<N&&>(n),
- static_cast<Elements&&>(elements));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct insert_range_impl<S, when<condition>> {
- template <typename Xs, typename N, typename Elements>
- static constexpr auto apply(Xs&& xs, N const& n, Elements&& e) {
- return hana::concat(
- hana::concat(
- hana::take_front(xs, n),
- hana::to<S>(static_cast<Elements&&>(e))
- ),
- hana::drop_front(xs, n)
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_INSERT_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/hana/integral_constant.hpp b/contrib/restricted/boost/boost/hana/integral_constant.hpp
deleted file mode 100644
index edabfe454c..0000000000
--- a/contrib/restricted/boost/boost/hana/integral_constant.hpp
+++ /dev/null
@@ -1,15 +0,0 @@
-/*!
-@file
-Defines `boost::hana::integral_constant`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_INTEGRAL_CONSTANT_HPP
-#define BOOST_HANA_INTEGRAL_CONSTANT_HPP
-
-#include <boost/hana/bool.hpp>
-
-#endif // !BOOST_HANA_INTEGRAL_CONSTANT_HPP
diff --git a/contrib/restricted/boost/boost/hana/intersection.hpp b/contrib/restricted/boost/boost/hana/intersection.hpp
deleted file mode 100644
index a9859d8f42..0000000000
--- a/contrib/restricted/boost/boost/hana/intersection.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*!
-@file
-Defines `boost::hana::intersection`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_INTERSECTION_HPP
-#define BOOST_HANA_INTERSECTION_HPP
-
-#include <boost/hana/fwd/intersection.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Ys>
- constexpr auto intersection_t::operator()(Xs&& xs, Ys&& ys) const {
- using S = typename hana::tag_of<Xs>::type;
- using Intersection = BOOST_HANA_DISPATCH_IF(intersection_impl<S>,
- true
- );
-
- return Intersection::apply(static_cast<Xs&&>(xs), static_cast<Ys&&>(ys));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct intersection_impl<S, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_INTERSECTION_HPP
diff --git a/contrib/restricted/boost/boost/hana/intersperse.hpp b/contrib/restricted/boost/boost/hana/intersperse.hpp
deleted file mode 100644
index 13e8240a13..0000000000
--- a/contrib/restricted/boost/boost/hana/intersperse.hpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/*!
-@file
-Defines `boost::hana::intersperse`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_INTERSPERSE_HPP
-#define BOOST_HANA_INTERSPERSE_HPP
-
-#include <boost/hana/fwd/intersperse.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/length.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Z>
- constexpr auto intersperse_t::operator()(Xs&& xs, Z&& z) const {
- using S = typename hana::tag_of<Xs>::type;
- using Intersperse = BOOST_HANA_DISPATCH_IF(intersperse_impl<S>,
- hana::Sequence<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::intersperse(xs, z) requires 'xs' to be a Sequence");
- #endif
-
- return Intersperse::apply(static_cast<Xs&&>(xs), static_cast<Z&&>(z));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct intersperse_impl<S, when<condition>> : default_ {
- template <std::size_t i, typename Xs, typename Z>
- static constexpr decltype(auto)
- pick(Xs&&, Z&& z, hana::false_ /* odd index */)
- { return static_cast<Z&&>(z); }
-
- template <std::size_t i, typename Xs, typename Z>
- static constexpr decltype(auto)
- pick(Xs&& xs, Z&&, hana::true_ /* even index */)
- { return hana::at_c<(i + 1) / 2>(static_cast<Xs&&>(xs)); }
-
- template <typename Xs, typename Z, std::size_t ...i>
- static constexpr auto
- intersperse_helper(Xs&& xs, Z&& z, std::index_sequence<i...>) {
- return hana::make<S>(
- pick<i>(static_cast<Xs&&>(xs), static_cast<Z&&>(z),
- hana::bool_c<(i % 2 == 0)>)...
- );
- }
-
- template <typename Xs, typename Z>
- static constexpr auto apply(Xs&& xs, Z&& z) {
- constexpr std::size_t size = decltype(hana::length(xs))::value;
- constexpr std::size_t new_size = size == 0 ? 0 : (size * 2) - 1;
- return intersperse_helper(static_cast<Xs&&>(xs), static_cast<Z&&>(z),
- std::make_index_sequence<new_size>{});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_INTERSPERSE_HPP
diff --git a/contrib/restricted/boost/boost/hana/is_disjoint.hpp b/contrib/restricted/boost/boost/hana/is_disjoint.hpp
deleted file mode 100644
index c4ffc73121..0000000000
--- a/contrib/restricted/boost/boost/hana/is_disjoint.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*!
-@file
-Defines `boost::hana::is_disjoint`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_IS_DISJOINT_HPP
-#define BOOST_HANA_IS_DISJOINT_HPP
-
-#include <boost/hana/fwd/is_disjoint.hpp>
-
-#include <boost/hana/concept/searchable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/contains.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/none_of.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Ys>
- constexpr auto is_disjoint_t::operator()(Xs&& xs, Ys&& ys) const {
- using S1 = typename hana::tag_of<Xs>::type;
- using S2 = typename hana::tag_of<Ys>::type;
- using IsDisjoint = BOOST_HANA_DISPATCH_IF(
- decltype(is_disjoint_impl<S1, S2>{}),
- hana::Searchable<S1>::value &&
- hana::Searchable<S2>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Searchable<S1>::value,
- "hana::is_disjoint(xs, ys) requires 'xs' to be Searchable");
-
- static_assert(hana::Searchable<S2>::value,
- "hana::is_disjoint(xs, ys) requires 'ys' to be Searchable");
- #endif
-
- return IsDisjoint::apply(static_cast<Xs&&>(xs), static_cast<Ys&&>(ys));
- }
- //! @endcond
-
- namespace detail {
- template <typename Ys>
- struct in_by_reference {
- Ys const& ys;
- template <typename X>
- constexpr auto operator()(X const& x) const
- { return hana::contains(ys, x); }
- };
- }
-
- template <typename S1, typename S2, bool condition>
- struct is_disjoint_impl<S1, S2, when<condition>> : default_ {
- template <typename Xs, typename Ys>
- static constexpr auto apply(Xs const& xs, Ys const& ys) {
- return hana::none_of(xs, detail::in_by_reference<Ys>{ys});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_IS_DISJOINT_HPP
diff --git a/contrib/restricted/boost/boost/hana/is_empty.hpp b/contrib/restricted/boost/boost/hana/is_empty.hpp
deleted file mode 100644
index a8b68fa61a..0000000000
--- a/contrib/restricted/boost/boost/hana/is_empty.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*!
-@file
-Defines `boost::hana::is_empty`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_IS_EMPTY_HPP
-#define BOOST_HANA_IS_EMPTY_HPP
-
-#include <boost/hana/fwd/is_empty.hpp>
-
-#include <boost/hana/concept/iterable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs>
- constexpr auto is_empty_t::operator()(Xs const& xs) const {
- using It = typename hana::tag_of<Xs>::type;
- using IsEmpty = BOOST_HANA_DISPATCH_IF(is_empty_impl<It>,
- hana::Iterable<It>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Iterable<It>::value,
- "hana::is_empty(xs) requires 'xs' to be an Iterable");
- #endif
-
- return IsEmpty::apply(xs);
- }
- //! @endcond
-
- template <typename It, bool condition>
- struct is_empty_impl<It, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_IS_EMPTY_HPP
diff --git a/contrib/restricted/boost/boost/hana/is_subset.hpp b/contrib/restricted/boost/boost/hana/is_subset.hpp
deleted file mode 100644
index 7ef3e2bed5..0000000000
--- a/contrib/restricted/boost/boost/hana/is_subset.hpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/*!
-@file
-Defines `boost::hana::is_subset`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_IS_SUBSET_HPP
-#define BOOST_HANA_IS_SUBSET_HPP
-
-#include <boost/hana/fwd/is_subset.hpp>
-
-#include <boost/hana/all_of.hpp>
-#include <boost/hana/concept/searchable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/contains.hpp>
-#include <boost/hana/core/common.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/has_common_embedding.hpp>
-#include <boost/hana/functional/partial.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Ys>
- constexpr auto is_subset_t::operator()(Xs&& xs, Ys&& ys) const {
- using S1 = typename hana::tag_of<Xs>::type;
- using S2 = typename hana::tag_of<Ys>::type;
- using IsSubset = BOOST_HANA_DISPATCH_IF(
- decltype(is_subset_impl<S1, S2>{}),
- hana::Searchable<S1>::value &&
- hana::Searchable<S2>::value &&
- !is_default<is_subset_impl<S1, S2>>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Searchable<S1>::value,
- "hana::is_subset(xs, ys) requires 'xs' to be Searchable");
-
- static_assert(hana::Searchable<S2>::value,
- "hana::is_subset(xs, ys) requires 'ys' to be Searchable");
-
- static_assert(!is_default<is_subset_impl<S1, S2>>::value,
- "hana::is_subset(xs, ys) requires 'xs' and 'ys' to be embeddable "
- "in a common Searchable");
- #endif
-
- return IsSubset::apply(static_cast<Xs&&>(xs), static_cast<Ys&&>(ys));
- }
- //! @endcond
-
- template <typename S1, typename S2, bool condition>
- struct is_subset_impl<S1, S2, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- template <typename S, bool condition>
- struct is_subset_impl<S, S, when<condition>> {
- template <typename Xs, typename Ys>
- static constexpr decltype(auto) apply(Xs&& xs, Ys&& ys) {
- return hana::all_of(static_cast<Xs&&>(xs),
- hana::partial(hana::contains, static_cast<Ys&&>(ys)));
- }
- };
-
- // Cross-type overload
- template <typename S1, typename S2>
- struct is_subset_impl<S1, S2, when<
- detail::has_nontrivial_common_embedding<Searchable, S1, S2>::value
- >> {
- using C = typename common<S1, S2>::type;
- template <typename Xs, typename Ys>
- static constexpr decltype(auto) apply(Xs&& xs, Ys&& ys) {
- return hana::is_subset(hana::to<C>(static_cast<Xs&&>(xs)),
- hana::to<C>(static_cast<Ys&&>(ys)));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_IS_SUBSET_HPP
diff --git a/contrib/restricted/boost/boost/hana/keys.hpp b/contrib/restricted/boost/boost/hana/keys.hpp
deleted file mode 100644
index b27be1d756..0000000000
--- a/contrib/restricted/boost/boost/hana/keys.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*!
-@file
-Defines `boost::hana::keys`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_KEYS_HPP
-#define BOOST_HANA_KEYS_HPP
-
-#include <boost/hana/fwd/keys.hpp>
-
-#include <boost/hana/accessors.hpp>
-#include <boost/hana/concept/struct.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/first.hpp>
-#include <boost/hana/transform.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Map>
- constexpr auto keys_t::operator()(Map&& map) const {
- return keys_impl<typename hana::tag_of<Map>::type>::apply(
- static_cast<Map&&>(map)
- );
- }
- //! @endcond
-
- template <typename T, bool condition>
- struct keys_impl<T, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- template <typename S>
- struct keys_impl<S, when<hana::Struct<S>::value>> {
- template <typename Object>
- static constexpr auto apply(Object const&) {
- return hana::transform(hana::accessors<S>(), hana::first);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_KEYS_HPP
diff --git a/contrib/restricted/boost/boost/hana/lazy.hpp b/contrib/restricted/boost/boost/hana/lazy.hpp
deleted file mode 100644
index 5cb9a8a3ab..0000000000
--- a/contrib/restricted/boost/boost/hana/lazy.hpp
+++ /dev/null
@@ -1,229 +0,0 @@
-/*!
-@file
-Defines `boost::hana::lazy`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_LAZY_HPP
-#define BOOST_HANA_LAZY_HPP
-
-#include <boost/hana/fwd/lazy.hpp>
-
-#include <boost/hana/basic_tuple.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/detail/operators/adl.hpp>
-#include <boost/hana/detail/operators/monad.hpp>
-#include <boost/hana/functional/apply.hpp>
-#include <boost/hana/functional/compose.hpp>
-#include <boost/hana/functional/on.hpp>
-#include <boost/hana/fwd/ap.hpp>
-#include <boost/hana/fwd/duplicate.hpp>
-#include <boost/hana/fwd/eval.hpp>
-#include <boost/hana/fwd/extend.hpp>
-#include <boost/hana/fwd/extract.hpp>
-#include <boost/hana/fwd/flatten.hpp>
-#include <boost/hana/fwd/lift.hpp>
-#include <boost/hana/fwd/transform.hpp>
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //////////////////////////////////////////////////////////////////////////
- // lazy
- //////////////////////////////////////////////////////////////////////////
- template <typename Indices, typename F, typename ...Args>
- struct lazy_apply_t;
-
- namespace detail { struct lazy_secret { }; }
-
- template <std::size_t ...n, typename F, typename ...Args>
- struct lazy_apply_t<std::index_sequence<n...>, F, Args...>
- : detail::operators::adl<>
- {
- template <typename ...T>
- constexpr lazy_apply_t(detail::lazy_secret, T&& ...t)
- : storage_{static_cast<T&&>(t)...}
- { }
-
- basic_tuple<F, Args...> storage_;
- using hana_tag = lazy_tag;
- };
-
- template <typename X>
- struct lazy_value_t : detail::operators::adl<> {
- template <typename Y>
- constexpr lazy_value_t(detail::lazy_secret, Y&& y)
- : storage_{static_cast<Y&&>(y)}
- { }
-
- basic_tuple<X> storage_;
- using hana_tag = lazy_tag;
-
- // If this is called, we assume that `X` is in fact a function.
- template <typename ...Args>
- constexpr lazy_apply_t<
- std::make_index_sequence<sizeof...(Args)>,
- X, typename detail::decay<Args>::type...
- > operator()(Args&& ...args) const& {
- return {detail::lazy_secret{},
- hana::at_c<0>(storage_), static_cast<Args&&>(args)...};
- }
-
- template <typename ...Args>
- constexpr lazy_apply_t<
- std::make_index_sequence<sizeof...(Args)>,
- X, typename detail::decay<Args>::type...
- > operator()(Args&& ...args) && {
- return {detail::lazy_secret{},
- static_cast<X&&>(hana::at_c<0>(storage_)),
- static_cast<Args&&>(args)...
- };
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // make<lazy_tag>
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct make_impl<lazy_tag> {
- template <typename X>
- static constexpr lazy_value_t<typename detail::decay<X>::type> apply(X&& x) {
- return {detail::lazy_secret{}, static_cast<X&&>(x)};
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Operators
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <>
- struct monad_operators<lazy_tag> { static constexpr bool value = true; };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // eval for lazy_tag
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct eval_impl<lazy_tag> {
- // lazy_apply_t
- template <std::size_t ...n, typename F, typename ...Args>
- static constexpr decltype(auto)
- apply(lazy_apply_t<std::index_sequence<n...>, F, Args...> const& expr) {
- return hana::at_c<0>(expr.storage_)(
- hana::at_c<n+1>(expr.storage_)...
- );
- }
-
- template <std::size_t ...n, typename F, typename ...Args>
- static constexpr decltype(auto)
- apply(lazy_apply_t<std::index_sequence<n...>, F, Args...>& expr) {
- return hana::at_c<0>(expr.storage_)(
- hana::at_c<n+1>(expr.storage_)...
- );
- }
-
- template <std::size_t ...n, typename F, typename ...Args>
- static constexpr decltype(auto)
- apply(lazy_apply_t<std::index_sequence<n...>, F, Args...>&& expr) {
- return static_cast<F&&>(hana::at_c<0>(expr.storage_))(
- static_cast<Args&&>(hana::at_c<n+1>(expr.storage_))...
- );
- }
-
- // lazy_value_t
- template <typename X>
- static constexpr X const& apply(lazy_value_t<X> const& expr)
- { return hana::at_c<0>(expr.storage_); }
-
- template <typename X>
- static constexpr X& apply(lazy_value_t<X>& expr)
- { return hana::at_c<0>(expr.storage_); }
-
- template <typename X>
- static constexpr X apply(lazy_value_t<X>&& expr)
- { return static_cast<X&&>(hana::at_c<0>(expr.storage_)); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Functor
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct transform_impl<lazy_tag> {
- template <typename Expr, typename F>
- static constexpr auto apply(Expr&& expr, F&& f) {
- return hana::make_lazy(hana::compose(static_cast<F&&>(f), hana::eval))(
- static_cast<Expr&&>(expr)
- );
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Applicative
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct lift_impl<lazy_tag> {
- template <typename X>
- static constexpr lazy_value_t<typename detail::decay<X>::type>
- apply(X&& x) {
- return {detail::lazy_secret{}, static_cast<X&&>(x)};
- }
- };
-
- template <>
- struct ap_impl<lazy_tag> {
- template <typename F, typename X>
- static constexpr decltype(auto) apply(F&& f, X&& x) {
- return hana::make_lazy(hana::on(hana::apply, hana::eval))(
- static_cast<F&&>(f), static_cast<X&&>(x)
- );
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Monad
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct flatten_impl<lazy_tag> {
- template <typename Expr>
- static constexpr decltype(auto) apply(Expr&& expr) {
- return hana::make_lazy(hana::compose(hana::eval, hana::eval))(
- static_cast<Expr&&>(expr)
- );
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Comonad
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct extract_impl<lazy_tag> {
- template <typename Expr>
- static constexpr decltype(auto) apply(Expr&& expr)
- { return hana::eval(static_cast<Expr&&>(expr)); }
- };
-
- template <>
- struct duplicate_impl<lazy_tag> {
- template <typename Expr>
- static constexpr decltype(auto) apply(Expr&& expr)
- { return hana::make_lazy(static_cast<Expr&&>(expr)); }
- };
-
- template <>
- struct extend_impl<lazy_tag> {
- template <typename Expr, typename F>
- static constexpr decltype(auto) apply(Expr&& expr, F&& f) {
- return hana::make_lazy(static_cast<F&&>(f))(static_cast<Expr&&>(expr));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_LAZY_HPP
diff --git a/contrib/restricted/boost/boost/hana/length.hpp b/contrib/restricted/boost/boost/hana/length.hpp
deleted file mode 100644
index 44c195b390..0000000000
--- a/contrib/restricted/boost/boost/hana/length.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/*!
-@file
-Defines `boost::hana::length`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_LENGTH_HPP
-#define BOOST_HANA_LENGTH_HPP
-
-#include <boost/hana/fwd/length.hpp>
-
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/unpack.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs>
- constexpr auto length_t::operator()(Xs const& xs) const {
- using S = typename hana::tag_of<Xs>::type;
- using Length = BOOST_HANA_DISPATCH_IF(length_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::length(xs) requires 'xs' to be Foldable");
- #endif
-
- return Length::apply(xs);
- }
- //! @endcond
-
- namespace detail {
- struct argn {
- template <typename ...Xs>
- constexpr hana::size_t<sizeof...(Xs)> operator()(Xs const& ...) const
- { return {}; }
- };
- }
-
- template <typename T, bool condition>
- struct length_impl<T, when<condition>> : default_ {
- template <typename Xs>
- static constexpr auto apply(Xs const& xs) {
- return hana::unpack(xs, detail::argn{});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_LENGTH_HPP
diff --git a/contrib/restricted/boost/boost/hana/less.hpp b/contrib/restricted/boost/boost/hana/less.hpp
deleted file mode 100644
index 05cceabb1d..0000000000
--- a/contrib/restricted/boost/boost/hana/less.hpp
+++ /dev/null
@@ -1,142 +0,0 @@
-/*!
-@file
-Defines `boost::hana::less`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_LESS_HPP
-#define BOOST_HANA_LESS_HPP
-
-#include <boost/hana/fwd/less.hpp>
-
-#include <boost/hana/and.hpp>
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/orderable.hpp>
-#include <boost/hana/concept/product.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/common.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/concepts.hpp>
-#include <boost/hana/detail/has_common_embedding.hpp>
-#include <boost/hana/detail/nested_than.hpp> // required by fwd decl
-#include <boost/hana/equal.hpp>
-#include <boost/hana/first.hpp>
-#include <boost/hana/if.hpp>
-#include <boost/hana/less_equal.hpp>
-#include <boost/hana/lexicographical_compare.hpp>
-#include <boost/hana/or.hpp>
-#include <boost/hana/second.hpp>
-#include <boost/hana/value.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X, typename Y>
- constexpr auto less_t::operator()(X&& x, Y&& y) const {
- using T = typename hana::tag_of<X>::type;
- using U = typename hana::tag_of<Y>::type;
- using Less = BOOST_HANA_DISPATCH_IF(decltype(less_impl<T, U>{}),
- hana::Orderable<T>::value &&
- hana::Orderable<U>::value &&
- !is_default<less_impl<T, U>>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Orderable<T>::value,
- "hana::less(x, y) requires 'x' to be Orderable");
-
- static_assert(hana::Orderable<U>::value,
- "hana::less(x, y) requires 'y' to be Orderable");
-
- static_assert(!is_default<less_impl<T, U>>::value,
- "hana::less(x, y) requires 'x' and 'y' to be embeddable "
- "in a common Orderable");
- #endif
-
- return Less::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- //! @endcond
-
- template <typename T, typename U, bool condition>
- struct less_impl<T, U, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- // Cross-type overload
- template <typename T, typename U>
- struct less_impl<T, U, when<
- detail::has_nontrivial_common_embedding<Orderable, T, U>::value &&
- !detail::LessThanComparable<T, U>::value
- >> {
- using C = typename hana::common<T, U>::type;
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- return hana::less(hana::to<C>(static_cast<X&&>(x)),
- hana::to<C>(static_cast<Y&&>(y)));
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for LessThanComparable data types
- //////////////////////////////////////////////////////////////////////////
- template <typename T, typename U>
- struct less_impl<T, U, when<detail::LessThanComparable<T, U>::value>> {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y)
- { return static_cast<X&&>(x) < static_cast<Y&&>(y); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for Constants wrapping an Orderable
- //////////////////////////////////////////////////////////////////////////
- template <typename C>
- struct less_impl<C, C, when<
- hana::Constant<C>::value &&
- Orderable<typename C::value_type>::value
- >> {
- template <typename X, typename Y>
- static constexpr auto apply(X const&, Y const&) {
- constexpr auto is_less = hana::less(hana::value<X>(), hana::value<Y>());
- constexpr bool truth_value = hana::if_(is_less, true, false);
- return hana::bool_c<truth_value>;
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for Products
- //////////////////////////////////////////////////////////////////////////
- template <typename T, typename U>
- struct less_impl<T, U, when<hana::Product<T>::value && hana::Product<U>::value>> {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X const& x, Y const& y) {
- return hana::or_(
- hana::less(hana::first(x), hana::first(y)),
- hana::and_(
- hana::less_equal(hana::first(x), hana::first(y)),
- hana::less(hana::second(x), hana::second(y))
- )
- );
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for Sequences
- //////////////////////////////////////////////////////////////////////////
- template <typename T, typename U>
- struct less_impl<T, U, when<
- hana::Sequence<T>::value && hana::Sequence<U>::value
- >> {
- template <typename Xs, typename Ys>
- static constexpr auto apply(Xs const& xs, Ys const& ys)
- { return hana::lexicographical_compare(xs, ys); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_LESS_HPP
diff --git a/contrib/restricted/boost/boost/hana/less_equal.hpp b/contrib/restricted/boost/boost/hana/less_equal.hpp
deleted file mode 100644
index d3d0efe911..0000000000
--- a/contrib/restricted/boost/boost/hana/less_equal.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/*!
-@file
-Defines `boost::hana::less_equal`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_LESS_EQUAL_HPP
-#define BOOST_HANA_LESS_EQUAL_HPP
-
-#include <boost/hana/fwd/less_equal.hpp>
-
-#include <boost/hana/concept/orderable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/common.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/has_common_embedding.hpp>
-#include <boost/hana/detail/nested_than.hpp> // required by fwd decl
-#include <boost/hana/less.hpp>
-#include <boost/hana/not.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X, typename Y>
- constexpr auto less_equal_t::operator()(X&& x, Y&& y) const {
- using T = typename hana::tag_of<X>::type;
- using U = typename hana::tag_of<Y>::type;
- using LessEqual = BOOST_HANA_DISPATCH_IF(
- decltype(less_equal_impl<T, U>{}),
- hana::Orderable<T>::value &&
- hana::Orderable<U>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Orderable<T>::value,
- "hana::less_equal(x, y) requires 'x' to be Orderable");
-
- static_assert(hana::Orderable<U>::value,
- "hana::less_equal(x, y) requires 'y' to be Orderable");
- #endif
-
- return LessEqual::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- //! @endcond
-
- template <typename T, typename U, bool condition>
- struct less_equal_impl<T, U, when<condition>> : default_ {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- return hana::not_(hana::less(static_cast<Y&&>(y),
- static_cast<X&&>(x)));
- }
- };
-
- // Cross-type overload
- template <typename T, typename U>
- struct less_equal_impl<T, U, when<
- detail::has_nontrivial_common_embedding<Orderable, T, U>::value
- >> {
- using C = typename hana::common<T, U>::type;
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- return hana::less_equal(hana::to<C>(static_cast<X&&>(x)),
- hana::to<C>(static_cast<Y&&>(y)));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_LESS_EQUAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/lexicographical_compare.hpp b/contrib/restricted/boost/boost/hana/lexicographical_compare.hpp
deleted file mode 100644
index e8363ad9f1..0000000000
--- a/contrib/restricted/boost/boost/hana/lexicographical_compare.hpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/*!
-@file
-Defines `boost::hana::lexicographical_compare`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_LEXICOGRAPHICAL_COMPARE_HPP
-#define BOOST_HANA_LEXICOGRAPHICAL_COMPARE_HPP
-
-#include <boost/hana/fwd/lexicographical_compare.hpp>
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/iterable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/drop_front.hpp>
-#include <boost/hana/front.hpp>
-#include <boost/hana/if.hpp>
-#include <boost/hana/is_empty.hpp>
-#include <boost/hana/less.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Ys>
- constexpr auto lexicographical_compare_t::operator()(Xs const& xs, Ys const& ys) const {
- return hana::lexicographical_compare(xs, ys, hana::less);
- }
-
- template <typename Xs, typename Ys, typename Pred>
- constexpr auto lexicographical_compare_t::operator()(Xs const& xs, Ys const& ys, Pred const& pred) const {
- using It1 = typename hana::tag_of<Xs>::type;
- using It2 = typename hana::tag_of<Ys>::type;
- using LexicographicalCompare = BOOST_HANA_DISPATCH_IF(
- lexicographical_compare_impl<It1>,
- hana::Iterable<It1>::value &&
- hana::Iterable<It2>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Iterable<It1>::value,
- "hana::lexicographical_compare(xs, ys, pred) requires 'xs' to be Iterable");
-
- static_assert(hana::Iterable<It2>::value,
- "hana::lexicographical_compare(xs, ys, pred) requires 'ys' to be Iterable");
- #endif
-
- return LexicographicalCompare::apply(xs, ys, pred);
- }
- //! @endcond
-
- template <typename It, bool condition>
- struct lexicographical_compare_impl<It, when<condition>> : default_ {
- template <typename Xs, typename Ys, typename Pred>
- static constexpr auto
- helper2(Xs const&, Ys const&, Pred const&, hana::true_)
- { return hana::false_c; }
-
- template <typename Xs, typename Ys, typename Pred>
- static constexpr auto
- helper2(Xs const& xs, Ys const& ys, Pred const& pred, hana::false_)
- { return apply(hana::drop_front(xs), hana::drop_front(ys), pred); }
-
- template <typename Xs, typename Ys, typename Pred>
- static constexpr auto
- helper2(Xs const& xs, Ys const& ys, Pred const& pred, bool is_greater)
- { return is_greater ? false : apply(hana::drop_front(xs), hana::drop_front(ys), pred); }
-
-
- template <typename Xs, typename Ys, typename Pred>
- static constexpr auto
- helper1(Xs const&, Ys const&, Pred const&, hana::true_)
- { return hana::true_c; }
-
- template <typename Xs, typename Ys, typename Pred>
- static constexpr auto
- helper1(Xs const& xs, Ys const& ys, Pred const& pred, hana::false_)
- { return helper2(xs, ys, pred, hana::if_(pred(hana::front(ys), hana::front(xs)), hana::true_c, hana::false_c)); }
-
- template <typename Xs, typename Ys, typename Pred>
- static constexpr auto
- helper1(Xs const& xs, Ys const& ys, Pred const& pred, bool is_less)
- { return is_less ? true : helper2(xs, ys, pred, hana::if_(pred(hana::front(ys), hana::front(xs)), hana::true_c, hana::false_c)); }
-
-
- template <typename Xs, typename Ys, typename Pred>
- static constexpr auto
- helper(Xs const&, Ys const& ys, Pred const&, hana::true_)
- { return hana::not_(hana::is_empty(ys)); }
-
- template <typename Xs, typename Ys, typename Pred>
- static constexpr auto
- helper(Xs const& xs, Ys const& ys, Pred const& pred, hana::false_)
- { return helper1(xs, ys, pred, hana::if_(pred(hana::front(xs), hana::front(ys)), hana::true_c, hana::false_c)); }
-
-
- template <typename Xs, typename Ys, typename Pred>
- static constexpr auto apply(Xs const& xs, Ys const& ys, Pred const& pred) {
- return helper(xs, ys, pred, hana::bool_c<
- decltype(hana::is_empty(xs))::value ||
- decltype(hana::is_empty(ys))::value
- >);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_LEXICOGRAPHICAL_COMPARE_HPP
diff --git a/contrib/restricted/boost/boost/hana/lift.hpp b/contrib/restricted/boost/boost/hana/lift.hpp
deleted file mode 100644
index b8ab3431c2..0000000000
--- a/contrib/restricted/boost/boost/hana/lift.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*!
-@file
-Defines `boost::hana::lift`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_LIFT_HPP
-#define BOOST_HANA_LIFT_HPP
-
-#include <boost/hana/fwd/lift.hpp>
-
-#include <boost/hana/concept/applicative.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename A>
- struct lift_t {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Applicative<A>::value,
- "hana::lift<A> requires 'A' to be an Applicative");
- #endif
-
- template <typename X>
- constexpr auto operator()(X&& x) const {
- using Lift = BOOST_HANA_DISPATCH_IF(lift_impl<A>,
- hana::Applicative<A>::value
- );
-
- return Lift::apply(static_cast<X&&>(x));
- }
- };
-
- template <typename A, bool condition>
- struct lift_impl<A, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...args) = delete;
- };
-
- template <typename S>
- struct lift_impl<S, when<Sequence<S>::value>> {
- template <typename X>
- static constexpr decltype(auto) apply(X&& x)
- { return hana::make<S>(static_cast<X&&>(x)); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_LIFT_HPP
diff --git a/contrib/restricted/boost/boost/hana/map.hpp b/contrib/restricted/boost/boost/hana/map.hpp
deleted file mode 100644
index 8da5012190..0000000000
--- a/contrib/restricted/boost/boost/hana/map.hpp
+++ /dev/null
@@ -1,577 +0,0 @@
-/*!
-@file
-Defines `boost::hana::map`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_MAP_HPP
-#define BOOST_HANA_MAP_HPP
-
-#include <boost/hana/fwd/map.hpp>
-
-#include <boost/hana/all_of.hpp>
-#include <boost/hana/basic_tuple.hpp>
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/comparable.hpp>
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/product.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/contains.hpp>
-#include <boost/hana/core/is_a.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/detail/fast_and.hpp>
-#include <boost/hana/detail/has_duplicates.hpp>
-#include <boost/hana/detail/hash_table.hpp>
-#include <boost/hana/detail/intrinsics.hpp>
-#include <boost/hana/detail/operators/adl.hpp>
-#include <boost/hana/detail/operators/comparable.hpp>
-#include <boost/hana/detail/operators/searchable.hpp>
-#include <boost/hana/equal.hpp>
-#include <boost/hana/find.hpp>
-#include <boost/hana/first.hpp>
-#include <boost/hana/fold_left.hpp>
-#include <boost/hana/functional/demux.hpp>
-#include <boost/hana/functional/on.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/fwd/any_of.hpp>
-#include <boost/hana/fwd/at_key.hpp>
-#include <boost/hana/fwd/difference.hpp>
-#include <boost/hana/fwd/erase_key.hpp>
-#include <boost/hana/fwd/intersection.hpp>
-#include <boost/hana/fwd/is_subset.hpp>
-#include <boost/hana/fwd/keys.hpp>
-#include <boost/hana/fwd/union.hpp>
-#include <boost/hana/insert.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/keys.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/optional.hpp>
-#include <boost/hana/remove_if.hpp>
-#include <boost/hana/second.hpp>
-#include <boost/hana/unpack.hpp>
-#include <boost/hana/value.hpp>
-
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //////////////////////////////////////////////////////////////////////////
- // operators
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <>
- struct comparable_operators<map_tag> {
- static constexpr bool value = true;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // map
- //////////////////////////////////////////////////////////////////////////
- //! @cond
- namespace detail {
- template <typename ...>
- struct storage_is_default_constructible;
- template <typename ...T>
- struct storage_is_default_constructible<hana::basic_tuple<T...>> {
- static constexpr bool value = detail::fast_and<
- BOOST_HANA_TT_IS_CONSTRUCTIBLE(T)...
- >::value;
- };
-
- template <typename ...>
- struct storage_is_copy_constructible;
- template <typename ...T>
- struct storage_is_copy_constructible<hana::basic_tuple<T...>> {
- static constexpr bool value = detail::fast_and<
- BOOST_HANA_TT_IS_CONSTRUCTIBLE(T, T const&)...
- >::value;
- };
-
- template <typename ...>
- struct storage_is_move_constructible;
- template <typename ...T>
- struct storage_is_move_constructible<hana::basic_tuple<T...>> {
- static constexpr bool value = detail::fast_and<
- BOOST_HANA_TT_IS_CONSTRUCTIBLE(T, T&&)...
- >::value;
- };
-
- template <typename ...>
- struct storage_is_copy_assignable;
- template <typename ...T>
- struct storage_is_copy_assignable<hana::basic_tuple<T...>> {
- static constexpr bool value = detail::fast_and<
- BOOST_HANA_TT_IS_ASSIGNABLE(T, T const&)...
- >::value;
- };
-
- template <typename ...>
- struct storage_is_move_assignable;
- template <typename ...T>
- struct storage_is_move_assignable<hana::basic_tuple<T...>> {
- static constexpr bool value = detail::fast_and<
- BOOST_HANA_TT_IS_ASSIGNABLE(T, T&&)...
- >::value;
- };
-
- template <typename HashTable, typename Storage>
- struct map_impl
- : detail::searchable_operators<map_impl<HashTable, Storage>>
- , detail::operators::adl<map_impl<HashTable, Storage>>
- {
- using hash_table_type = HashTable;
- using storage_type = Storage;
-
- Storage storage;
-
- using hana_tag = map_tag;
-
- template <typename ...P, typename = typename std::enable_if<
- std::is_same<
- Storage,
- hana::basic_tuple<typename detail::decay<P>::type...>
- >::value
- >::type>
- explicit constexpr map_impl(P&& ...pairs)
- : storage{static_cast<P&&>(pairs)...}
- { }
-
- explicit constexpr map_impl(Storage&& xs)
- : storage(static_cast<Storage&&>(xs))
- { }
-
- template <typename ...Dummy, typename = typename std::enable_if<
- detail::storage_is_default_constructible<Storage, Dummy...>::value
- >::type>
- constexpr map_impl()
- : storage()
- { }
-
- template <typename ...Dummy, typename = typename std::enable_if<
- detail::storage_is_copy_constructible<Storage, Dummy...>::value
- >::type>
- constexpr map_impl(map_impl const& other)
- : storage(other.storage)
- { }
-
- template <typename ...Dummy, typename = typename std::enable_if<
- detail::storage_is_move_constructible<Storage, Dummy...>::value
- >::type>
- constexpr map_impl(map_impl&& other)
- : storage(static_cast<Storage&&>(other.storage))
- { }
-
- template <typename ...Dummy, typename = typename std::enable_if<
- detail::storage_is_move_assignable<Storage, Dummy...>::value
- >::type>
- constexpr map_impl& operator=(map_impl&& other) {
- storage = static_cast<Storage&&>(other.storage);
- return *this;
- }
-
- template <typename ...Dummy, typename = typename std::enable_if<
- detail::storage_is_copy_assignable<Storage, Dummy...>::value
- >::type>
- constexpr map_impl& operator=(map_impl const& other) {
- storage = other.storage;
- return *this;
- }
-
- // Prevent the compiler from defining the default copy and move
- // constructors, which interfere with the SFINAE above.
- ~map_impl() = default;
- };
- //! @endcond
-
- template <typename Storage>
- struct KeyAtIndex {
- template <std::size_t i>
- using apply = decltype(hana::first(hana::at_c<i>(std::declval<Storage>())));
- };
-
- template <typename ...Pairs>
- struct make_map_type {
- using Storage = hana::basic_tuple<Pairs...>;
- using HashTable = typename detail::make_hash_table<
- detail::KeyAtIndex<Storage>::template apply, sizeof...(Pairs)
- >::type;
- using type = detail::map_impl<HashTable, Storage>;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // make<map_tag>
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct make_impl<map_tag> {
- template <typename ...Pairs>
- static constexpr auto apply(Pairs&& ...pairs) {
-#if defined(BOOST_HANA_CONFIG_ENABLE_DEBUG_MODE)
- static_assert(detail::fast_and<hana::Product<Pairs>::value...>::value,
- "hana::make_map(pairs...) requires all the 'pairs' to be Products");
-
- static_assert(detail::fast_and<
- hana::Comparable<decltype(hana::first(pairs))>::value...
- >::value,
- "hana::make_map(pairs...) requires all the keys to be Comparable");
-
- static_assert(detail::fast_and<
- hana::Constant<
- decltype(hana::equal(hana::first(pairs), hana::first(pairs)))
- >::value...
- >::value,
- "hana::make_map(pairs...) requires all the keys to be "
- "Comparable at compile-time");
-
- //! @todo
- //! This can be implemented more efficiently by doing the check
- //! inside each bucket instead.
- static_assert(!detail::has_duplicates<decltype(hana::first(pairs))...>::value,
- "hana::make_map({keys, values}...) requires all the keys to be unique");
-
- static_assert(!detail::has_duplicates<decltype(hana::hash(hana::first(pairs)))...>::value,
- "hana::make_map({keys, values}...) requires all the keys to have different hashes");
-#endif
-
- using Map = typename detail::make_map_type<typename detail::decay<Pairs>::type...>::type;
- return Map{hana::make_basic_tuple(static_cast<Pairs&&>(pairs)...)};
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // keys
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct keys_impl<map_tag> {
- template <typename Map>
- static constexpr decltype(auto) apply(Map&& map) {
- return hana::transform(static_cast<Map&&>(map).storage, hana::first);
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // values
- //////////////////////////////////////////////////////////////////////////
- //! @cond
- template <typename Map>
- constexpr decltype(auto) values_t::operator()(Map&& map) const {
- return hana::transform(static_cast<Map&&>(map).storage, hana::second);
- }
- //! @endcond
-
- //////////////////////////////////////////////////////////////////////////
- // insert
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct insert_impl<map_tag> {
- template <typename Map, typename Pair>
- static constexpr auto helper(Map&& map, Pair&& pair, ...) {
- using RawMap = typename std::remove_reference<Map>::type;
- using HashTable = typename RawMap::hash_table_type;
- using NewHashTable = typename detail::bucket_insert<
- HashTable,
- decltype(hana::first(pair)),
- decltype(hana::length(map.storage))::value
- >::type;
-
- using NewStorage = decltype(
- hana::append(static_cast<Map&&>(map).storage, static_cast<Pair&&>(pair))
- );
- return detail::map_impl<NewHashTable, NewStorage>(
- hana::append(static_cast<Map&&>(map).storage, static_cast<Pair&&>(pair))
- );
- }
-
- template <typename Map, typename Pair, std::size_t i>
- static constexpr auto
- helper(Map&& map, Pair&&,
- hana::optional<std::integral_constant<std::size_t, i>>)
- {
- return static_cast<Map&&>(map);
- }
-
- //! @todo
- //! Here, we insert only if the key is not already in the map.
- //! This should be handled by `bucket_insert`, and that would also
- //! be more efficient.
- template <typename Map, typename Pair>
- static constexpr auto apply(Map&& map, Pair&& pair) {
- using RawMap = typename std::remove_reference<Map>::type;
- using Storage = typename RawMap::storage_type;
- using HashTable = typename RawMap::hash_table_type;
- using Key = decltype(hana::first(pair));
- using MaybeIndex = typename detail::find_index<
- HashTable, Key, detail::KeyAtIndex<Storage>::template apply
- >::type;
- return helper(static_cast<Map&&>(map), static_cast<Pair&&>(pair), MaybeIndex{});
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // erase_key
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct erase_key_impl<map_tag> {
- //! @todo
- //! We could implement some kind of `bucket_erase` metafunction
- //! that would be much more efficient than this.
- template <typename Map, typename Key>
- static constexpr auto
- erase_key_helper(Map&& map, Key const&, hana::false_) {
- return static_cast<Map&&>(map);
- }
-
- template <typename Map, typename Key>
- static constexpr auto
- erase_key_helper(Map&& map, Key const& key, hana::true_) {
- return hana::unpack(
- hana::remove_if(static_cast<Map&&>(map).storage,
- hana::on(hana::equal.to(key), hana::first)),
- hana::make_map
- );
- }
-
- template <typename Map, typename Key>
- static constexpr auto apply_impl(Map&& map, Key const& key, hana::false_) {
- return erase_key_helper(static_cast<Map&&>(map), key,
- hana::contains(map, key));
- }
-
- template <typename Map, typename Key>
- static constexpr auto apply_impl(Map&& map, Key const&, hana::true_) {
- return static_cast<Map&&>(map);
- }
-
- template <typename Map, typename Key>
- static constexpr auto apply(Map&& map, Key const& key) {
- constexpr bool is_empty = decltype(hana::length(map))::value == 0;
- return apply_impl(static_cast<Map&&>(map), key, hana::bool_<is_empty>{});
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Comparable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct equal_impl<map_tag, map_tag> {
- template <typename M1, typename M2>
- static constexpr auto equal_helper(M1 const&, M2 const&, hana::false_) {
- return hana::false_c;
- }
-
- template <typename M1, typename M2>
- static constexpr auto equal_helper(M1 const& m1, M2 const& m2, hana::true_) {
- return hana::all_of(hana::keys(m1), hana::demux(equal)(
- hana::partial(hana::find, m1),
- hana::partial(hana::find, m2)
- ));
- }
-
- template <typename M1, typename M2>
- static constexpr auto apply(M1 const& m1, M2 const& m2) {
- return equal_impl::equal_helper(m1, m2, hana::bool_c<
- decltype(hana::length(m1.storage))::value ==
- decltype(hana::length(m2.storage))::value
- >);
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Searchable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct find_impl<map_tag> {
- template <typename Map>
- static constexpr auto find_helper(Map&&, ...) {
- return hana::nothing;
- }
-
- template <typename Map, std::size_t i>
- static constexpr auto
- find_helper(Map&& map, hana::optional<std::integral_constant<std::size_t, i>>) {
- return hana::just(hana::second(hana::at_c<i>(static_cast<Map&&>(map).storage)));
- }
-
- template <typename Map, typename Key>
- static constexpr auto apply(Map&& map, Key const&) {
- using RawMap = typename std::remove_reference<Map>::type;
- using Storage = typename RawMap::storage_type;
- using HashTable = typename RawMap::hash_table_type;
- using MaybeIndex = typename detail::find_index<
- HashTable, Key, detail::KeyAtIndex<Storage>::template apply
- >::type;
- return find_helper(static_cast<Map&&>(map), MaybeIndex{});
- }
- };
-
- template <>
- struct find_if_impl<map_tag> {
- template <typename M, typename Pred>
- static constexpr auto apply(M&& map, Pred&& pred) {
- return hana::transform(
- hana::find_if(static_cast<M&&>(map).storage,
- hana::compose(static_cast<Pred&&>(pred), hana::first)),
- hana::second
- );
- }
- };
-
- template <>
- struct contains_impl<map_tag> {
- template <typename Map, typename Key>
- static constexpr auto apply(Map const&, Key const&) {
- using RawMap = typename std::remove_reference<Map>::type;
- using HashTable = typename RawMap::hash_table_type;
- using Storage = typename RawMap::storage_type;
- using MaybeIndex = typename detail::find_index<
- HashTable, Key, detail::KeyAtIndex<Storage>::template apply
- >::type;
- return hana::bool_<!decltype(hana::is_nothing(MaybeIndex{}))::value>{};
- }
- };
-
- template <>
- struct any_of_impl<map_tag> {
- template <typename M, typename Pred>
- static constexpr auto apply(M const& map, Pred const& pred)
- { return hana::any_of(hana::keys(map), pred); }
- };
-
- template <>
- struct is_subset_impl<map_tag, map_tag> {
- template <typename Ys>
- struct all_contained {
- Ys const& ys;
- template <typename ...X>
- constexpr auto operator()(X const& ...x) const {
- return hana::bool_c<detail::fast_and<
- hana::value<decltype(hana::contains(ys, x))>()...
- >::value>;
- }
- };
-
- template <typename Xs, typename Ys>
- static constexpr auto apply(Xs const& xs, Ys const& ys) {
- auto ys_keys = hana::keys(ys);
- return hana::unpack(hana::keys(xs), all_contained<decltype(ys_keys)>{ys_keys});
- }
- };
-
- template <>
- struct at_key_impl<map_tag> {
- template <typename Map, typename Key>
- static constexpr decltype(auto) apply(Map&& map, Key const&) {
- using RawMap = typename std::remove_reference<Map>::type;
- using HashTable = typename RawMap::hash_table_type;
- using Storage = typename RawMap::storage_type;
- using MaybeIndex = typename detail::find_index<
- HashTable, Key, detail::KeyAtIndex<Storage>::template apply
- >::type;
- static_assert(!decltype(hana::is_nothing(MaybeIndex{}))::value,
- "hana::at_key(map, key) requires the 'key' to be present in the 'map'");
- constexpr std::size_t index = decltype(*MaybeIndex{}){}();
- return hana::second(hana::at_c<index>(static_cast<Map&&>(map).storage));
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // union_
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct union_impl<map_tag> {
- template <typename Xs, typename Ys>
- static constexpr auto apply(Xs&& xs, Ys&& ys) {
- return hana::fold_left(static_cast<Xs&&>(xs), static_cast<Ys&&>(ys),
- hana::insert);
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // intersection_
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <typename Ys>
- struct map_insert_if_contains {
- Ys const& ys;
-
- // Second template param will be pair
- // Get its key and check if it exists, if it does, insert key, value pair.
- template <typename Result, typename Pair>
- static constexpr auto helper(Result&& result, Pair&& pair, hana::true_) {
- return hana::insert(static_cast<Result&&>(result), static_cast<Pair&&>(pair));
- }
-
- template <typename Result, typename Pair>
- static constexpr auto helper(Result&& result, Pair&&, hana::false_) {
- return static_cast<Result&&>(result);
- }
-
- template <typename Result, typename Pair>
- constexpr auto operator()(Result&& result, Pair&& pair) const {
- constexpr bool keep = hana::value<decltype(hana::contains(ys, hana::first(pair)))>();
- return map_insert_if_contains::helper(static_cast<Result&&>(result),
- static_cast<Pair&&>(pair),
- hana::bool_c<keep>);
- }
- };
- }
-
- template <>
- struct intersection_impl<map_tag> {
- template <typename Xs, typename Ys>
- static constexpr auto apply(Xs&& xs, Ys const& ys) {
- return hana::fold_left(static_cast<Xs&&>(xs), hana::make_map(),
- detail::map_insert_if_contains<Ys>{ys});
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // difference
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct difference_impl<map_tag> {
- template <typename Xs, typename Ys>
- static constexpr auto apply(Xs&& xs, Ys&& ys) {
- return hana::fold_left(
- hana::keys(static_cast<Ys&&>(ys)),
- static_cast<Xs&&>(xs),
- hana::erase_key);
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Foldable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct unpack_impl<map_tag> {
- template <typename M, typename F>
- static constexpr decltype(auto) apply(M&& map, F&& f) {
- return hana::unpack(static_cast<M&&>(map).storage,
- static_cast<F&&>(f));
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Construction from a Foldable
- //////////////////////////////////////////////////////////////////////////
- template <typename F>
- struct to_impl<map_tag, F, when<hana::Foldable<F>::value>> {
- template <typename Xs>
- static constexpr decltype(auto) apply(Xs&& xs) {
- return hana::fold_left(
- static_cast<Xs&&>(xs), hana::make_map(), hana::insert
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_MAP_HPP
diff --git a/contrib/restricted/boost/boost/hana/max.hpp b/contrib/restricted/boost/boost/hana/max.hpp
deleted file mode 100644
index 80889a791c..0000000000
--- a/contrib/restricted/boost/boost/hana/max.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*!
-@file
-Defines `boost::hana::max`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_MAX_HPP
-#define BOOST_HANA_MAX_HPP
-
-#include <boost/hana/fwd/max.hpp>
-
-#include <boost/hana/concept/orderable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/if.hpp>
-#include <boost/hana/less.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X, typename Y>
- constexpr decltype(auto) max_t::operator()(X&& x, Y&& y) const {
- using T = typename hana::tag_of<X>::type;
- using U = typename hana::tag_of<Y>::type;
- using Max = BOOST_HANA_DISPATCH_IF(decltype(max_impl<T, U>{}),
- hana::Orderable<T>::value &&
- hana::Orderable<U>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Orderable<T>::value,
- "hana::max(x, y) requires 'x' to be Orderable");
-
- static_assert(hana::Orderable<U>::value,
- "hana::max(x, y) requires 'y' to be Orderable");
- #endif
-
- return Max::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- //! @endcond
-
- template <typename T, typename U, bool condition>
- struct max_impl<T, U, when<condition>> : default_ {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- decltype(auto) cond = hana::less(x, y);
- return hana::if_(static_cast<decltype(cond)&&>(cond),
- static_cast<Y&&>(y),
- static_cast<X&&>(x)
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_MAX_HPP
diff --git a/contrib/restricted/boost/boost/hana/maximum.hpp b/contrib/restricted/boost/boost/hana/maximum.hpp
deleted file mode 100644
index 14cb7abfd4..0000000000
--- a/contrib/restricted/boost/boost/hana/maximum.hpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/*!
-@file
-Defines `boost::hana::maximum`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_MAXIMUM_HPP
-#define BOOST_HANA_MAXIMUM_HPP
-
-#include <boost/hana/fwd/maximum.hpp>
-
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/nested_by.hpp> // required by fwd decl
-#include <boost/hana/fold_left.hpp>
-#include <boost/hana/if.hpp>
-#include <boost/hana/less.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs>
- constexpr decltype(auto) maximum_t::operator()(Xs&& xs) const {
- using S = typename hana::tag_of<Xs>::type;
- using Maximum = BOOST_HANA_DISPATCH_IF(maximum_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::maximum(xs) requires 'xs' to be Foldable");
- #endif
-
- return Maximum::apply(static_cast<Xs&&>(xs));
- }
-
- template <typename Xs, typename Predicate>
- constexpr decltype(auto) maximum_t::operator()(Xs&& xs, Predicate&& pred) const {
- using S = typename hana::tag_of<Xs>::type;
- using Maximum = BOOST_HANA_DISPATCH_IF(maximum_pred_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::maximum(xs, predicate) requires 'xs' to be Foldable");
- #endif
-
- return Maximum::apply(static_cast<Xs&&>(xs),
- static_cast<Predicate&&>(pred));
- }
- //! @endcond
-
- //////////////////////////////////////////////////////////////////////////
- // maximum (with a custom predicate)
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <typename Pred>
- struct max_by {
- Pred pred;
-
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) const {
- auto result = (*pred)(x, y);
- return hana::if_(result, static_cast<Y&&>(y),
- static_cast<X&&>(x));
- }
- };
- }
-
- template <typename T, bool condition>
- struct maximum_pred_impl<T, when<condition>> : default_ {
- template <typename Xs, typename Pred>
- static constexpr decltype(auto) apply(Xs&& xs, Pred&& pred) {
- // We use a pointer instead of a reference to avoid a Clang ICE.
- return hana::fold_left(static_cast<Xs&&>(xs),
- detail::max_by<decltype(&pred)>{&pred}
- );
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // maximum (without a custom predicate)
- //////////////////////////////////////////////////////////////////////////
- template <typename T, bool condition>
- struct maximum_impl<T, when<condition>> : default_ {
- template <typename Xs>
- static constexpr decltype(auto) apply(Xs&& xs)
- { return hana::maximum(static_cast<Xs&&>(xs), hana::less); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_MAXIMUM_HPP
diff --git a/contrib/restricted/boost/boost/hana/members.hpp b/contrib/restricted/boost/boost/hana/members.hpp
deleted file mode 100644
index 13a5209288..0000000000
--- a/contrib/restricted/boost/boost/hana/members.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*!
-@file
-Defines `boost::hana::members`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_MEMBERS_HPP
-#define BOOST_HANA_MEMBERS_HPP
-
-#include <boost/hana/fwd/members.hpp>
-
-#include <boost/hana/accessors.hpp>
-#include <boost/hana/concept/struct.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/second.hpp>
-#include <boost/hana/transform.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Object>
- constexpr auto members_t::operator()(Object&& object) const {
- using S = typename hana::tag_of<Object>::type;
- using Members = BOOST_HANA_DISPATCH_IF(members_impl<S>,
- hana::Struct<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Struct<S>::value,
- "hana::members(object) requires 'object' to be a Struct");
- #endif
-
- return Members::apply(static_cast<Object&&>(object));
- }
- //! @endcond
-
- namespace struct_detail {
- template <typename Holder, typename Forward>
- struct members_helper {
- Holder object;
- template <typename Accessor>
- constexpr decltype(auto) operator()(Accessor&& accessor) const {
- return hana::second(static_cast<Accessor&&>(accessor))(
- static_cast<Forward>(object)
- );
- }
- };
- }
-
- template <typename S, bool condition>
- struct members_impl<S, when<condition>> : default_ {
- template <typename Object>
- static constexpr auto apply(Object&& object) {
- return hana::transform(hana::accessors<S>(),
- struct_detail::members_helper<Object&, Object&&>{object}
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_MEMBERS_HPP
diff --git a/contrib/restricted/boost/boost/hana/min.hpp b/contrib/restricted/boost/boost/hana/min.hpp
deleted file mode 100644
index f8c887147b..0000000000
--- a/contrib/restricted/boost/boost/hana/min.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*!
-@file
-Defines `boost::hana::min`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_MIN_HPP
-#define BOOST_HANA_MIN_HPP
-
-#include <boost/hana/fwd/min.hpp>
-
-#include <boost/hana/concept/orderable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/if.hpp>
-#include <boost/hana/less.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X, typename Y>
- constexpr decltype(auto) min_t::operator()(X&& x, Y&& y) const {
- using T = typename hana::tag_of<X>::type;
- using U = typename hana::tag_of<Y>::type;
- using Min = BOOST_HANA_DISPATCH_IF(decltype(min_impl<T, U>{}),
- hana::Orderable<T>::value &&
- hana::Orderable<U>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Orderable<T>::value,
- "hana::min(x, y) requires 'x' to be Orderable");
-
- static_assert(hana::Orderable<U>::value,
- "hana::min(x, y) requires 'y' to be Orderable");
- #endif
-
- return Min::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- //! @endcond
-
- template <typename T, typename U, bool condition>
- struct min_impl<T, U, when<condition>> : default_ {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- decltype(auto) cond = hana::less(x, y);
- return hana::if_(static_cast<decltype(cond)&&>(cond),
- static_cast<X&&>(x),
- static_cast<Y&&>(y)
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_MIN_HPP
diff --git a/contrib/restricted/boost/boost/hana/minimum.hpp b/contrib/restricted/boost/boost/hana/minimum.hpp
deleted file mode 100644
index 8b6f41d8c8..0000000000
--- a/contrib/restricted/boost/boost/hana/minimum.hpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/*!
-@file
-Defines `boost::hana::minimum`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_MINIMUM_HPP
-#define BOOST_HANA_MINIMUM_HPP
-
-#include <boost/hana/fwd/minimum.hpp>
-
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/nested_by.hpp> // required by fwd decl
-#include <boost/hana/fold_left.hpp>
-#include <boost/hana/if.hpp>
-#include <boost/hana/less.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs>
- constexpr decltype(auto) minimum_t::operator()(Xs&& xs) const {
- using S = typename hana::tag_of<Xs>::type;
- using Minimum = BOOST_HANA_DISPATCH_IF(minimum_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::minimum(xs) requires 'xs' to be Foldable");
- #endif
-
- return Minimum::apply(static_cast<Xs&&>(xs));
- }
-
- template <typename Xs, typename Predicate>
- constexpr decltype(auto) minimum_t::operator()(Xs&& xs, Predicate&& pred) const {
- using S = typename hana::tag_of<Xs>::type;
- using Minimum = BOOST_HANA_DISPATCH_IF(minimum_pred_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::minimum(xs, predicate) requires 'xs' to be Foldable");
- #endif
-
- return Minimum::apply(static_cast<Xs&&>(xs),
- static_cast<Predicate&&>(pred));
- }
- //! @endcond
-
- //////////////////////////////////////////////////////////////////////////
- // minimum (with a custom predicate)
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <typename Pred>
- struct min_by {
- Pred pred;
-
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) const {
- auto result = (*pred)(x, y);
- return hana::if_(result, static_cast<X&&>(x),
- static_cast<Y&&>(y));
- }
- };
- }
-
- template <typename T, bool condition>
- struct minimum_pred_impl<T, when<condition>> : default_ {
- template <typename Xs, typename Pred>
- static constexpr decltype(auto) apply(Xs&& xs, Pred const& pred) {
- // We use a pointer instead of a reference to avoid a Clang ICE.
- return hana::fold_left(static_cast<Xs&&>(xs),
- detail::min_by<decltype(&pred)>{&pred}
- );
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // minimum (without a custom predicate)
- //////////////////////////////////////////////////////////////////////////
- template <typename T, bool condition>
- struct minimum_impl<T, when<condition>> : default_ {
- template <typename Xs>
- static constexpr decltype(auto) apply(Xs&& xs)
- { return hana::minimum(static_cast<Xs&&>(xs), hana::less); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_MINIMUM_HPP
diff --git a/contrib/restricted/boost/boost/hana/minus.hpp b/contrib/restricted/boost/boost/hana/minus.hpp
deleted file mode 100644
index 007a3ec24e..0000000000
--- a/contrib/restricted/boost/boost/hana/minus.hpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/*!
-@file
-Defines `boost::hana::minus`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_MINUS_HPP
-#define BOOST_HANA_MINUS_HPP
-
-#include <boost/hana/fwd/minus.hpp>
-
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/group.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/common.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/canonical_constant.hpp>
-#include <boost/hana/detail/has_common_embedding.hpp>
-#include <boost/hana/fwd/negate.hpp>
-#include <boost/hana/plus.hpp>
-#include <boost/hana/value.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X, typename Y>
- constexpr decltype(auto) minus_t::operator()(X&& x, Y&& y) const {
- using T = typename hana::tag_of<X>::type;
- using U = typename hana::tag_of<Y>::type;
- using Minus = BOOST_HANA_DISPATCH_IF(decltype(minus_impl<T, U>{}),
- hana::Group<T>::value &&
- hana::Group<U>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Group<T>::value,
- "hana::minus(x, y) requires 'x' to be in a Group");
-
- static_assert(hana::Group<U>::value,
- "hana::minus(x, y) requires 'y' to be in a Group");
- #endif
-
- return Minus::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- //! @endcond
-
- template <typename T, typename U, bool condition>
- struct minus_impl<T, U, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- template <typename T, bool condition>
- struct minus_impl<T, T, when<condition>> : default_ {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- return hana::plus(static_cast<X&&>(x),
- hana::negate(static_cast<Y&&>(y)));
- }
- };
-
- // Cross-type overload
- template <typename T, typename U>
- struct minus_impl<T, U, when<
- detail::has_nontrivial_common_embedding<Group, T, U>::value
- >> {
- using C = typename common<T, U>::type;
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- return hana::minus(hana::to<C>(static_cast<X&&>(x)),
- hana::to<C>(static_cast<Y&&>(y)));
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for arithmetic data types
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct minus_impl<T, T, when<std::is_arithmetic<T>::value &&
- !std::is_same<bool, T>::value>> {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y)
- { return static_cast<X&&>(x) - static_cast<Y&&>(y); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for Constants over a Group
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <typename C, typename X, typename Y>
- struct constant_from_minus {
- static constexpr auto value = hana::minus(hana::value<X>(), hana::value<Y>());
- using hana_tag = detail::CanonicalConstant<typename C::value_type>;
- };
- }
-
- template <typename C>
- struct minus_impl<C, C, when<
- hana::Constant<C>::value &&
- Group<typename C::value_type>::value
- >> {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X const&, Y const&)
- { return hana::to<C>(detail::constant_from_minus<C, X, Y>{}); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_MINUS_HPP
diff --git a/contrib/restricted/boost/boost/hana/mod.hpp b/contrib/restricted/boost/boost/hana/mod.hpp
deleted file mode 100644
index f64b12f211..0000000000
--- a/contrib/restricted/boost/boost/hana/mod.hpp
+++ /dev/null
@@ -1,107 +0,0 @@
-/*!
-@file
-Defines `boost::hana::mod`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_MOD_HPP
-#define BOOST_HANA_MOD_HPP
-
-#include <boost/hana/fwd/mod.hpp>
-
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/euclidean_ring.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/canonical_constant.hpp>
-#include <boost/hana/detail/has_common_embedding.hpp>
-#include <boost/hana/value.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X, typename Y>
- constexpr decltype(auto) mod_t::operator()(X&& x, Y&& y) const {
- using T = typename hana::tag_of<X>::type;
- using U = typename hana::tag_of<Y>::type;
- using Mod = BOOST_HANA_DISPATCH_IF(decltype(mod_impl<T, U>{}),
- hana::EuclideanRing<T>::value &&
- hana::EuclideanRing<U>::value &&
- !is_default<mod_impl<T, U>>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::EuclideanRing<T>::value,
- "hana::mod(x, y) requires 'x' to be an EuclideanRing");
-
- static_assert(hana::EuclideanRing<U>::value,
- "hana::mod(x, y) requires 'y' to be an EuclideanRing");
-
- static_assert(!is_default<mod_impl<T, U>>::value,
- "hana::mod(x, y) requires 'x' and 'y' to be embeddable "
- "in a common EuclideanRing");
- #endif
-
- return Mod::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- //! @endcond
-
- template <typename T, typename U, bool condition>
- struct mod_impl<T, U, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- // Cross-type overload
- template <typename T, typename U>
- struct mod_impl<T, U, when<
- detail::has_nontrivial_common_embedding<EuclideanRing, T, U>::value
- >> {
- using C = typename common<T, U>::type;
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- return hana::mod(hana::to<C>(static_cast<X&&>(x)),
- hana::to<C>(static_cast<Y&&>(y)));
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for integral data types
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct mod_impl<T, T, when<std::is_integral<T>::value &&
- !std::is_same<T, bool>::value>> {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y)
- { return static_cast<X&&>(x) % static_cast<Y&&>(y); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for Constants over an EuclideanRing
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <typename C, typename X, typename Y>
- struct constant_from_mod {
- static constexpr auto value = hana::mod(hana::value<X>(), hana::value<Y>());
- using hana_tag = detail::CanonicalConstant<typename C::value_type>;
- };
- }
-
- template <typename C>
- struct mod_impl<C, C, when<
- hana::Constant<C>::value &&
- EuclideanRing<typename C::value_type>::value
- >> {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X const&, Y const&)
- { return hana::to<C>(detail::constant_from_mod<C, X, Y>{}); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_MOD_HPP
diff --git a/contrib/restricted/boost/boost/hana/monadic_compose.hpp b/contrib/restricted/boost/boost/hana/monadic_compose.hpp
deleted file mode 100644
index 064bfc24d3..0000000000
--- a/contrib/restricted/boost/boost/hana/monadic_compose.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*!
-@file
-Defines `boost::hana::monadic_compose`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_MONADIC_COMPOSE_HPP
-#define BOOST_HANA_MONADIC_COMPOSE_HPP
-
-#include <boost/hana/fwd/monadic_compose.hpp>
-
-#include <boost/hana/chain.hpp>
-#include <boost/hana/concept/monad.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/functional/partial.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace detail {
- struct monadic_compose_helper {
- template <typename F, typename G, typename X>
- constexpr decltype(auto) operator()(F&& f, G&& g, X&& x) const {
- using M = typename hana::tag_of<decltype(g(x))>::type;
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Monad<M>::value,
- "hana::monadic_compose(f, g) requires 'g' to return a monadic value");
- #endif
-
- return hana::chain(static_cast<G&&>(g)(static_cast<X&&>(x)),
- static_cast<F&&>(f));
- }
- };
- }
-
- //! @cond
- template <typename F, typename G>
- constexpr auto monadic_compose_t::operator()(F&& f, G&& g) const {
- return hana::partial(detail::monadic_compose_helper{},
- static_cast<F&&>(f),
- static_cast<G&&>(g)
- );
- }
- //! @endcond
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_MONADIC_COMPOSE_HPP
diff --git a/contrib/restricted/boost/boost/hana/monadic_fold_left.hpp b/contrib/restricted/boost/boost/hana/monadic_fold_left.hpp
deleted file mode 100644
index e06c405604..0000000000
--- a/contrib/restricted/boost/boost/hana/monadic_fold_left.hpp
+++ /dev/null
@@ -1,132 +0,0 @@
-/*!
-@file
-Defines `boost::hana::monadic_fold_left`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_MONADIC_FOLD_LEFT_HPP
-#define BOOST_HANA_MONADIC_FOLD_LEFT_HPP
-
-#include <boost/hana/fwd/monadic_fold_left.hpp>
-
-#include <boost/hana/chain.hpp>
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/concept/monad.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/fold_right.hpp>
-#include <boost/hana/functional/curry.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/lift.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename M>
- struct monadic_fold_left_t {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Monad<M>::value,
- "hana::monadic_fold_left<M> requires 'M' to be a Monad");
- #endif
-
- template <typename Xs, typename State, typename F>
- constexpr decltype(auto) operator()(Xs&& xs, State&& state, F&& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using MonadicFoldLeft = BOOST_HANA_DISPATCH_IF(monadic_fold_left_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::monadic_fold_left<M>(xs, state, f) requires 'xs' to be Foldable");
- #endif
-
- return MonadicFoldLeft::template apply<M>(static_cast<Xs&&>(xs),
- static_cast<State&&>(state),
- static_cast<F&&>(f));
- }
-
- template <typename Xs, typename F>
- constexpr decltype(auto) operator()(Xs&& xs, F&& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using MonadicFoldLeft = BOOST_HANA_DISPATCH_IF(monadic_fold_left_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::monadic_fold_left<M>(xs, f) requires 'xs' to be Foldable");
- #endif
-
- return MonadicFoldLeft::template apply<M>(static_cast<Xs&&>(xs),
- static_cast<F&&>(f));
- }
- };
-
- namespace detail {
- struct foldlM_helper {
- template <typename F, typename X, typename K, typename Z>
- constexpr decltype(auto) operator()(F&& f, X&& x, K&& k, Z&& z) const {
- return hana::chain(
- static_cast<F&&>(f)(
- static_cast<Z&&>(z),
- static_cast<X&&>(x)
- ),
- static_cast<K&&>(k)
- );
- }
- };
-
- template <typename End, typename M, typename F>
- struct monadic_foldl1_helper {
- F f;
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) const
- { return f(static_cast<X&&>(x), static_cast<Y&&>(y)); }
- template <typename Y>
- constexpr decltype(auto) operator()(End, Y&& y) const
- { return hana::lift<M>(static_cast<Y&&>(y)); }
- };
- }
-
- template <typename T, bool condition>
- struct monadic_fold_left_impl<T, when<condition>> : default_ {
- // with state
- template <typename M, typename Xs, typename S, typename F>
- static constexpr decltype(auto) apply(Xs&& xs, S&& s, F&& f) {
- return hana::fold_right(
- static_cast<Xs&&>(xs),
- hana::lift<M>,
- hana::curry<3>(hana::partial(
- detail::foldlM_helper{}, static_cast<F&&>(f)
- ))
- )(static_cast<S&&>(s));
- }
-
- // without state
- template <typename M, typename Xs, typename F>
- static constexpr decltype(auto) apply(Xs&& xs, F&& f) {
- struct end { };
- using G = detail::monadic_foldl1_helper<end, M, typename detail::decay<F>::type>;
- decltype(auto) result = hana::monadic_fold_left<M>(
- static_cast<Xs&&>(xs),
- end{},
- G{static_cast<F&&>(f)}
- );
-
- static_assert(!std::is_same<
- std::remove_reference_t<decltype(result)>,
- decltype(hana::lift<M>(end{}))
- >{},
- "hana::monadic_fold_left<M>(xs, f) requires 'xs' to be non-empty");
- return result;
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_MONADIC_FOLD_LEFT_HPP
diff --git a/contrib/restricted/boost/boost/hana/monadic_fold_right.hpp b/contrib/restricted/boost/boost/hana/monadic_fold_right.hpp
deleted file mode 100644
index 7026b058c3..0000000000
--- a/contrib/restricted/boost/boost/hana/monadic_fold_right.hpp
+++ /dev/null
@@ -1,131 +0,0 @@
-/*!
-@file
-Defines `boost::hana::monadic_fold_right`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_MONADIC_FOLD_RIGHT_HPP
-#define BOOST_HANA_MONADIC_FOLD_RIGHT_HPP
-
-#include <boost/hana/fwd/monadic_fold_right.hpp>
-
-#include <boost/hana/chain.hpp>
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/concept/monad.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/fold_left.hpp>
-#include <boost/hana/functional/curry.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/lift.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename M>
- struct monadic_fold_right_t {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Monad<M>::value,
- "hana::monadic_fold_right<M> requires 'M' to be a Monad");
- #endif
-
- template <typename Xs, typename State, typename F>
- constexpr decltype(auto) operator()(Xs&& xs, State&& state, F&& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using MonadicFoldRight = BOOST_HANA_DISPATCH_IF(monadic_fold_right_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::monadic_fold_right<M>(xs, state, f) requires 'xs' to be Foldable");
- #endif
-
- return MonadicFoldRight::template apply<M>(static_cast<Xs&&>(xs),
- static_cast<State&&>(state),
- static_cast<F&&>(f));
- }
-
- template <typename Xs, typename F>
- constexpr decltype(auto) operator()(Xs&& xs, F&& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using MonadicFoldRight = BOOST_HANA_DISPATCH_IF(monadic_fold_right_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::monadic_fold_right<M>(xs, f) requires 'xs' to be Foldable");
- #endif
- return MonadicFoldRight::template apply<M>(static_cast<Xs&&>(xs),
- static_cast<F&&>(f));
- }
- };
-
- namespace detail {
- struct foldrM_helper {
- template <typename F, typename K, typename X, typename Z>
- constexpr decltype(auto) operator()(F&& f, K&& k, X&& x, Z&& z) const {
- return hana::chain(
- static_cast<F&&>(f)(
- static_cast<X&&>(x),
- static_cast<Z&&>(z)
- ),
- static_cast<K&&>(k)
- );
- }
- };
-
- template <typename End, typename M, typename F>
- struct monadic_foldr1_helper {
- F f;
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) const
- { return f(static_cast<X&&>(x), static_cast<Y&&>(y)); }
- template <typename X>
- constexpr decltype(auto) operator()(X&& x, End) const
- { return hana::lift<M>(static_cast<X&&>(x)); }
- };
- }
-
- template <typename T, bool condition>
- struct monadic_fold_right_impl<T, when<condition>> : default_ {
- // with state
- template <typename M, typename Xs, typename S, typename F>
- static constexpr decltype(auto) apply(Xs&& xs, S&& s, F&& f) {
- return hana::fold_left(
- static_cast<Xs&&>(xs),
- hana::lift<M>,
- hana::curry<3>(hana::partial(
- detail::foldrM_helper{}, static_cast<F&&>(f)
- ))
- )(static_cast<S&&>(s));
- }
-
- // without state
- template <typename M, typename Xs, typename F>
- static constexpr decltype(auto) apply(Xs&& xs, F&& f) {
- struct end { };
- using G = detail::monadic_foldr1_helper<end, M, typename detail::decay<F>::type>;
- decltype(auto) result = hana::monadic_fold_right<M>(
- static_cast<Xs&&>(xs),
- end{},
- G{static_cast<F&&>(f)}
- );
-
- static_assert(!std::is_same<
- std::remove_reference_t<decltype(result)>,
- decltype(hana::lift<M>(end{}))
- >{},
- "hana::monadic_fold_right<M>(xs, f) requires 'xs' to be non-empty");
- return result;
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_MONADIC_FOLD_RIGHT_HPP
diff --git a/contrib/restricted/boost/boost/hana/mult.hpp b/contrib/restricted/boost/boost/hana/mult.hpp
deleted file mode 100644
index 9eb89a0cf2..0000000000
--- a/contrib/restricted/boost/boost/hana/mult.hpp
+++ /dev/null
@@ -1,107 +0,0 @@
-/*!
-@file
-Defines `boost::hana::mult`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_MULT_HPP
-#define BOOST_HANA_MULT_HPP
-
-#include <boost/hana/fwd/mult.hpp>
-
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/ring.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/canonical_constant.hpp>
-#include <boost/hana/detail/has_common_embedding.hpp>
-#include <boost/hana/value.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X, typename Y>
- constexpr decltype(auto) mult_t::operator()(X&& x, Y&& y) const {
- using T = typename hana::tag_of<X>::type;
- using U = typename hana::tag_of<Y>::type;
- using Mult = BOOST_HANA_DISPATCH_IF(decltype(mult_impl<T, U>{}),
- hana::Ring<T>::value &&
- hana::Ring<U>::value &&
- !is_default<mult_impl<T, U>>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Ring<T>::value,
- "hana::mult(x, y) requires 'x' to be in a Ring");
-
- static_assert(hana::Ring<U>::value,
- "hana::mult(x, y) requires 'y' to be in a Ring");
-
- static_assert(!is_default<mult_impl<T, U>>::value,
- "hana::mult(x, y) requires 'x' and 'y' to be embeddable "
- "in a common Ring");
- #endif
-
- return Mult::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- //! @endcond
-
- template <typename T, typename U, bool condition>
- struct mult_impl<T, U, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- // Cross-type overload
- template <typename T, typename U>
- struct mult_impl<T, U, when<
- detail::has_nontrivial_common_embedding<Ring, T, U>::value
- >> {
- using C = typename common<T, U>::type;
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- return hana::mult(hana::to<C>(static_cast<X&&>(x)),
- hana::to<C>(static_cast<Y&&>(y)));
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for non-boolean arithmetic data types
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct mult_impl<T, T, when<std::is_arithmetic<T>::value &&
- !std::is_same<bool, T>::value>> {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y)
- { return static_cast<X&&>(x) * static_cast<Y&&>(y); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for Constants over a Ring
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <typename C, typename X, typename Y>
- struct constant_from_mult {
- static constexpr auto value = hana::mult(hana::value<X>(), hana::value<Y>());
- using hana_tag = detail::CanonicalConstant<typename C::value_type>;
- };
- }
-
- template <typename C>
- struct mult_impl<C, C, when<
- hana::Constant<C>::value &&
- Ring<typename C::value_type>::value
- >> {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X const&, Y const&)
- { return hana::to<C>(detail::constant_from_mult<C, X, Y>{}); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_MULT_HPP
diff --git a/contrib/restricted/boost/boost/hana/negate.hpp b/contrib/restricted/boost/boost/hana/negate.hpp
deleted file mode 100644
index 2b87e7d6a6..0000000000
--- a/contrib/restricted/boost/boost/hana/negate.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*!
-@file
-Defines `boost::hana::negate`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_NEGATE_HPP
-#define BOOST_HANA_NEGATE_HPP
-
-#include <boost/hana/fwd/negate.hpp>
-
-#include <boost/hana/concept/group.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/fwd/minus.hpp>
-#include <boost/hana/zero.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X>
- constexpr decltype(auto) negate_t::operator()(X&& x) const {
- using G = typename hana::tag_of<X>::type;
- using Negate = BOOST_HANA_DISPATCH_IF(negate_impl<G>,
- hana::Group<G>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Group<G>::value,
- "hana::negate(x) requires 'x' to be in a Group");
- #endif
-
- return Negate::apply(static_cast<X&&>(x));
- }
- //! @endcond
-
- template <typename T, bool condition>
- struct negate_impl<T, when<condition>> : default_ {
- template <typename X>
- static constexpr decltype(auto) apply(X&& x)
- { return hana::minus(hana::zero<T>(), static_cast<X&&>(x)); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for arithmetic data types
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct negate_impl<T, when<std::is_arithmetic<T>::value &&
- !std::is_same<bool, T>::value>> {
- template <typename X>
- static constexpr decltype(auto) apply(X&& x)
- { return -static_cast<X&&>(x); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_NEGATE_HPP
diff --git a/contrib/restricted/boost/boost/hana/none.hpp b/contrib/restricted/boost/boost/hana/none.hpp
deleted file mode 100644
index 0d8d499dfe..0000000000
--- a/contrib/restricted/boost/boost/hana/none.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*!
-@file
-Defines `boost::hana::none`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_NONE_HPP
-#define BOOST_HANA_NONE_HPP
-
-#include <boost/hana/fwd/none.hpp>
-
-#include <boost/hana/concept/searchable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/functional/id.hpp>
-#include <boost/hana/none_of.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs>
- constexpr auto none_t::operator()(Xs&& xs) const {
- using S = typename hana::tag_of<Xs>::type;
- using None = BOOST_HANA_DISPATCH_IF(none_impl<S>,
- hana::Searchable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Searchable<S>::value,
- "hana::none(xs) requires 'xs' to be a Searchable");
- #endif
-
- return None::apply(static_cast<Xs&&>(xs));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct none_impl<S, when<condition>> : default_ {
- template <typename Xs>
- static constexpr auto apply(Xs&& xs)
- { return hana::none_of(static_cast<Xs&&>(xs), hana::id); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_NONE_HPP
diff --git a/contrib/restricted/boost/boost/hana/none_of.hpp b/contrib/restricted/boost/boost/hana/none_of.hpp
deleted file mode 100644
index 4cf3ffd2d9..0000000000
--- a/contrib/restricted/boost/boost/hana/none_of.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*!
-@file
-Defines `boost::hana::none_of`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_NONE_OF_HPP
-#define BOOST_HANA_NONE_OF_HPP
-
-#include <boost/hana/fwd/none_of.hpp>
-
-#include <boost/hana/any_of.hpp>
-#include <boost/hana/concept/searchable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/not.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Pred>
- constexpr auto none_of_t::operator()(Xs&& xs, Pred&& pred) const {
- using S = typename hana::tag_of<Xs>::type;
- using NoneOf = BOOST_HANA_DISPATCH_IF(none_of_impl<S>,
- hana::Searchable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Searchable<S>::value,
- "hana::none_of(xs, pred) requires 'xs' to be a Searchable");
- #endif
-
- return NoneOf::apply(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct none_of_impl<S, when<condition>> : default_ {
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&& pred) {
- return hana::not_(hana::any_of(static_cast<Xs&&>(xs),
- static_cast<Pred&&>(pred)));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_NONE_OF_HPP
diff --git a/contrib/restricted/boost/boost/hana/not.hpp b/contrib/restricted/boost/boost/hana/not.hpp
deleted file mode 100644
index 2475f637f1..0000000000
--- a/contrib/restricted/boost/boost/hana/not.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/*!
-@file
-Defines `boost::hana::not_`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_NOT_HPP
-#define BOOST_HANA_NOT_HPP
-
-#include <boost/hana/fwd/not.hpp>
-
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/logical.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/canonical_constant.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X>
- constexpr decltype(auto) not_t::operator()(X&& x) const {
- using Bool = typename hana::tag_of<X>::type;
- using Not = BOOST_HANA_DISPATCH_IF(hana::not_impl<Bool>,
- hana::Logical<Bool>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Logical<Bool>::value,
- "hana::not_(cond) requires 'cond' to be a Logical");
- #endif
-
- return Not::apply(static_cast<X&&>(x));
- }
- //! @endcond
-
- template <typename L, bool condition>
- struct not_impl<L, when<condition>> : hana::default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- template <typename L>
- struct not_impl<L, hana::when<std::is_arithmetic<L>::value>> {
- template <typename Cond>
- static constexpr Cond apply(Cond const& cond)
- { return static_cast<Cond>(cond ? false : true); }
- };
-
- namespace detail {
- template <typename C, typename X>
- struct constant_from_not {
- static constexpr auto value = hana::not_(hana::value<X>());
- using hana_tag = detail::CanonicalConstant<typename C::value_type>;
- };
- }
-
- template <typename C>
- struct not_impl<C, hana::when<
- hana::Constant<C>::value &&
- hana::Logical<typename C::value_type>::value
- >> {
- template <typename Cond>
- static constexpr auto apply(Cond const&)
- { return hana::to<C>(detail::constant_from_not<C, Cond>{}); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_NOT_HPP
diff --git a/contrib/restricted/boost/boost/hana/not_equal.hpp b/contrib/restricted/boost/boost/hana/not_equal.hpp
deleted file mode 100644
index 099574bdd0..0000000000
--- a/contrib/restricted/boost/boost/hana/not_equal.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/*!
-@file
-Defines `boost::hana::not_equal`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_NOT_EQUAL_HPP
-#define BOOST_HANA_NOT_EQUAL_HPP
-
-#include <boost/hana/fwd/not_equal.hpp>
-
-#include <boost/hana/concept/comparable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/has_common_embedding.hpp>
-#include <boost/hana/detail/nested_to.hpp> // required by fwd decl
-#include <boost/hana/equal.hpp>
-#include <boost/hana/not.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X, typename Y>
- constexpr auto not_equal_t::operator()(X&& x, Y&& y) const {
- using T = typename hana::tag_of<X>::type;
- using U = typename hana::tag_of<Y>::type;
- using NotEqual = not_equal_impl<T, U>;
- return NotEqual::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- //! @endcond
-
- template <typename T, typename U, bool condition>
- struct not_equal_impl<T, U, when<condition>> : default_ {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- return hana::not_(hana::equal(static_cast<X&&>(x),
- static_cast<Y&&>(y)));
- }
- };
-
- // Cross-type overload
- template <typename T, typename U>
- struct not_equal_impl<T, U, when<
- detail::has_nontrivial_common_embedding<Comparable, T, U>::value
- >> {
- using C = typename hana::common<T, U>::type;
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- return hana::not_equal(hana::to<C>(static_cast<X&&>(x)),
- hana::to<C>(static_cast<Y&&>(y)));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_NOT_EQUAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/one.hpp b/contrib/restricted/boost/boost/hana/one.hpp
deleted file mode 100644
index b8d759b8c0..0000000000
--- a/contrib/restricted/boost/boost/hana/one.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/*!
-@file
-Defines `boost::hana::one`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ONE_HPP
-#define BOOST_HANA_ONE_HPP
-
-#include <boost/hana/fwd/one.hpp>
-
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/ring.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/canonical_constant.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename R>
- struct one_t {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Ring<R>::value,
- "hana::one<R>() requires 'R' to be a Ring");
- #endif
-
- constexpr decltype(auto) operator()() const {
- using One = BOOST_HANA_DISPATCH_IF(one_impl<R>,
- hana::Ring<R>::value
- );
-
- return One::apply();
- }
- };
-
- template <typename R, bool condition>
- struct one_impl<R, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for non-boolean arithmetic data types
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct one_impl<T, when<std::is_arithmetic<T>::value &&
- !std::is_same<bool, T>::value>> {
- static constexpr T apply()
- { return static_cast<T>(1); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for Constants over a Ring
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <typename C>
- struct constant_from_one {
- static constexpr auto value = hana::one<typename C::value_type>();
- using hana_tag = detail::CanonicalConstant<typename C::value_type>;
- };
- }
-
- template <typename C>
- struct one_impl<C, when<
- hana::Constant<C>::value &&
- Ring<typename C::value_type>::value
- >> {
- static constexpr decltype(auto) apply()
- { return hana::to<C>(detail::constant_from_one<C>{}); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_ONE_HPP
diff --git a/contrib/restricted/boost/boost/hana/optional.hpp b/contrib/restricted/boost/boost/hana/optional.hpp
deleted file mode 100644
index b3fe78b645..0000000000
--- a/contrib/restricted/boost/boost/hana/optional.hpp
+++ /dev/null
@@ -1,417 +0,0 @@
-/*!
-@file
-Defines `boost::hana::optional`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_OPTIONAL_HPP
-#define BOOST_HANA_OPTIONAL_HPP
-
-#include <boost/hana/fwd/optional.hpp>
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/detail/operators/adl.hpp>
-#include <boost/hana/detail/operators/comparable.hpp>
-#include <boost/hana/detail/operators/monad.hpp>
-#include <boost/hana/detail/operators/orderable.hpp>
-#include <boost/hana/detail/wrong.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/fwd/any_of.hpp>
-#include <boost/hana/fwd/ap.hpp>
-#include <boost/hana/fwd/concat.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/empty.hpp>
-#include <boost/hana/fwd/equal.hpp>
-#include <boost/hana/fwd/find_if.hpp>
-#include <boost/hana/fwd/flatten.hpp>
-#include <boost/hana/fwd/less.hpp>
-#include <boost/hana/fwd/lift.hpp>
-#include <boost/hana/fwd/transform.hpp>
-#include <boost/hana/fwd/type.hpp>
-#include <boost/hana/fwd/unpack.hpp>
-
-#include <cstddef> // std::nullptr_t
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //////////////////////////////////////////////////////////////////////////
- // optional<>
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <typename T, typename = typename hana::tag_of<T>::type>
- struct nested_type { };
-
- template <typename T>
- struct nested_type<T, type_tag> { using type = typename T::type; };
- }
-
- template <typename T>
- struct optional<T> : detail::operators::adl<>, detail::nested_type<T> {
- // 5.3.1, Constructors
- constexpr optional() = default;
- constexpr optional(optional const&) = default;
- constexpr optional(optional&&) = default;
-
- constexpr optional(T const& t)
- : value_(t)
- { }
-
- constexpr optional(T&& t)
- : value_(static_cast<T&&>(t))
- { }
-
- // 5.3.3, Assignment
- constexpr optional& operator=(optional const&) = default;
- constexpr optional& operator=(optional&&) = default;
-
- // 5.3.5, Observers
- constexpr T const* operator->() const { return &value_; }
- constexpr T* operator->() { return &value_; }
-
- constexpr T& value() & { return value_; }
- constexpr T const& value() const& { return value_; }
- constexpr T&& value() && { return static_cast<T&&>(value_); }
- constexpr T const&& value() const&& { return static_cast<T const&&>(value_); }
-
- constexpr T& operator*() & { return value_; }
- constexpr T const& operator*() const& { return value_; }
- constexpr T&& operator*() && { return static_cast<T&&>(value_); }
- constexpr T const&& operator*() const&& { return static_cast<T const&&>(value_); }
-
- template <typename U> constexpr T& value_or(U&&) & { return value_; }
- template <typename U> constexpr T const& value_or(U&&) const& { return value_; }
- template <typename U> constexpr T&& value_or(U&&) && { return static_cast<T&&>(value_); }
- template <typename U> constexpr T const&& value_or(U&&) const&& { return static_cast<T const&&>(value_); }
-
- // We leave this public because it simplifies the implementation, but
- // this should be considered private by users.
- T value_;
- };
-
- //! @cond
- template <typename ...dummy>
- constexpr auto optional<>::value() const {
- static_assert(detail::wrong<dummy...>{},
- "hana::optional::value() requires a non-empty optional");
- }
-
- template <typename ...dummy>
- constexpr auto optional<>::operator*() const {
- static_assert(detail::wrong<dummy...>{},
- "hana::optional::operator* requires a non-empty optional");
- }
-
- template <typename U>
- constexpr U&& optional<>::value_or(U&& u) const {
- return static_cast<U&&>(u);
- }
-
- template <typename T>
- constexpr auto make_just_t::operator()(T&& t) const {
- return hana::optional<typename detail::decay<T>::type>(static_cast<T&&>(t));
- }
- //! @endcond
-
- template <typename ...T>
- struct tag_of<optional<T...>> {
- using type = optional_tag;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // make<optional_tag>
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct make_impl<optional_tag> {
- template <typename X>
- static constexpr auto apply(X&& x)
- { return hana::just(static_cast<X&&>(x)); }
-
- static constexpr auto apply()
- { return hana::nothing; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Operators
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <>
- struct comparable_operators<optional_tag> {
- static constexpr bool value = true;
- };
- template <>
- struct orderable_operators<optional_tag> {
- static constexpr bool value = true;
- };
- template <>
- struct monad_operators<optional_tag> {
- static constexpr bool value = true;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // is_just and is_nothing
- //////////////////////////////////////////////////////////////////////////
- //! @cond
- template <typename ...T>
- constexpr auto is_just_t::operator()(optional<T...> const&) const
- { return hana::bool_c<sizeof...(T) != 0>; }
-
- template <typename ...T>
- constexpr auto is_nothing_t::operator()(optional<T...> const&) const
- { return hana::bool_c<sizeof...(T) == 0>; }
- //! @endcond
-
- //////////////////////////////////////////////////////////////////////////
- // sfinae
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- struct sfinae_impl {
- template <typename F, typename ...X, typename = decltype(
- std::declval<F>()(std::declval<X>()...)
- )>
- constexpr decltype(auto) operator()(int, F&& f, X&& ...x) const {
- using Return = decltype(static_cast<F&&>(f)(static_cast<X&&>(x)...));
- static_assert(!std::is_same<Return, void>::value,
- "hana::sfinae(f)(args...) requires f(args...) to be non-void");
-
- return hana::just(static_cast<F&&>(f)(static_cast<X&&>(x)...));
- }
-
- template <typename F, typename ...X>
- constexpr auto operator()(long, F&&, X&& ...) const
- { return hana::nothing; }
- };
- }
-
- //! @cond
- template <typename F>
- constexpr decltype(auto) sfinae_t::operator()(F&& f) const {
- return hana::partial(detail::sfinae_impl{}, int{},
- static_cast<F&&>(f));
- }
- //! @endcond
-
- //////////////////////////////////////////////////////////////////////////
- // Comparable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct equal_impl<optional_tag, optional_tag> {
- template <typename T, typename U>
- static constexpr auto apply(hana::optional<T> const& t, hana::optional<U> const& u)
- { return hana::equal(t.value_, u.value_); }
-
- static constexpr hana::true_ apply(hana::optional<> const&, hana::optional<> const&)
- { return {}; }
-
- template <typename T, typename U>
- static constexpr hana::false_ apply(T const&, U const&)
- { return {}; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Orderable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct less_impl<optional_tag, optional_tag> {
- template <typename T>
- static constexpr hana::true_ apply(hana::optional<> const&, hana::optional<T> const&)
- { return {}; }
-
- static constexpr hana::false_ apply(hana::optional<> const&, hana::optional<> const&)
- { return {}; }
-
- template <typename T>
- static constexpr hana::false_ apply(hana::optional<T> const&, hana::optional<> const&)
- { return {}; }
-
- template <typename T, typename U>
- static constexpr auto apply(hana::optional<T> const& x, hana::optional<U> const& y)
- { return hana::less(x.value_, y.value_); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Functor
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct transform_impl<optional_tag> {
- template <typename F>
- static constexpr auto apply(optional<> const&, F&&)
- { return hana::nothing; }
-
- template <typename T, typename F>
- static constexpr auto apply(optional<T> const& opt, F&& f)
- { return hana::just(static_cast<F&&>(f)(opt.value_)); }
-
- template <typename T, typename F>
- static constexpr auto apply(optional<T>& opt, F&& f)
- { return hana::just(static_cast<F&&>(f)(opt.value_)); }
-
- template <typename T, typename F>
- static constexpr auto apply(optional<T>&& opt, F&& f)
- { return hana::just(static_cast<F&&>(f)(static_cast<T&&>(opt.value_))); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Applicative
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct lift_impl<optional_tag> {
- template <typename X>
- static constexpr auto apply(X&& x)
- { return hana::just(static_cast<X&&>(x)); }
- };
-
- template <>
- struct ap_impl<optional_tag> {
- template <typename F, typename X>
- static constexpr auto ap_helper(F&&, X&&, ...)
- { return hana::nothing; }
-
- template <typename F, typename X>
- static constexpr auto ap_helper(F&& f, X&& x, hana::true_, hana::true_)
- { return hana::just(static_cast<F&&>(f).value_(static_cast<X&&>(x).value_)); }
-
- template <typename F, typename X>
- static constexpr auto apply(F&& f, X&& x) {
- return ap_impl::ap_helper(static_cast<F&&>(f), static_cast<X&&>(x),
- hana::is_just(f), hana::is_just(x));
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Monad
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct flatten_impl<optional_tag> {
- static constexpr auto apply(optional<> const&)
- { return hana::nothing; }
-
- static constexpr auto apply(optional<optional<>> const&)
- { return hana::nothing; }
-
- template <typename T>
- static constexpr auto apply(optional<optional<T>> const& opt)
- { return hana::just(opt.value_.value_); }
-
- template <typename T>
- static constexpr auto apply(optional<optional<T>>&& opt)
- { return hana::just(static_cast<T&&>(opt.value_.value_)); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // MonadPlus
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct concat_impl<optional_tag> {
- template <typename Y>
- static constexpr auto apply(hana::optional<>&, Y&& y)
- { return static_cast<Y&&>(y); }
-
- template <typename Y>
- static constexpr auto apply(hana::optional<>&&, Y&& y)
- { return static_cast<Y&&>(y); }
-
- template <typename Y>
- static constexpr auto apply(hana::optional<> const&, Y&& y)
- { return static_cast<Y&&>(y); }
-
- template <typename X, typename Y>
- static constexpr auto apply(X&& x, Y&&)
- { return static_cast<X&&>(x); }
- };
-
- template <>
- struct empty_impl<optional_tag> {
- static constexpr auto apply()
- { return hana::nothing; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Foldable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct unpack_impl<optional_tag> {
- template <typename T, typename F>
- static constexpr decltype(auto) apply(optional<T>&& opt, F&& f)
- { return static_cast<F&&>(f)(static_cast<T&&>(opt.value_)); }
-
- template <typename T, typename F>
- static constexpr decltype(auto) apply(optional<T> const& opt, F&& f)
- { return static_cast<F&&>(f)(opt.value_); }
-
- template <typename T, typename F>
- static constexpr decltype(auto) apply(optional<T>& opt, F&& f)
- { return static_cast<F&&>(f)(opt.value_); }
-
- template <typename F>
- static constexpr decltype(auto) apply(optional<> const&, F&& f)
- { return static_cast<F&&>(f)(); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Searchable
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <bool>
- struct optional_find_if {
- template <typename T>
- static constexpr auto apply(T const&)
- { return hana::nothing; }
- };
-
- template <>
- struct optional_find_if<true> {
- template <typename T>
- static constexpr auto apply(T&& t)
- { return hana::just(static_cast<T&&>(t)); }
- };
- }
-
- template <>
- struct find_if_impl<optional_tag> {
- template <typename T, typename Pred>
- static constexpr auto apply(hana::optional<T> const& opt, Pred&& pred) {
- constexpr bool found = decltype(static_cast<Pred&&>(pred)(opt.value_))::value;
- return detail::optional_find_if<found>::apply(opt.value_);
- }
-
- template <typename T, typename Pred>
- static constexpr auto apply(hana::optional<T>& opt, Pred&& pred) {
- constexpr bool found = decltype(static_cast<Pred&&>(pred)(opt.value_))::value;
- return detail::optional_find_if<found>::apply(opt.value_);
- }
-
- template <typename T, typename Pred>
- static constexpr auto apply(hana::optional<T>&& opt, Pred&& pred) {
- constexpr bool found = decltype(
- static_cast<Pred&&>(pred)(static_cast<T&&>(opt.value_))
- )::value;
- return detail::optional_find_if<found>::apply(static_cast<T&&>(opt.value_));
- }
-
- template <typename Pred>
- static constexpr auto apply(hana::optional<> const&, Pred&&)
- { return hana::nothing; }
- };
-
- template <>
- struct any_of_impl<optional_tag> {
- template <typename T, typename Pred>
- static constexpr auto apply(hana::optional<T> const& opt, Pred&& pred)
- { return static_cast<Pred&&>(pred)(opt.value_); }
-
- template <typename Pred>
- static constexpr hana::false_ apply(hana::optional<> const&, Pred&&)
- { return {}; }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_OPTIONAL_HPP
diff --git a/contrib/restricted/boost/boost/hana/or.hpp b/contrib/restricted/boost/boost/hana/or.hpp
deleted file mode 100644
index b6aceac0c1..0000000000
--- a/contrib/restricted/boost/boost/hana/or.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*!
-@file
-Defines `boost::hana::or_`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_OR_HPP
-#define BOOST_HANA_OR_HPP
-
-#include <boost/hana/fwd/or.hpp>
-
-#include <boost/hana/concept/logical.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/variadic/foldl1.hpp>
-#include <boost/hana/if.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X, typename Y>
- constexpr decltype(auto) or_t::operator()(X&& x, Y&& y) const {
- using Bool = typename hana::tag_of<X>::type;
- using Or = BOOST_HANA_DISPATCH_IF(or_impl<Bool>,
- hana::Logical<Bool>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Logical<Bool>::value,
- "hana::or_(x, y) requires 'x' to be a Logical");
- #endif
-
- return Or::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
-
- template <typename X, typename ...Y>
- constexpr decltype(auto) or_t::operator()(X&& x, Y&& ...y) const {
- return detail::variadic::foldl1(
- *this,
- static_cast<X&&>(x),
- static_cast<Y&&>(y)...
- );
- }
- //! @endcond
-
- template <typename L, bool condition>
- struct or_impl<L, when<condition>> : hana::default_ {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- //! @todo How to forward `x` here? Since the arguments to `if_`
- //! can be evaluated in any order, we have to be careful not to
- //! use `x` in a moved-from state.
- return hana::if_(x, x, static_cast<Y&&>(y));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_OR_HPP
diff --git a/contrib/restricted/boost/boost/hana/ordering.hpp b/contrib/restricted/boost/boost/hana/ordering.hpp
deleted file mode 100644
index 2e8294a892..0000000000
--- a/contrib/restricted/boost/boost/hana/ordering.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/*!
-@file
-Defines `boost::hana::ordering`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ORDERING_HPP
-#define BOOST_HANA_ORDERING_HPP
-
-#include <boost/hana/fwd/ordering.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/less.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace detail {
- template <typename F>
- struct less_by {
- F f;
-
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) const&
- { return hana::less(f(static_cast<X&&>(x)), f(static_cast<Y&&>(y))); }
-
- template <typename X, typename Y>
- constexpr decltype(auto) operator()(X&& x, Y&& y) &
- { return hana::less(f(static_cast<X&&>(x)), f(static_cast<Y&&>(y))); }
- };
- }
-
- //! @cond
- template <typename F>
- constexpr auto ordering_t::operator()(F&& f) const {
- return detail::less_by<typename detail::decay<F>::type>{static_cast<F&&>(f)};
- }
- //! @endcond
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_ORDERING_HPP
diff --git a/contrib/restricted/boost/boost/hana/pair.hpp b/contrib/restricted/boost/boost/hana/pair.hpp
deleted file mode 100644
index 35ff857269..0000000000
--- a/contrib/restricted/boost/boost/hana/pair.hpp
+++ /dev/null
@@ -1,207 +0,0 @@
-/*!
-@file
-Defines `boost::hana::pair`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_PAIR_HPP
-#define BOOST_HANA_PAIR_HPP
-
-#include <boost/hana/fwd/pair.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/detail/ebo.hpp>
-#include <boost/hana/detail/intrinsics.hpp>
-#include <boost/hana/detail/operators/adl.hpp>
-#include <boost/hana/detail/operators/comparable.hpp>
-#include <boost/hana/detail/operators/orderable.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/first.hpp>
-#include <boost/hana/fwd/second.hpp>
-
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace detail {
- template <int> struct pix; // pair index
- }
-
- //////////////////////////////////////////////////////////////////////////
- // pair
- //////////////////////////////////////////////////////////////////////////
- //! @cond
- template <typename First, typename Second>
- struct pair : detail::operators::adl<pair<First, Second>>
- , private detail::ebo<detail::pix<0>, First>
- , private detail::ebo<detail::pix<1>, Second>
- {
- // Default constructor
- template <typename ...dummy, typename = typename std::enable_if<
- BOOST_HANA_TT_IS_CONSTRUCTIBLE(First, dummy...) &&
- BOOST_HANA_TT_IS_CONSTRUCTIBLE(Second, dummy...)
- >::type>
- constexpr pair()
- : detail::ebo<detail::pix<0>, First>()
- , detail::ebo<detail::pix<1>, Second>()
- { }
-
- // Variadic constructors
- template <typename ...dummy, typename = typename std::enable_if<
- BOOST_HANA_TT_IS_CONSTRUCTIBLE(First, First const&, dummy...) &&
- BOOST_HANA_TT_IS_CONSTRUCTIBLE(Second, Second const&, dummy...)
- >::type>
- constexpr pair(First const& fst, Second const& snd)
- : detail::ebo<detail::pix<0>, First>(fst)
- , detail::ebo<detail::pix<1>, Second>(snd)
- { }
-
- template <typename T, typename U, typename = typename std::enable_if<
- BOOST_HANA_TT_IS_CONVERTIBLE(T&&, First) &&
- BOOST_HANA_TT_IS_CONVERTIBLE(U&&, Second)
- >::type>
- constexpr pair(T&& t, U&& u)
- : detail::ebo<detail::pix<0>, First>(static_cast<T&&>(t))
- , detail::ebo<detail::pix<1>, Second>(static_cast<U&&>(u))
- { }
-
-
- // Possibly converting copy and move constructors
- template <typename T, typename U, typename = typename std::enable_if<
- BOOST_HANA_TT_IS_CONSTRUCTIBLE(First, T const&) &&
- BOOST_HANA_TT_IS_CONSTRUCTIBLE(Second, U const&) &&
- BOOST_HANA_TT_IS_CONVERTIBLE(T const&, First) &&
- BOOST_HANA_TT_IS_CONVERTIBLE(U const&, Second)
- >::type>
- constexpr pair(pair<T, U> const& other)
- : detail::ebo<detail::pix<0>, First>(hana::first(other))
- , detail::ebo<detail::pix<1>, Second>(hana::second(other))
- { }
-
- template <typename T, typename U, typename = typename std::enable_if<
- BOOST_HANA_TT_IS_CONSTRUCTIBLE(First, T&&) &&
- BOOST_HANA_TT_IS_CONSTRUCTIBLE(Second, U&&) &&
- BOOST_HANA_TT_IS_CONVERTIBLE(T&&, First) &&
- BOOST_HANA_TT_IS_CONVERTIBLE(U&&, Second)
- >::type>
- constexpr pair(pair<T, U>&& other)
- : detail::ebo<detail::pix<0>, First>(hana::first(static_cast<pair<T, U>&&>(other)))
- , detail::ebo<detail::pix<1>, Second>(hana::second(static_cast<pair<T, U>&&>(other)))
- { }
-
-
- // Copy and move assignment
- template <typename T, typename U, typename = typename std::enable_if<
- BOOST_HANA_TT_IS_ASSIGNABLE(First&, T const&) &&
- BOOST_HANA_TT_IS_ASSIGNABLE(Second&, U const&)
- >::type>
- constexpr pair& operator=(pair<T, U> const& other) {
- hana::first(*this) = hana::first(other);
- hana::second(*this) = hana::second(other);
- return *this;
- }
-
- template <typename T, typename U, typename = typename std::enable_if<
- BOOST_HANA_TT_IS_ASSIGNABLE(First&, T&&) &&
- BOOST_HANA_TT_IS_ASSIGNABLE(Second&, U&&)
- >::type>
- constexpr pair& operator=(pair<T, U>&& other) {
- hana::first(*this) = hana::first(static_cast<pair<T, U>&&>(other));
- hana::second(*this) = hana::second(static_cast<pair<T, U>&&>(other));
- return *this;
- }
-
- // Prevent the compiler from defining the default copy and move
- // constructors, which interfere with the SFINAE above.
- ~pair() = default;
-
- friend struct first_impl<pair_tag>;
- friend struct second_impl<pair_tag>;
- template <typename F, typename S> friend struct pair;
- };
- //! @endcond
-
- template <typename First, typename Second>
- struct tag_of<pair<First, Second>> {
- using type = pair_tag;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Operators
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <>
- struct comparable_operators<pair_tag> {
- static constexpr bool value = true;
- };
- template <>
- struct orderable_operators<pair_tag> {
- static constexpr bool value = true;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // Product
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct make_impl<pair_tag> {
- template <typename F, typename S>
- static constexpr pair<
- typename detail::decay<F>::type,
- typename detail::decay<S>::type
- > apply(F&& f, S&& s) {
- return {static_cast<F&&>(f), static_cast<S&&>(s)};
- }
- };
-
- template <>
- struct first_impl<pair_tag> {
- template <typename First, typename Second>
- static constexpr decltype(auto) apply(hana::pair<First, Second>& p) {
- return detail::ebo_get<detail::pix<0>>(
- static_cast<detail::ebo<detail::pix<0>, First>&>(p)
- );
- }
- template <typename First, typename Second>
- static constexpr decltype(auto) apply(hana::pair<First, Second> const& p) {
- return detail::ebo_get<detail::pix<0>>(
- static_cast<detail::ebo<detail::pix<0>, First> const&>(p)
- );
- }
- template <typename First, typename Second>
- static constexpr decltype(auto) apply(hana::pair<First, Second>&& p) {
- return detail::ebo_get<detail::pix<0>>(
- static_cast<detail::ebo<detail::pix<0>, First>&&>(p)
- );
- }
- };
-
- template <>
- struct second_impl<pair_tag> {
- template <typename First, typename Second>
- static constexpr decltype(auto) apply(hana::pair<First, Second>& p) {
- return detail::ebo_get<detail::pix<1>>(
- static_cast<detail::ebo<detail::pix<1>, Second>&>(p)
- );
- }
- template <typename First, typename Second>
- static constexpr decltype(auto) apply(hana::pair<First, Second> const& p) {
- return detail::ebo_get<detail::pix<1>>(
- static_cast<detail::ebo<detail::pix<1>, Second> const&>(p)
- );
- }
- template <typename First, typename Second>
- static constexpr decltype(auto) apply(hana::pair<First, Second>&& p) {
- return detail::ebo_get<detail::pix<1>>(
- static_cast<detail::ebo<detail::pix<1>, Second>&&>(p)
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_PAIR_HPP
diff --git a/contrib/restricted/boost/boost/hana/partition.hpp b/contrib/restricted/boost/boost/hana/partition.hpp
deleted file mode 100644
index e2131f4233..0000000000
--- a/contrib/restricted/boost/boost/hana/partition.hpp
+++ /dev/null
@@ -1,116 +0,0 @@
-/*!
-@file
-Defines `boost::hana::partition`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_PARTITION_HPP
-#define BOOST_HANA_PARTITION_HPP
-
-#include <boost/hana/fwd/partition.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/detail/algorithm.hpp>
-#include <boost/hana/detail/array.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/detail/nested_by.hpp> // required by fwd decl
-#include <boost/hana/pair.hpp>
-#include <boost/hana/unpack.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Pred>
- constexpr auto partition_t::operator()(Xs&& xs, Pred&& pred) const {
- using S = typename hana::tag_of<Xs>::type;
- using Partition = BOOST_HANA_DISPATCH_IF(partition_impl<S>,
- hana::Sequence<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::partition(xs, pred) requires 'xs' to be a Sequence");
- #endif
-
- return Partition::apply(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred));
- }
- //! @endcond
-
- namespace detail {
- template <bool ...B>
- struct partition_indices {
- static constexpr detail::array<bool, sizeof...(B)> results{{B...}};
- static constexpr std::size_t left_size =
- detail::count(results.begin(), results.end(), true);
- static constexpr std::size_t right_size = sizeof...(B) - left_size;
-
- static constexpr auto compute_left() {
- detail::array<std::size_t, left_size> indices{};
- std::size_t* left = &indices[0];
- for (std::size_t i = 0; i < sizeof...(B); ++i)
- if (results[i])
- *left++ = i;
- return indices;
- }
-
- static constexpr auto compute_right() {
- detail::array<std::size_t, right_size> indices{};
- std::size_t* right = &indices[0];
- for (std::size_t i = 0; i < sizeof...(B); ++i)
- if (!results[i])
- *right++ = i;
- return indices;
- }
-
- static constexpr auto left_indices = compute_left();
- static constexpr auto right_indices = compute_right();
-
- template <typename S, typename Xs, std::size_t ...l, std::size_t ...r>
- static constexpr auto apply(Xs&& xs, std::index_sequence<l...>,
- std::index_sequence<r...>)
- {
- return hana::make<hana::pair_tag>(
- hana::make<S>(hana::at_c<left_indices[l]>(static_cast<Xs&&>(xs))...),
- hana::make<S>(hana::at_c<right_indices[r]>(static_cast<Xs&&>(xs))...)
- );
- }
- };
-
- template <typename Pred>
- struct deduce_partition_indices {
- template <typename ...Xs>
- auto operator()(Xs&& ...xs) const -> detail::partition_indices<
- static_cast<bool>(detail::decay<
- decltype(std::declval<Pred>()(static_cast<Xs&&>(xs)))
- >::type::value)...
- > { return {}; }
- };
- }
-
- template <typename S, bool condition>
- struct partition_impl<S, when<condition>> : default_ {
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&&) {
- using Indices = decltype(hana::unpack(
- static_cast<Xs&&>(xs), detail::deduce_partition_indices<Pred&&>{}
- ));
- return Indices::template apply<S>(
- static_cast<Xs&&>(xs),
- std::make_index_sequence<Indices::left_size>{},
- std::make_index_sequence<Indices::right_size>{}
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_PARTITION_HPP
diff --git a/contrib/restricted/boost/boost/hana/permutations.hpp b/contrib/restricted/boost/boost/hana/permutations.hpp
deleted file mode 100644
index 601bd71889..0000000000
--- a/contrib/restricted/boost/boost/hana/permutations.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*!
-@file
-Defines `boost::hana::permutations`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_PERMUTATIONS_HPP
-#define BOOST_HANA_PERMUTATIONS_HPP
-
-#include <boost/hana/fwd/permutations.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/detail/array.hpp>
-#include <boost/hana/length.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs>
- constexpr auto permutations_t::operator()(Xs&& xs) const {
- using S = typename hana::tag_of<Xs>::type;
- using Permutations = BOOST_HANA_DISPATCH_IF(permutations_impl<S>,
- hana::Sequence<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::permutations(xs) requires 'xs' to be a Sequence");
- #endif
-
- return Permutations::apply(static_cast<Xs&&>(xs));
- }
- //! @endcond
-
- namespace detail {
- template <std::size_t N>
- struct permutation_indices {
- static constexpr auto value =
- detail::array<std::size_t, N>{}.iota(0).permutations();
- };
- }
-
- template <typename S, bool condition>
- struct permutations_impl<S, when<condition>> : default_ {
- template <std::size_t n, typename Xs, std::size_t ...i>
- static constexpr auto
- nth_permutation(Xs const& xs, std::index_sequence<i...>) {
- constexpr auto indices = detail::permutation_indices<sizeof...(i)>::value;
- (void)indices; // workaround GCC warning when sizeof...(i) == 0
- return hana::make<S>(hana::at_c<indices[n][i]>(xs)...);
- }
-
- template <std::size_t N, typename Xs, std::size_t ...n>
- static constexpr auto
- permutations_helper(Xs const& xs, std::index_sequence<n...>) {
- return hana::make<S>(nth_permutation<n>(xs, std::make_index_sequence<N>{})...);
- }
-
- template <typename Xs>
- static constexpr auto apply(Xs const& xs) {
- constexpr std::size_t N = decltype(hana::length(xs))::value;
- constexpr std::size_t total_perms = detail::factorial(N);
- return permutations_helper<N>(xs, std::make_index_sequence<total_perms>{});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_PERMUTATIONS_HPP
diff --git a/contrib/restricted/boost/boost/hana/plus.hpp b/contrib/restricted/boost/boost/hana/plus.hpp
deleted file mode 100644
index bc916773a7..0000000000
--- a/contrib/restricted/boost/boost/hana/plus.hpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/*!
-@file
-Defines `boost::hana::plus`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_PLUS_HPP
-#define BOOST_HANA_PLUS_HPP
-
-#include <boost/hana/fwd/plus.hpp>
-
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/monoid.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/common.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/canonical_constant.hpp>
-#include <boost/hana/detail/has_common_embedding.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X, typename Y>
- constexpr decltype(auto) plus_t::operator()(X&& x, Y&& y) const {
- using T = typename hana::tag_of<X>::type;
- using U = typename hana::tag_of<Y>::type;
- using Plus = BOOST_HANA_DISPATCH_IF(decltype(plus_impl<T, U>{}),
- hana::Monoid<T>::value &&
- hana::Monoid<U>::value &&
- !is_default<plus_impl<T, U>>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Monoid<T>::value,
- "hana::plus(x, y) requires 'x' to be a Monoid");
-
- static_assert(hana::Monoid<U>::value,
- "hana::plus(x, y) requires 'y' to be a Monoid");
-
- static_assert(!is_default<plus_impl<T, U>>::value,
- "hana::plus(x, y) requires 'x' and 'y' to be embeddable "
- "in a common Monoid");
- #endif
-
- return Plus::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- //! @endcond
-
- template <typename T, typename U, bool condition>
- struct plus_impl<T, U, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- // Cross-type overload
- template <typename T, typename U>
- struct plus_impl<T, U, when<
- detail::has_nontrivial_common_embedding<Monoid, T, U>::value
- >> {
- using C = typename common<T, U>::type;
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y) {
- return hana::plus(hana::to<C>(static_cast<X&&>(x)),
- hana::to<C>(static_cast<Y&&>(y)));
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for non-boolean arithmetic data types
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct plus_impl<T, T, when<
- std::is_arithmetic<T>::value &&
- !std::is_same<T, bool>::value
- >> {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X&& x, Y&& y)
- { return static_cast<X&&>(x) + static_cast<Y&&>(y); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for Constants over a Monoid
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <typename C, typename X, typename Y>
- struct constant_from_plus {
- static constexpr auto value = hana::plus(hana::value<X>(), hana::value<Y>());
- using hana_tag = detail::CanonicalConstant<typename C::value_type>;
- };
- }
-
- template <typename C>
- struct plus_impl<C, C, when<
- hana::Constant<C>::value &&
- Monoid<typename C::value_type>::value
- >> {
- template <typename X, typename Y>
- static constexpr decltype(auto) apply(X const&, Y const&)
- { return hana::to<C>(detail::constant_from_plus<C, X, Y>{}); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_PLUS_HPP
diff --git a/contrib/restricted/boost/boost/hana/power.hpp b/contrib/restricted/boost/boost/hana/power.hpp
deleted file mode 100644
index 2a69ebfcaa..0000000000
--- a/contrib/restricted/boost/boost/hana/power.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*!
-@file
-Defines `boost::hana::power`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_POWER_HPP
-#define BOOST_HANA_POWER_HPP
-
-#include <boost/hana/fwd/power.hpp>
-
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/concept/ring.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/functional/iterate.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/mult.hpp>
-#include <boost/hana/one.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename X, typename N>
- constexpr decltype(auto) power_t::operator()(X&& x, N const& n) const {
- using R = typename hana::tag_of<X>::type;
- using Power = BOOST_HANA_DISPATCH_IF(power_impl<R>,
- hana::Ring<R>::value &&
- hana::IntegralConstant<N>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Ring<R>::value,
- "hana::power(x, n) requires 'x' to be in a Ring");
-
- static_assert(hana::IntegralConstant<N>::value,
- "hana::power(x, n) requires 'n' to be an IntegralConstant");
- #endif
-
- static_assert(N::value >= 0,
- "hana::power(x, n) requires 'n' to be non-negative");
-
- return Power::apply(static_cast<X&&>(x), n);
- }
- //! @endcond
-
- template <typename R, bool condition>
- struct power_impl<R, when<condition>> : default_ {
- template <typename X, typename N>
- static constexpr decltype(auto) apply(X&& x, N const&) {
- constexpr std::size_t n = N::value;
- return hana::iterate<n>(
- hana::partial(hana::mult, static_cast<X&&>(x)),
- hana::one<R>()
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_POWER_HPP
diff --git a/contrib/restricted/boost/boost/hana/prefix.hpp b/contrib/restricted/boost/boost/hana/prefix.hpp
deleted file mode 100644
index e8b0c21947..0000000000
--- a/contrib/restricted/boost/boost/hana/prefix.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*!
-@file
-Defines `boost::hana::prefix`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_PREFIX_HPP
-#define BOOST_HANA_PREFIX_HPP
-
-#include <boost/hana/fwd/prefix.hpp>
-
-#include <boost/hana/append.hpp>
-#include <boost/hana/chain.hpp>
-#include <boost/hana/concept/monad_plus.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/lift.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Pref>
- constexpr auto prefix_t::operator()(Xs&& xs, Pref&& pref) const {
- using M = typename hana::tag_of<Xs>::type;
- using Prefix = BOOST_HANA_DISPATCH_IF(prefix_impl<M>,
- hana::MonadPlus<M>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::MonadPlus<M>::value,
- "hana::prefix(xs, pref) requires 'xs' to be a MonadPlus");
- #endif
-
- return Prefix::apply(static_cast<Xs&&>(xs), static_cast<Pref&&>(pref));
- }
- //! @endcond
-
- template <typename M, bool condition>
- struct prefix_impl<M, when<condition>> : default_ {
- template <typename Xs, typename Z>
- static constexpr decltype(auto) apply(Xs&& xs, Z&& z) {
- return hana::chain(static_cast<Xs&&>(xs),
- hana::partial(hana::append, hana::lift<M>(static_cast<Z&&>(z))));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_PREFIX_HPP
diff --git a/contrib/restricted/boost/boost/hana/prepend.hpp b/contrib/restricted/boost/boost/hana/prepend.hpp
deleted file mode 100644
index 825d0b02f6..0000000000
--- a/contrib/restricted/boost/boost/hana/prepend.hpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/*!
-@file
-Defines `boost::hana::prepend`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_PREPEND_HPP
-#define BOOST_HANA_PREPEND_HPP
-
-#include <boost/hana/fwd/prepend.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concat.hpp>
-#include <boost/hana/concept/monad_plus.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/lift.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename X>
- constexpr auto prepend_t::operator()(Xs&& xs, X&& x) const {
- using M = typename hana::tag_of<Xs>::type;
- using Prepend = BOOST_HANA_DISPATCH_IF(prepend_impl<M>,
- hana::MonadPlus<M>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::MonadPlus<M>::value,
- "hana::prepend(xs, x) requires 'xs' to be a MonadPlus");
- #endif
-
- return Prepend::apply(static_cast<Xs&&>(xs), static_cast<X&&>(x));
- }
- //! @endcond
-
- template <typename M, bool condition>
- struct prepend_impl<M, when<condition>> : default_ {
- template <typename Xs, typename X>
- static constexpr auto apply(Xs&& xs, X&& x) {
- return hana::concat(hana::lift<M>(static_cast<X&&>(x)),
- static_cast<Xs&&>(xs));
- }
- };
-
- template <typename S>
- struct prepend_impl<S, when<Sequence<S>::value>> {
- template <typename Xs, typename X, std::size_t ...i>
- static constexpr auto prepend_helper(Xs&& xs, X&& x, std::index_sequence<i...>) {
- return hana::make<S>(
- static_cast<X&&>(x), hana::at_c<i>(static_cast<Xs&&>(xs))...
- );
- }
-
- template <typename Xs, typename X>
- static constexpr auto apply(Xs&& xs, X&& x) {
- constexpr std::size_t N = decltype(hana::length(xs))::value;
- return prepend_helper(static_cast<Xs&&>(xs), static_cast<X&&>(x),
- std::make_index_sequence<N>{});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_PREPEND_HPP
diff --git a/contrib/restricted/boost/boost/hana/product.hpp b/contrib/restricted/boost/boost/hana/product.hpp
deleted file mode 100644
index 8d3bad9fc3..0000000000
--- a/contrib/restricted/boost/boost/hana/product.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*!
-@file
-Defines `boost::hana::product`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_PRODUCT_HPP
-#define BOOST_HANA_PRODUCT_HPP
-
-#include <boost/hana/fwd/product.hpp>
-
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/concept/ring.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/fold_left.hpp>
-#include <boost/hana/integral_constant.hpp> // required by fwd decl
-#include <boost/hana/mult.hpp>
-#include <boost/hana/one.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename R>
- struct product_t {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Ring<R>::value,
- "hana::product<R> requires 'R' to be a Ring");
- #endif
-
- template <typename Xs>
- constexpr decltype(auto) operator()(Xs&& xs) const {
- using S = typename hana::tag_of<Xs>::type;
- using Product = BOOST_HANA_DISPATCH_IF(product_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::product<R>(xs) requires 'xs' to be Foldable");
- #endif
-
- return Product::template apply<R>(static_cast<Xs&&>(xs));
- }
- };
-
- template <typename T, bool condition>
- struct product_impl<T, when<condition>> : default_ {
- template <typename R, typename Xs>
- static constexpr decltype(auto) apply(Xs&& xs) {
- return hana::fold_left(static_cast<Xs&&>(xs), hana::one<R>(), hana::mult);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_PRODUCT_HPP
diff --git a/contrib/restricted/boost/boost/hana/range.hpp b/contrib/restricted/boost/boost/hana/range.hpp
deleted file mode 100644
index 96a9d02e6a..0000000000
--- a/contrib/restricted/boost/boost/hana/range.hpp
+++ /dev/null
@@ -1,294 +0,0 @@
-/*!
-@file
-Defines `boost::hana::range`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_RANGE_HPP
-#define BOOST_HANA_RANGE_HPP
-
-#include <boost/hana/fwd/range.hpp>
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/common.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/tag_of.hpp>
-#include <boost/hana/detail/operators/adl.hpp>
-#include <boost/hana/detail/operators/comparable.hpp>
-#include <boost/hana/detail/operators/iterable.hpp>
-#include <boost/hana/fwd/at.hpp>
-#include <boost/hana/fwd/back.hpp>
-#include <boost/hana/fwd/contains.hpp>
-#include <boost/hana/fwd/drop_front.hpp>
-#include <boost/hana/fwd/drop_front_exactly.hpp>
-#include <boost/hana/fwd/equal.hpp>
-#include <boost/hana/fwd/find.hpp>
-#include <boost/hana/fwd/front.hpp>
-#include <boost/hana/fwd/is_empty.hpp>
-#include <boost/hana/fwd/length.hpp>
-#include <boost/hana/fwd/maximum.hpp>
-#include <boost/hana/fwd/minimum.hpp>
-#include <boost/hana/fwd/product.hpp>
-#include <boost/hana/fwd/sum.hpp>
-#include <boost/hana/fwd/unpack.hpp>
-#include <boost/hana/integral_constant.hpp> // required by fwd decl and below
-#include <boost/hana/optional.hpp>
-#include <boost/hana/value.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //////////////////////////////////////////////////////////////////////////
- // range<>
- //////////////////////////////////////////////////////////////////////////
- //! @cond
- template <typename T, T From, T To>
- struct range
- : detail::operators::adl<range<T, From, To>>
- , detail::iterable_operators<range<T, From, To>>
- {
- static_assert(From <= To,
- "hana::make_range(from, to) requires 'from <= to'");
-
- using value_type = T;
- static constexpr value_type from = From;
- static constexpr value_type to = To;
- };
- //! @endcond
-
- template <typename T, T From, T To>
- struct tag_of<range<T, From, To>> {
- using type = range_tag;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // make<range_tag>
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct make_impl<range_tag> {
- template <typename From, typename To>
- static constexpr auto apply(From const&, To const&) {
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::IntegralConstant<From>::value,
- "hana::make_range(from, to) requires 'from' to be an IntegralConstant");
-
- static_assert(hana::IntegralConstant<To>::value,
- "hana::make_range(from, to) requires 'to' to be an IntegralConstant");
- #endif
-
- using T = typename common<
- typename hana::tag_of<From>::type::value_type,
- typename hana::tag_of<To>::type::value_type
- >::type;
- constexpr T from = hana::to<T>(From::value);
- constexpr T to = hana::to<T>(To::value);
- return range<T, from, to>{};
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Operators
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <>
- struct comparable_operators<range_tag> {
- static constexpr bool value = true;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // Comparable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct equal_impl<range_tag, range_tag> {
- template <typename R1, typename R2>
- static constexpr auto apply(R1 const&, R2 const&) {
- return hana::bool_c<
- (R1::from == R1::to && R2::from == R2::to) ||
- (R1::from == R2::from && R1::to == R2::to)
- >;
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Foldable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct unpack_impl<range_tag> {
- template <typename T, T from, typename F, T ...v>
- static constexpr decltype(auto)
- unpack_helper(F&& f, std::integer_sequence<T, v...>) {
- return static_cast<F&&>(f)(integral_constant<T, from + v>{}...);
- }
-
- template <typename T, T from, T to, typename F>
- static constexpr decltype(auto) apply(range<T, from, to> const&, F&& f) {
- return unpack_helper<T, from>(static_cast<F&&>(f),
- std::make_integer_sequence<T, to - from>{});
- }
- };
-
- template <>
- struct length_impl<range_tag> {
- template <typename T, T from, T to>
- static constexpr auto apply(range<T, from, to> const&)
- { return hana::size_c<static_cast<std::size_t>(to - from)>; }
- };
-
- template <>
- struct minimum_impl<range_tag> {
- template <typename T, T from, T to>
- static constexpr auto apply(range<T, from, to> const&)
- { return integral_c<T, from>; }
- };
-
- template <>
- struct maximum_impl<range_tag> {
- template <typename T, T from, T to>
- static constexpr auto apply(range<T, from, to> const&)
- { return integral_c<T, to-1>; }
- };
-
- template <>
- struct sum_impl<range_tag> {
- // Returns the sum of `[m, n]`, where `m <= n` always hold.
- template <typename I>
- static constexpr I sum_helper(I m, I n) {
- if (m == n)
- return m;
-
- // 0 == m < n
- else if (0 == m)
- return n * (n+1) / 2;
-
- // 0 < m < n
- else if (0 < m)
- return sum_helper(0, n) - sum_helper(0, m-1);
-
- // m < 0 <= n
- else if (0 <= n)
- return sum_helper(0, n) - sum_helper(0, -m);
-
- // m < n < 0
- else
- return -sum_helper(-n, -m);
- }
-
- template <typename, typename T, T from, T to>
- static constexpr auto apply(range<T, from, to> const&) {
- return integral_c<T, from == to ? 0 : sum_helper(from, to-1)>;
- }
- };
-
- template <>
- struct product_impl<range_tag> {
- // Returns the product of `[m, n)`, where `m <= n` always hold.
- template <typename I>
- static constexpr I product_helper(I m, I n) {
- if (m <= 0 && 0 < n)
- return 0;
- else {
- I p = 1;
- for (; m != n; ++m)
- p *= m;
- return p;
- }
- }
-
- template <typename, typename T, T from, T to>
- static constexpr auto apply(range<T, from, to> const&)
- { return integral_c<T, product_helper(from, to)>; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Searchable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct find_impl<range_tag> {
- template <typename T, T from, typename N>
- static constexpr auto find_helper(hana::true_) {
- constexpr T n = N::value;
- return hana::just(hana::integral_c<T, n>);
- }
-
- template <typename T, T from, typename N>
- static constexpr auto find_helper(hana::false_)
- { return hana::nothing; }
-
- template <typename T, T from, T to, typename N>
- static constexpr auto apply(range<T, from, to> const&, N const&) {
- constexpr auto n = N::value;
- return find_helper<T, from, N>(hana::bool_c<(n >= from && n < to)>);
- }
- };
-
- template <>
- struct contains_impl<range_tag> {
- template <typename T, T from, T to, typename N>
- static constexpr auto apply(range<T, from, to> const&, N const&) {
- constexpr auto n = N::value;
- return bool_c<(n >= from && n < to)>;
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Iterable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct front_impl<range_tag> {
- template <typename T, T from, T to>
- static constexpr auto apply(range<T, from, to> const&)
- { return integral_c<T, from>; }
- };
-
- template <>
- struct is_empty_impl<range_tag> {
- template <typename T, T from, T to>
- static constexpr auto apply(range<T, from, to> const&)
- { return bool_c<from == to>; }
- };
-
- template <>
- struct at_impl<range_tag> {
- template <typename T, T from, T to, typename N>
- static constexpr auto apply(range<T, from, to> const&, N const&) {
- constexpr auto n = N::value;
- return integral_c<T, from + n>;
- }
- };
-
- template <>
- struct back_impl<range_tag> {
- template <typename T, T from, T to>
- static constexpr auto apply(range<T, from, to> const&)
- { return integral_c<T, to - 1>; }
- };
-
- template <>
- struct drop_front_impl<range_tag> {
- template <typename T, T from, T to, typename N>
- static constexpr auto apply(range<T, from, to> const&, N const&) {
- constexpr auto n = N::value;
- return range<T, (to < from + n ? to : from + n), to>{};
- }
- };
-
- template <>
- struct drop_front_exactly_impl<range_tag> {
- template <typename T, T from, T to, typename N>
- static constexpr auto apply(range<T, from, to> const&, N const&) {
- constexpr auto n = N::value;
- return range<T, from + n, to>{};
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/hana/remove.hpp b/contrib/restricted/boost/boost/hana/remove.hpp
deleted file mode 100644
index 7d2925d38e..0000000000
--- a/contrib/restricted/boost/boost/hana/remove.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*!
-@file
-Defines `boost::hana::remove`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_REMOVE_HPP
-#define BOOST_HANA_REMOVE_HPP
-
-#include <boost/hana/fwd/remove.hpp>
-
-#include <boost/hana/concept/monad_plus.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/equal.hpp>
-#include <boost/hana/filter.hpp>
-#include <boost/hana/functional/compose.hpp>
-#include <boost/hana/not.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Value>
- constexpr auto remove_t::operator()(Xs&& xs, Value&& value) const {
- using M = typename hana::tag_of<Xs>::type;
- using Remove = BOOST_HANA_DISPATCH_IF(remove_impl<M>,
- hana::MonadPlus<M>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::MonadPlus<M>::value,
- "hana::remove(xs, value) requires 'xs' to be a MonadPlus");
- #endif
-
- return Remove::apply(static_cast<Xs&&>(xs),
- static_cast<Value&&>(value));
- }
- //! @endcond
-
- template <typename M, bool condition>
- struct remove_impl<M, when<condition>> : default_ {
- template <typename Xs, typename Value>
- static constexpr auto apply(Xs&& xs, Value&& value) {
- return hana::filter(static_cast<Xs&&>(xs),
- hana::compose(hana::not_,
- hana::equal.to(static_cast<Value&&>(value))));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_REMOVE_HPP
diff --git a/contrib/restricted/boost/boost/hana/remove_at.hpp b/contrib/restricted/boost/boost/hana/remove_at.hpp
deleted file mode 100644
index 490ebe8c10..0000000000
--- a/contrib/restricted/boost/boost/hana/remove_at.hpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/*!
-@file
-Defines `boost::hana::remove_at` and `boost::hana::remove_at_c`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_REMOVE_AT_HPP
-#define BOOST_HANA_REMOVE_AT_HPP
-
-#include <boost/hana/fwd/remove_at.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/length.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename N>
- constexpr auto remove_at_t::operator()(Xs&& xs, N const& n) const {
- using S = typename hana::tag_of<Xs>::type;
- using RemoveAt = BOOST_HANA_DISPATCH_IF(remove_at_impl<S>,
- hana::Sequence<S>::value &&
- hana::IntegralConstant<N>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::remove_at(xs, n) requires 'xs' to be a Sequence");
-
- static_assert(hana::IntegralConstant<N>::value,
- "hana::remove_at(xs, n) requires 'n' to be an IntegralConstant");
- #endif
-
- static_assert(N::value >= 0,
- "hana::remove_at(xs, n) requires 'n' to be non-negative");
-
- return RemoveAt::apply(static_cast<Xs&&>(xs), n);
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct remove_at_impl<S, when<condition>> : default_ {
- template <typename Xs, std::size_t ...before, std::size_t ...after>
- static constexpr auto
- remove_at_helper(Xs&& xs, std::index_sequence<before...>,
- std::index_sequence<after...>)
- {
- return hana::make<S>(
- hana::at_c<before>(static_cast<Xs&&>(xs))...,
- hana::at_c<after + sizeof...(before) + 1>(static_cast<Xs&&>(xs))...
- );
- }
-
- template <typename Xs, typename N>
- static constexpr auto apply(Xs&& xs, N const&) {
- constexpr std::size_t n = N::value;
- constexpr std::size_t len = decltype(hana::length(xs))::value;
- static_assert(n < len,
- "hana::remove_at(xs, n) requires 'n' to be in the bounds of the sequence");
- return remove_at_helper(static_cast<Xs&&>(xs),
- std::make_index_sequence<n>{},
- std::make_index_sequence<len - n - 1>{});
- }
- };
-
- template <std::size_t n>
- struct remove_at_c_t {
- template <typename Xs>
- constexpr decltype(auto) operator()(Xs&& xs) const
- { return hana::remove_at(static_cast<Xs&&>(xs), hana::size_c<n>); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_REMOVE_AT_HPP
diff --git a/contrib/restricted/boost/boost/hana/remove_if.hpp b/contrib/restricted/boost/boost/hana/remove_if.hpp
deleted file mode 100644
index b379957f3b..0000000000
--- a/contrib/restricted/boost/boost/hana/remove_if.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*!
-@file
-Defines `boost::hana::remove_if`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_REMOVE_IF_HPP
-#define BOOST_HANA_REMOVE_IF_HPP
-
-#include <boost/hana/fwd/remove_if.hpp>
-
-#include <boost/hana/concept/monad_plus.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/filter.hpp>
-#include <boost/hana/functional/compose.hpp>
-#include <boost/hana/not.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Pred>
- constexpr auto remove_if_t::operator()(Xs&& xs, Pred&& pred) const {
- using M = typename hana::tag_of<Xs>::type;
- using RemoveIf = BOOST_HANA_DISPATCH_IF(remove_if_impl<M>,
- hana::MonadPlus<M>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::MonadPlus<M>::value,
- "hana::remove_if(xs, predicate) requires 'xs' to be a MonadPlus");
- #endif
-
- return RemoveIf::apply(static_cast<Xs&&>(xs),
- static_cast<Pred&&>(pred));
- }
- //! @endcond
-
- template <typename M, bool condition>
- struct remove_if_impl<M, when<condition>> : default_ {
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&& pred) {
- return hana::filter(static_cast<Xs&&>(xs),
- hana::compose(hana::not_, static_cast<Pred&&>(pred)));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_REMOVE_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/remove_range.hpp b/contrib/restricted/boost/boost/hana/remove_range.hpp
deleted file mode 100644
index 5e46f8ae77..0000000000
--- a/contrib/restricted/boost/boost/hana/remove_range.hpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/*!
-@file
-Defines `boost::hana::remove_range` and `boost::hana::remove_range_c`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_REMOVE_RANGE_HPP
-#define BOOST_HANA_REMOVE_RANGE_HPP
-
-#include <boost/hana/fwd/remove_range.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/length.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename From, typename To>
- constexpr auto remove_range_t::operator()(Xs&& xs, From const& from, To const& to) const {
- using S = typename hana::tag_of<Xs>::type;
- using RemoveRange = BOOST_HANA_DISPATCH_IF(remove_range_impl<S>,
- hana::Sequence<S>::value &&
- hana::IntegralConstant<From>::value &&
- hana::IntegralConstant<To>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::remove_range(xs, from, to) requires 'xs' to be a Sequence");
-
- static_assert(hana::IntegralConstant<From>::value,
- "hana::remove_range(xs, from, to) requires 'from' to be an IntegralConstant");
-
- static_assert(hana::IntegralConstant<To>::value,
- "hana::remove_range(xs, from, to) requires 'to' to be an IntegralConstant");
- #endif
-
- return RemoveRange::apply(static_cast<Xs&&>(xs), from, to);
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct remove_range_impl<S, when<condition>> : default_ {
- template <std::size_t offset, typename Xs, std::size_t ...before, std::size_t ...after>
- static constexpr auto
- remove_range_helper(Xs&& xs, std::index_sequence<before...>,
- std::index_sequence<after...>)
- {
- return hana::make<S>(
- hana::at_c<before>(static_cast<Xs&&>(xs))...,
- hana::at_c<offset + after>(static_cast<Xs&&>(xs))...
- );
- }
-
- template <typename Xs, typename From, typename To>
- static constexpr auto apply(Xs&& xs, From const&, To const&) {
- constexpr std::size_t from = From::value;
- constexpr std::size_t to = To::value;
- constexpr std::size_t len = decltype(hana::length(xs))::value;
- constexpr std::size_t before = from == to ? len : from;
- constexpr std::size_t after = from == to ? 0 : len - to;
-
- static_assert(from <= to,
- "hana::remove_range(xs, from, to) requires '[from, to)' to be a "
- "valid interval, meaning that 'from <= to'");
- static_assert(from == to || from >= 0,
- "hana::remove_range(xs, from, to) requires 'from' to be non-negative");
- static_assert(from == to || to <= len,
- "hana::remove_range(xs, from, to) requires 'to <= length(xs)'");
-
- return remove_range_helper<to>(static_cast<Xs&&>(xs),
- std::make_index_sequence<before>{},
- std::make_index_sequence<after>{});
- }
- };
-
- template <std::size_t from, std::size_t to>
- struct remove_range_c_t {
- template <typename Xs>
- constexpr decltype(auto) operator()(Xs&& xs) const {
- return hana::remove_range(static_cast<Xs&&>(xs),
- hana::size_c<from>,
- hana::size_c<to>);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_REMOVE_RANGE_HPP
diff --git a/contrib/restricted/boost/boost/hana/repeat.hpp b/contrib/restricted/boost/boost/hana/repeat.hpp
deleted file mode 100644
index 71854dadbe..0000000000
--- a/contrib/restricted/boost/boost/hana/repeat.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*!
-@file
-Defines `boost::hana::repeat`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_REPEAT_HPP
-#define BOOST_HANA_REPEAT_HPP
-
-#include <boost/hana/fwd/repeat.hpp>
-
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename I, bool condition>
- struct repeat_impl<I, when<condition>> : default_ {
- template <typename F, std::size_t ...i>
- static constexpr void repeat_helper(F&& f, std::index_sequence<i...>) {
- using Swallow = std::size_t[];
- (void)Swallow{0, ((void)f(), i)...};
- }
-
- template <typename N, typename F>
- static constexpr auto apply(N const&, F&& f) {
- static_assert(N::value >= 0, "hana::repeat(n, f) requires 'n' to be non-negative");
- constexpr std::size_t n = N::value;
- repeat_helper(static_cast<F&&>(f), std::make_index_sequence<n>{});
- }
- };
-
- //! @cond
- template <typename N, typename F>
- constexpr void repeat_t::operator()(N const& n, F&& f) const {
- using I = typename hana::tag_of<N>::type;
- using Repeat = BOOST_HANA_DISPATCH_IF(repeat_impl<I>,
- hana::IntegralConstant<I>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::IntegralConstant<I>::value,
- "hana::repeat(n, f) requires 'n' to be an IntegralConstant");
- #endif
-
- return Repeat::apply(n, static_cast<F&&>(f));
- }
- //! @endcond
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_REPEAT_HPP
diff --git a/contrib/restricted/boost/boost/hana/replace.hpp b/contrib/restricted/boost/boost/hana/replace.hpp
deleted file mode 100644
index f797f6de2a..0000000000
--- a/contrib/restricted/boost/boost/hana/replace.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*!
-@file
-Defines `boost::hana::replace`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_REPLACE_HPP
-#define BOOST_HANA_REPLACE_HPP
-
-#include <boost/hana/fwd/replace.hpp>
-
-#include <boost/hana/concept/functor.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/equal.hpp>
-#include <boost/hana/replace_if.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename OldVal, typename NewVal>
- constexpr auto replace_t::operator()(Xs&& xs, OldVal&& oldval, NewVal&& newval) const {
- using S = typename hana::tag_of<Xs>::type;
- using Replace = BOOST_HANA_DISPATCH_IF(replace_impl<S>,
- hana::Functor<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Functor<S>::value,
- "hana::replace(xs, oldval, newval) requires 'xs' to be a Functor");
- #endif
-
- return Replace::apply(static_cast<Xs&&>(xs),
- static_cast<OldVal&&>(oldval),
- static_cast<NewVal&&>(newval));
- }
- //! @endcond
-
- template <typename Fun, bool condition>
- struct replace_impl<Fun, when<condition>> : default_ {
- template <typename Xs, typename OldVal, typename NewVal>
- static constexpr decltype(auto)
- apply(Xs&& xs, OldVal&& oldval, NewVal&& newval) {
- return hana::replace_if(
- static_cast<Xs&&>(xs),
- hana::equal.to(static_cast<OldVal&&>(oldval)),
- static_cast<NewVal&&>(newval)
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_REPLACE_HPP
diff --git a/contrib/restricted/boost/boost/hana/replace_if.hpp b/contrib/restricted/boost/boost/hana/replace_if.hpp
deleted file mode 100644
index 026dd61354..0000000000
--- a/contrib/restricted/boost/boost/hana/replace_if.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/*!
-@file
-Defines `boost::hana::replace_if`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_REPLACE_IF_HPP
-#define BOOST_HANA_REPLACE_IF_HPP
-
-#include <boost/hana/fwd/replace_if.hpp>
-
-#include <boost/hana/adjust_if.hpp>
-#include <boost/hana/concept/functor.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/functional/always.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Pred, typename Value>
- constexpr auto replace_if_t::operator()(Xs&& xs, Pred&& pred, Value&& value) const {
- using S = typename hana::tag_of<Xs>::type;
- using ReplaceIf = BOOST_HANA_DISPATCH_IF(replace_if_impl<S>,
- hana::Functor<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Functor<S>::value,
- "hana::replace_if(xs, pred, value) requires 'xs' to be a Functor");
- #endif
-
- return ReplaceIf::apply(static_cast<Xs&&>(xs),
- static_cast<Pred&&>(pred),
- static_cast<Value&&>(value));
- }
- //! @endcond
-
- template <typename Fun, bool condition>
- struct replace_if_impl<Fun, when<condition>> : default_ {
- template <typename Xs, typename Pred, typename Value>
- static constexpr auto apply(Xs&& xs, Pred&& pred, Value&& v) {
- return hana::adjust_if(static_cast<Xs&&>(xs),
- static_cast<Pred&&>(pred),
- hana::always(static_cast<Value&&>(v))
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_REPLACE_IF_HPP
diff --git a/contrib/restricted/boost/boost/hana/replicate.hpp b/contrib/restricted/boost/boost/hana/replicate.hpp
deleted file mode 100644
index f04c4d8a44..0000000000
--- a/contrib/restricted/boost/boost/hana/replicate.hpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/*!
-@file
-Defines `boost::hana::replicate`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_REPLICATE_HPP
-#define BOOST_HANA_REPLICATE_HPP
-
-#include <boost/hana/fwd/replicate.hpp>
-
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/concept/monad_plus.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/cycle.hpp>
-#include <boost/hana/lift.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename M>
- struct replicate_t {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::MonadPlus<M>::value,
- "hana::replicate<M>(x, n) requires 'M' to be a MonadPlus");
- #endif
-
- template <typename X, typename N>
- constexpr auto operator()(X&& x, N const& n) const {
- using Replicate = BOOST_HANA_DISPATCH_IF(replicate_impl<M>,
- hana::MonadPlus<M>::value &&
- hana::IntegralConstant<N>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::IntegralConstant<N>::value,
- "hana::replicate<M>(x, n) requires 'n' to be an IntegralConstant");
- #endif
-
- return Replicate::apply(static_cast<X&&>(x), n);
- }
- };
-
- template <typename M, bool condition>
- struct replicate_impl<M, when<condition>> : default_ {
- template <typename X, typename N>
- static constexpr auto apply(X&& x, N const& n) {
- return hana::cycle(hana::lift<M>(static_cast<X&&>(x)), n);
- }
- };
-
- template <typename S>
- struct replicate_impl<S, when<Sequence<S>::value>> {
- template <typename X, std::size_t ...i>
- static constexpr auto replicate_helper(X&& x, std::index_sequence<i...>)
- { return hana::make<S>(((void)i, x)...); }
-
- template <typename X, typename N>
- static constexpr auto apply(X&& x, N const&) {
- constexpr std::size_t n = N::value;
- return replicate_helper(static_cast<X&&>(x),
- std::make_index_sequence<n>{});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_REPLICATE_HPP
diff --git a/contrib/restricted/boost/boost/hana/reverse.hpp b/contrib/restricted/boost/boost/hana/reverse.hpp
deleted file mode 100644
index 3e4126963f..0000000000
--- a/contrib/restricted/boost/boost/hana/reverse.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*!
-@file
-Defines `boost::hana::reverse`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_REVERSE_HPP
-#define BOOST_HANA_REVERSE_HPP
-
-#include <boost/hana/fwd/reverse.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/length.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs>
- constexpr auto reverse_t::operator()(Xs&& xs) const {
- using S = typename hana::tag_of<Xs>::type;
- using Reverse = BOOST_HANA_DISPATCH_IF(reverse_impl<S>,
- hana::Sequence<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::reverse(xs) requires 'xs' to be a Sequence");
- #endif
-
- return Reverse::apply(static_cast<Xs&&>(xs));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct reverse_impl<S, when<condition>> : default_ {
- template <typename Xs, std::size_t ...i>
- static constexpr auto reverse_helper(Xs&& xs, std::index_sequence<i...>) {
- return hana::make<S>(
- hana::at_c<sizeof...(i) - i - 1>(static_cast<Xs&&>(xs))...
- );
- }
-
- template <typename Xs>
- static constexpr auto apply(Xs&& xs) {
- constexpr std::size_t N = decltype(hana::length(xs))::value;
- return reverse_helper(static_cast<Xs&&>(xs), std::make_index_sequence<N>{});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_REVERSE_HPP
diff --git a/contrib/restricted/boost/boost/hana/reverse_fold.hpp b/contrib/restricted/boost/boost/hana/reverse_fold.hpp
deleted file mode 100644
index 5735a423dd..0000000000
--- a/contrib/restricted/boost/boost/hana/reverse_fold.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/*!
-@file
-Defines `boost::hana::reverse_fold`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_REVERSE_FOLD_HPP
-#define BOOST_HANA_REVERSE_FOLD_HPP
-
-#include <boost/hana/fwd/reverse_fold.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/fold_right.hpp>
-#include <boost/hana/functional/flip.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename S, typename F>
- constexpr decltype(auto) reverse_fold_t::operator()(Xs&& xs, S&& s, F&& f) const {
- return hana::fold_right(static_cast<Xs&&>(xs),
- static_cast<S&&>(s),
- hana::flip(static_cast<F&&>(f)));
- }
-
- template <typename Xs, typename F>
- constexpr decltype(auto) reverse_fold_t::operator()(Xs&& xs, F&& f) const {
- return hana::fold_right(static_cast<Xs&&>(xs),
- hana::flip(static_cast<F&&>(f)));
- }
- //! @endcond
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_REVERSE_FOLD_HPP
diff --git a/contrib/restricted/boost/boost/hana/scan_left.hpp b/contrib/restricted/boost/boost/hana/scan_left.hpp
deleted file mode 100644
index 2ce4eb5d9d..0000000000
--- a/contrib/restricted/boost/boost/hana/scan_left.hpp
+++ /dev/null
@@ -1,133 +0,0 @@
-/*!
-@file
-Defines `boost::hana::scan_left`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_SCAN_LEFT_HPP
-#define BOOST_HANA_SCAN_LEFT_HPP
-
-#include <boost/hana/fwd/scan_left.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/empty.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/prepend.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename F>
- constexpr auto scan_left_t::operator()(Xs&& xs, F const& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using ScanLeft = BOOST_HANA_DISPATCH_IF(scan_left_impl<S>,
- hana::Sequence<S>::value
- );
-
-#ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::scan_left(xs, f) requires 'xs' to be a Sequence");
-#endif
-
- return ScanLeft::apply(static_cast<Xs&&>(xs), f);
- }
-
- template <typename Xs, typename State, typename F>
- constexpr auto scan_left_t::operator()(Xs&& xs, State&& state, F const& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using ScanLeft = BOOST_HANA_DISPATCH_IF(scan_left_impl<S>,
- hana::Sequence<S>::value
- );
-
-#ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::scan_left(xs, state, f) requires 'xs' to be a Sequence");
-#endif
-
- return ScanLeft::apply(static_cast<Xs&&>(xs),
- static_cast<State&&>(state), f);
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct scan_left_impl<S, when<condition>> : default_ {
- // Without initial state
- template <typename Xs, typename F, std::size_t n1, std::size_t n2, std::size_t ...ns>
- static constexpr auto
- apply1_impl(Xs&& xs, F const& f, std::index_sequence<n1, n2, ns...>) {
- static_assert(n1 == 0, "logic error in Boost.Hana: file a bug report");
-
- // Use scan_left with the first element as an initial state.
- return scan_left_impl::apply_impl(
- static_cast<Xs&&>(xs),
- hana::at_c<0>(static_cast<Xs&&>(xs)),
- f, std::index_sequence<n2, ns...>{}
- );
- }
-
- template <typename Xs, typename F, std::size_t n>
- static constexpr auto apply1_impl(Xs&& xs, F const&, std::index_sequence<n>) {
- return hana::make<S>(hana::at_c<n>(static_cast<Xs&&>(xs)));
- }
-
- template <typename Xs, typename F>
- static constexpr auto apply1_impl(Xs&&, F const&, std::index_sequence<>) {
- return hana::empty<S>();
- }
-
- template <typename Xs, typename F>
- static constexpr auto apply(Xs&& xs, F const& f) {
- constexpr std::size_t Len = decltype(hana::length(xs))::value;
- return scan_left_impl::apply1_impl(static_cast<Xs&&>(xs),
- f, std::make_index_sequence<Len>{});
- }
-
-
- // With initial state
- template <typename Xs, typename State, typename F,
- std::size_t n1, std::size_t n2, std::size_t ...ns>
- static constexpr auto
- apply_impl(Xs&& xs, State&& state, F const& f,
- std::index_sequence<n1, n2, ns...>)
- {
- auto rest = scan_left_impl::apply_impl(
- static_cast<Xs&&>(xs),
- f(state, hana::at_c<n1>(static_cast<Xs&&>(xs))),
- f, std::index_sequence<n2, ns...>{});
- return hana::prepend(std::move(rest), static_cast<State&&>(state));
- }
-
- template <typename Xs, typename State, typename F, std::size_t n>
- static constexpr auto
- apply_impl(Xs&& xs, State&& state, F const& f, std::index_sequence<n>) {
- auto new_state = f(state, hana::at_c<n>(static_cast<Xs&&>(xs)));
- return hana::make<S>(static_cast<State&&>(state), std::move(new_state));
- }
-
- template <typename Xs, typename State, typename F>
- static constexpr auto
- apply_impl(Xs&&, State&& state, F const&, std::index_sequence<>) {
- return hana::make<S>(static_cast<State&&>(state));
- }
-
- template <typename Xs, typename State, typename F>
- static constexpr auto apply(Xs&& xs, State&& state, F const& f) {
- constexpr std::size_t Len = decltype(hana::length(xs))::value;
- return scan_left_impl::apply_impl(static_cast<Xs&&>(xs),
- static_cast<State&&>(state),
- f, std::make_index_sequence<Len>{});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_SCAN_LEFT_HPP
diff --git a/contrib/restricted/boost/boost/hana/scan_right.hpp b/contrib/restricted/boost/boost/hana/scan_right.hpp
deleted file mode 100644
index a24eb145ca..0000000000
--- a/contrib/restricted/boost/boost/hana/scan_right.hpp
+++ /dev/null
@@ -1,130 +0,0 @@
-/*!
-@file
-Defines `boost::hana::scan_right`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_SCAN_RIGHT_HPP
-#define BOOST_HANA_SCAN_RIGHT_HPP
-
-#include <boost/hana/fwd/scan_right.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/empty.hpp>
-#include <boost/hana/front.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/prepend.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename F>
- constexpr auto scan_right_t::operator()(Xs&& xs, F const& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using ScanRight = BOOST_HANA_DISPATCH_IF(scan_right_impl<S>,
- hana::Sequence<S>::value
- );
-
-#ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::scan_right(xs, f) requires 'xs' to be a Sequence");
-#endif
-
- return ScanRight::apply(static_cast<Xs&&>(xs), f);
- }
-
- template <typename Xs, typename State, typename F>
- constexpr auto scan_right_t::operator()(Xs&& xs, State&& state, F const& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using ScanRight = BOOST_HANA_DISPATCH_IF(scan_right_impl<S>,
- hana::Sequence<S>::value
- );
-
-#ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::scan_right(xs, state, f) requires 'xs' to be a Sequence");
-#endif
-
- return ScanRight::apply(static_cast<Xs&&>(xs),
- static_cast<State&&>(state), f);
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct scan_right_impl<S, when<condition>> : default_ {
- // Without initial state
- template <typename Xs, typename F, std::size_t n1, std::size_t n2, std::size_t ...ns>
- static constexpr auto
- apply1_impl(Xs&& xs, F const& f, std::index_sequence<n1, n2, ns...>) {
- auto rest = scan_right_impl::apply1_impl(static_cast<Xs&&>(xs),
- f, std::index_sequence<n2, ns...>{});
- auto element = f(hana::at_c<n1>(static_cast<Xs&&>(xs)), hana::front(rest));
- return hana::prepend(std::move(rest), std::move(element));
- }
-
- template <typename Xs, typename F, std::size_t n>
- static constexpr auto apply1_impl(Xs&& xs, F const&, std::index_sequence<n>) {
- return hana::make<S>(hana::at_c<n>(static_cast<Xs&&>(xs)));
- }
-
- template <typename Xs, typename F>
- static constexpr auto apply1_impl(Xs&&, F const&, std::index_sequence<>) {
- return hana::empty<S>();
- }
-
- template <typename Xs, typename F>
- static constexpr auto apply(Xs&& xs, F const& f) {
- constexpr std::size_t Len = decltype(hana::length(xs))::value;
- return scan_right_impl::apply1_impl(static_cast<Xs&&>(xs),
- f, std::make_index_sequence<Len>{});
- }
-
-
- // With initial state
- template <typename Xs, typename State, typename F,
- std::size_t n1, std::size_t n2, std::size_t ...ns>
- static constexpr auto
- apply_impl(Xs&& xs, State&& state, F const& f,
- std::index_sequence<n1, n2, ns...>)
- {
- auto rest = scan_right_impl::apply_impl(static_cast<Xs&&>(xs),
- static_cast<State&&>(state),
- f, std::index_sequence<n2, ns...>{});
- auto element = f(hana::at_c<n1>(static_cast<Xs&&>(xs)), hana::front(rest));
- return hana::prepend(std::move(rest), std::move(element));
- }
-
- template <typename Xs, typename State, typename F, std::size_t n>
- static constexpr auto
- apply_impl(Xs&& xs, State&& state, F const& f, std::index_sequence<n>) {
- auto element = f(hana::at_c<n>(static_cast<Xs&&>(xs)), state);
- return hana::make<S>(std::move(element), static_cast<State&&>(state));
- }
-
- template <typename Xs, typename State, typename F>
- static constexpr auto
- apply_impl(Xs&&, State&& state, F const&, std::index_sequence<>) {
- return hana::make<S>(static_cast<State&&>(state));
- }
-
- template <typename Xs, typename State, typename F>
- static constexpr auto apply(Xs&& xs, State&& state, F const& f) {
- constexpr std::size_t Len = decltype(hana::length(xs))::value;
- return scan_right_impl::apply_impl(static_cast<Xs&&>(xs),
- static_cast<State&&>(state),
- f, std::make_index_sequence<Len>{});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_SCAN_RIGHT_HPP
diff --git a/contrib/restricted/boost/boost/hana/second.hpp b/contrib/restricted/boost/boost/hana/second.hpp
deleted file mode 100644
index f17e7a67bf..0000000000
--- a/contrib/restricted/boost/boost/hana/second.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*!
-@file
-Defines `boost::hana::second`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_SECOND_HPP
-#define BOOST_HANA_SECOND_HPP
-
-#include <boost/hana/fwd/second.hpp>
-
-#include <boost/hana/concept/product.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Pair>
- constexpr decltype(auto) second_t::operator()(Pair&& pair) const {
- using P = typename hana::tag_of<Pair>::type;
- using Second = BOOST_HANA_DISPATCH_IF(second_impl<P>,
- hana::Product<P>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Product<P>::value,
- "hana::second(pair) requires 'pair' to be a Product");
- #endif
-
- return Second::apply(static_cast<Pair&&>(pair));
- }
- //! @endcond
-
- template <typename P, bool condition>
- struct second_impl<P, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_SECOND_HPP
diff --git a/contrib/restricted/boost/boost/hana/set.hpp b/contrib/restricted/boost/boost/hana/set.hpp
deleted file mode 100644
index 58979ed47f..0000000000
--- a/contrib/restricted/boost/boost/hana/set.hpp
+++ /dev/null
@@ -1,323 +0,0 @@
-/*!
-@file
-Defines `boost::hana::set`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_SET_HPP
-#define BOOST_HANA_SET_HPP
-
-#include <boost/hana/fwd/set.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/comparable.hpp>
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/hashable.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/contains.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/detail/fast_and.hpp>
-#include <boost/hana/detail/has_duplicates.hpp>
-#include <boost/hana/detail/operators/adl.hpp>
-#include <boost/hana/detail/operators/comparable.hpp>
-#include <boost/hana/detail/operators/searchable.hpp>
-#include <boost/hana/equal.hpp>
-#include <boost/hana/erase_key.hpp>
-#include <boost/hana/find_if.hpp>
-#include <boost/hana/fold_left.hpp>
-#include <boost/hana/fwd/any_of.hpp>
-#include <boost/hana/fwd/core/to.hpp>
-#include <boost/hana/fwd/difference.hpp>
-#include <boost/hana/fwd/intersection.hpp>
-#include <boost/hana/fwd/union.hpp>
-#include <boost/hana/insert.hpp>
-#include <boost/hana/is_subset.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/or.hpp>
-#include <boost/hana/remove.hpp>
-#include <boost/hana/tuple.hpp>
-#include <boost/hana/unpack.hpp>
-#include <boost/hana/value.hpp>
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //////////////////////////////////////////////////////////////////////////
- // set
- //////////////////////////////////////////////////////////////////////////
- //! @cond
- template <typename ...Xs>
- struct set
- : detail::operators::adl<set<Xs...>>
- , detail::searchable_operators<set<Xs...>>
- {
- tuple<Xs...> storage;
- using hana_tag = set_tag;
- static constexpr std::size_t size = sizeof...(Xs);
-
- explicit constexpr set(tuple<Xs...> const& xs)
- : storage(xs)
- { }
-
- explicit constexpr set(tuple<Xs...>&& xs)
- : storage(static_cast<tuple<Xs...>&&>(xs))
- { }
-
- constexpr set() = default;
- constexpr set(set const& other) = default;
- constexpr set(set&& other) = default;
- };
- //! @endcond
-
- //////////////////////////////////////////////////////////////////////////
- // Operators
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <>
- struct comparable_operators<set_tag> {
- static constexpr bool value = true;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // make<set_tag>
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct make_impl<set_tag> {
- template <typename ...Xs>
- static constexpr auto apply(Xs&& ...xs) {
-#if defined(BOOST_HANA_CONFIG_ENABLE_DEBUG_MODE)
- static_assert(detail::fast_and<hana::Comparable<Xs>::value...>::value,
- "hana::make_set(xs...) requires all the 'xs' to be Comparable");
-
- static_assert(detail::fast_and<hana::Hashable<Xs>::value...>::value,
- "hana::make_set(xs...) requires all the 'xs' to be Hashable");
-
- static_assert(detail::fast_and<
- Constant<decltype(hana::equal(xs, xs))>::value...
- >::value,
- "hana::make_set(xs...) requires all the 'xs' to be "
- "Comparable at compile-time");
-
- static_assert(!detail::has_duplicates<Xs&&...>::value,
- "hana::make_set(xs...) requires all the 'xs' to be unique");
-#endif
-
- return set<typename detail::decay<Xs>::type...>{
- hana::make_tuple(static_cast<Xs&&>(xs)...)
- };
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Comparable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct equal_impl<set_tag, set_tag> {
- template <typename S1, typename S2>
- static constexpr auto equal_helper(S1 const& s1, S2 const& s2, hana::true_)
- { return hana::is_subset(s1, s2); }
-
- template <typename S1, typename S2>
- static constexpr auto equal_helper(S1 const&, S2 const&, hana::false_)
- { return hana::false_c; }
-
- template <typename S1, typename S2>
- static constexpr decltype(auto) apply(S1&& s1, S2&& s2) {
- return equal_impl::equal_helper(s1, s2, hana::bool_c<
- decltype(hana::length(s1.storage))::value ==
- decltype(hana::length(s2.storage))::value
- >);
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Foldable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct unpack_impl<set_tag> {
- template <typename Set, typename F>
- static constexpr decltype(auto) apply(Set&& set, F&& f) {
- return hana::unpack(static_cast<Set&&>(set).storage,
- static_cast<F&&>(f));
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Searchable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct find_if_impl<set_tag> {
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&& pred) {
- return hana::find_if(static_cast<Xs&&>(xs).storage, static_cast<Pred&&>(pred));
- }
- };
-
- template <>
- struct any_of_impl<set_tag> {
- template <typename Pred>
- struct any_of_helper {
- Pred const& pred;
- template <typename ...X>
- constexpr auto operator()(X const& ...x) const {
- return hana::or_(pred(x)...);
- }
- constexpr auto operator()() const {
- return hana::false_c;
- }
- };
-
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs const& xs, Pred const& pred) {
- return hana::unpack(xs.storage, any_of_helper<Pred>{pred});
- }
- };
-
- template <>
- struct is_subset_impl<set_tag, set_tag> {
- template <typename Ys>
- struct all_contained {
- Ys const& ys;
- template <typename ...X>
- constexpr auto operator()(X const& ...x) const {
- return hana::bool_c<detail::fast_and<
- hana::value<decltype(hana::contains(ys, x))>()...
- >::value>;
- }
- };
-
- template <typename Xs, typename Ys>
- static constexpr auto apply(Xs const& xs, Ys const& ys) {
- return hana::unpack(xs, all_contained<Ys>{ys});
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Conversions
- //////////////////////////////////////////////////////////////////////////
- template <typename F>
- struct to_impl<set_tag, F, when<hana::Foldable<F>::value>> {
- template <typename Xs>
- static constexpr decltype(auto) apply(Xs&& xs) {
- return hana::fold_left(static_cast<Xs&&>(xs),
- hana::make_set(),
- hana::insert);
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // insert
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct insert_impl<set_tag> {
- template <typename Xs, typename X, typename Indices>
- static constexpr auto
- insert_helper(Xs&& xs, X&&, hana::true_, Indices) {
- return static_cast<Xs&&>(xs);
- }
-
- template <typename Xs, typename X, std::size_t ...n>
- static constexpr auto
- insert_helper(Xs&& xs, X&& x, hana::false_, std::index_sequence<n...>) {
- return hana::make_set(
- hana::at_c<n>(static_cast<Xs&&>(xs).storage)..., static_cast<X&&>(x)
- );
- }
-
- template <typename Xs, typename X>
- static constexpr auto apply(Xs&& xs, X&& x) {
- constexpr bool c = hana::value<decltype(hana::contains(xs, x))>();
- constexpr std::size_t size = std::remove_reference<Xs>::type::size;
- return insert_helper(static_cast<Xs&&>(xs), static_cast<X&&>(x),
- hana::bool_c<c>, std::make_index_sequence<size>{});
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // erase_key
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct erase_key_impl<set_tag> {
- template <typename Xs, typename X>
- static constexpr decltype(auto) apply(Xs&& xs, X&& x) {
- return hana::unpack(
- hana::remove(static_cast<Xs&&>(xs).storage,
- static_cast<X&&>(x)),
- hana::make_set
- );
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // intersection
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <typename Ys>
- struct set_insert_if_contains {
- Ys const& ys;
-
- template <typename Result, typename Key>
- static constexpr auto helper(Result&& result, Key&& key, hana::true_) {
- return hana::insert(static_cast<Result&&>(result), static_cast<Key&&>(key));
- }
-
- template <typename Result, typename Key>
- static constexpr auto helper(Result&& result, Key&&, hana::false_) {
- return static_cast<Result&&>(result);
- }
-
- template <typename Result, typename Key>
- constexpr auto operator()(Result&& result, Key&& key) const {
- constexpr bool keep = hana::value<decltype(hana::contains(ys, key))>();
- return set_insert_if_contains::helper(static_cast<Result&&>(result),
- static_cast<Key&&>(key),
- hana::bool_c<keep>);
- }
- };
- }
-
- template <>
- struct intersection_impl<set_tag> {
- template <typename Xs, typename Ys>
- static constexpr auto apply(Xs&& xs, Ys const& ys) {
- return hana::fold_left(static_cast<Xs&&>(xs), hana::make_set(),
- detail::set_insert_if_contains<Ys>{ys});
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // union_
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct union_impl<set_tag> {
- template <typename Xs, typename Ys>
- static constexpr auto apply(Xs&& xs, Ys&& ys) {
- return hana::fold_left(static_cast<Xs&&>(xs), static_cast<Ys&&>(ys),
- hana::insert);
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // difference
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct difference_impl<set_tag> {
- template <typename Xs, typename Ys>
- static constexpr auto apply(Xs&& xs, Ys&& ys) {
- return hana::fold_left(static_cast<Ys&&>(ys), static_cast<Xs&&>(xs),
- hana::erase_key);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_SET_HPP
diff --git a/contrib/restricted/boost/boost/hana/size.hpp b/contrib/restricted/boost/boost/hana/size.hpp
deleted file mode 100644
index 762349cb62..0000000000
--- a/contrib/restricted/boost/boost/hana/size.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-/*!
-@file
-Defines `boost::hana::size`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_SIZE_HPP
-#define BOOST_HANA_SIZE_HPP
-
-#include <boost/hana/fwd/size.hpp>
-
-#include <boost/hana/length.hpp>
-
-#endif // !BOOST_HANA_SIZE_HPP
diff --git a/contrib/restricted/boost/boost/hana/slice.hpp b/contrib/restricted/boost/boost/hana/slice.hpp
deleted file mode 100644
index 2cc4c7209d..0000000000
--- a/contrib/restricted/boost/boost/hana/slice.hpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/*!
-@file
-Defines `boost::hana::slice` and `boost::hana::slice_c`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_SLICE_HPP
-#define BOOST_HANA_SLICE_HPP
-
-#include <boost/hana/fwd/slice.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/range.hpp>
-#include <boost/hana/unpack.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Indices>
- constexpr auto slice_t::operator()(Xs&& xs, Indices&& indices) const {
- using S = typename hana::tag_of<Xs>::type;
- using Slice = BOOST_HANA_DISPATCH_IF(slice_impl<S>,
- hana::Sequence<S>::value &&
- hana::Foldable<Indices>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::slice(xs, indices) requires 'xs' to be a Sequence");
-
- static_assert(hana::Foldable<Indices>::value,
- "hana::slice(xs, indices) requires 'indices' to be Foldable");
- #endif
-
- return Slice::apply(static_cast<Xs&&>(xs), static_cast<Indices&&>(indices));
- }
- //! @endcond
-
- namespace detail {
- template <typename Xs>
- struct take_arbitrary {
- Xs& xs;
- using S = typename hana::tag_of<Xs>::type;
-
- template <typename ...N>
- constexpr auto operator()(N const& ...) const {
- return hana::make<S>(hana::at_c<N::value>(xs)...);
- }
- };
- }
-
- template <typename S, bool condition>
- struct slice_impl<S, when<condition>> : default_ {
- template <std::size_t from, typename Xs, std::size_t ...i>
- static constexpr auto from_offset(Xs&& xs, std::index_sequence<i...>) {
- return hana::make<S>(hana::at_c<from + i>(static_cast<Xs&&>(xs))...);
- }
-
- template <typename Xs, typename T, T from, T to>
- static constexpr auto apply(Xs&& xs, hana::range<T, from, to> const&) {
- return slice_impl::from_offset<from>(
- static_cast<Xs&&>(xs), std::make_index_sequence<to - from>{}
- );
- }
-
- //! @todo
- //! Since we have the right to specify the same index more than once,
- //! we can't move from the elements of the source sequence even if it
- //! is a temporary object: we could end up double-moving. Perhaps it
- //! would be possible to determine the indices from which we can move
- //! without incurring a too large compile-time penalty?
- template <typename Xs, typename Indices>
- static constexpr auto apply(Xs const& xs, Indices const& indices) {
- return hana::unpack(indices, detail::take_arbitrary<Xs const>{xs});
- }
- };
-
- template <std::size_t from, std::size_t to>
- struct slice_c_t {
- template <typename Xs>
- constexpr auto operator()(Xs&& xs) const {
- return hana::slice(static_cast<Xs&&>(xs),
- hana::range_c<std::size_t, from, to>);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_SLICE_HPP
diff --git a/contrib/restricted/boost/boost/hana/sort.hpp b/contrib/restricted/boost/boost/hana/sort.hpp
deleted file mode 100644
index 65d6d27da3..0000000000
--- a/contrib/restricted/boost/boost/hana/sort.hpp
+++ /dev/null
@@ -1,173 +0,0 @@
-/*!
-@file
-Defines `boost::hana::sort`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_SORT_HPP
-#define BOOST_HANA_SORT_HPP
-
-#include <boost/hana/fwd/sort.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/detail/nested_by.hpp> // required by fwd decl
-#include <boost/hana/length.hpp>
-#include <boost/hana/less.hpp>
-
-#include <utility> // std::declval, std::index_sequence
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Predicate>
- constexpr auto sort_t::operator()(Xs&& xs, Predicate&& pred) const {
- using S = typename hana::tag_of<Xs>::type;
- using Sort = BOOST_HANA_DISPATCH_IF(sort_impl<S>,
- hana::Sequence<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::sort(xs, predicate) requires 'xs' to be a Sequence");
- #endif
-
- return Sort::apply(static_cast<Xs&&>(xs),
- static_cast<Predicate&&>(pred));
- }
-
- template <typename Xs>
- constexpr auto sort_t::operator()(Xs&& xs) const {
- using S = typename hana::tag_of<Xs>::type;
- using Sort = BOOST_HANA_DISPATCH_IF(sort_impl<S>,
- hana::Sequence<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::sort(xs) requires 'xs' to be a Sequence");
- #endif
-
- return Sort::apply(static_cast<Xs&&>(xs));
- }
- //! @endcond
-
- namespace detail {
- template <typename Xs, typename Pred>
- struct sort_predicate {
- template <std::size_t I, std::size_t J>
- using apply = decltype(std::declval<Pred>()(
- hana::at_c<I>(std::declval<Xs>()),
- hana::at_c<J>(std::declval<Xs>())
- ));
- };
-
- template <typename Pred, std::size_t Insert, bool IsInsertionPoint,
- typename Left,
- std::size_t ...Right>
- struct insert;
-
- // We did not find the insertion point; continue processing elements
- // recursively.
- template <
- typename Pred, std::size_t Insert,
- std::size_t ...Left,
- std::size_t Right1, std::size_t Right2, std::size_t ...Right
- >
- struct insert<Pred, Insert, false,
- std::index_sequence<Left...>,
- Right1, Right2, Right...
- > {
- using type = typename insert<
- Pred, Insert, (bool)Pred::template apply<Insert, Right2>::value,
- std::index_sequence<Left..., Right1>,
- Right2, Right...
- >::type;
- };
-
- // We did not find the insertion point, but there is only one element
- // left. We insert at the end of the list, and we're done.
- template <typename Pred, std::size_t Insert, std::size_t ...Left, std::size_t Last>
- struct insert<Pred, Insert, false, std::index_sequence<Left...>, Last> {
- using type = std::index_sequence<Left..., Last, Insert>;
- };
-
- // We found the insertion point, we're done.
- template <typename Pred, std::size_t Insert, std::size_t ...Left, std::size_t ...Right>
- struct insert<Pred, Insert, true, std::index_sequence<Left...>, Right...> {
- using type = std::index_sequence<Left..., Insert, Right...>;
- };
-
-
- template <typename Pred, typename Result, std::size_t ...T>
- struct insertion_sort_impl;
-
- template <typename Pred,
- std::size_t Result1, std::size_t ...Result,
- std::size_t T, std::size_t ...Ts>
- struct insertion_sort_impl<Pred, std::index_sequence<Result1, Result...>, T, Ts...> {
- using type = typename insertion_sort_impl<
- Pred,
- typename insert<
- Pred, T, (bool)Pred::template apply<T, Result1>::value,
- std::index_sequence<>,
- Result1, Result...
- >::type,
- Ts...
- >::type;
- };
-
- template <typename Pred, std::size_t T, std::size_t ...Ts>
- struct insertion_sort_impl<Pred, std::index_sequence<>, T, Ts...> {
- using type = typename insertion_sort_impl<
- Pred, std::index_sequence<T>, Ts...
- >::type;
- };
-
- template <typename Pred, typename Result>
- struct insertion_sort_impl<Pred, Result> {
- using type = Result;
- };
-
- template <typename Pred, typename Indices>
- struct sort_helper;
-
- template <typename Pred, std::size_t ...i>
- struct sort_helper<Pred, std::index_sequence<i...>> {
- using type = typename insertion_sort_impl<
- Pred, std::index_sequence<>, i...
- >::type;
- };
- } // end namespace detail
-
- template <typename S, bool condition>
- struct sort_impl<S, when<condition>> : default_ {
- template <typename Xs, std::size_t ...i>
- static constexpr auto apply_impl(Xs&& xs, std::index_sequence<i...>) {
- return hana::make<S>(hana::at_c<i>(static_cast<Xs&&>(xs))...);
- }
-
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred const&) {
- constexpr std::size_t Len = decltype(hana::length(xs))::value;
- using Indices = typename detail::sort_helper<
- detail::sort_predicate<Xs&&, Pred>,
- std::make_index_sequence<Len>
- >::type;
-
- return apply_impl(static_cast<Xs&&>(xs), Indices{});
- }
-
- template <typename Xs>
- static constexpr auto apply(Xs&& xs)
- { return sort_impl::apply(static_cast<Xs&&>(xs), hana::less); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_SORT_HPP
diff --git a/contrib/restricted/boost/boost/hana/span.hpp b/contrib/restricted/boost/boost/hana/span.hpp
deleted file mode 100644
index 2219749b05..0000000000
--- a/contrib/restricted/boost/boost/hana/span.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/*!
-@file
-Defines `boost::hana::span`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_SPAN_HPP
-#define BOOST_HANA_SPAN_HPP
-
-#include <boost/hana/fwd/span.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/detail/nested_by.hpp> // required by fwd decl
-#include <boost/hana/detail/first_unsatisfied_index.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/pair.hpp>
-#include <boost/hana/unpack.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Pred>
- constexpr auto span_t::operator()(Xs&& xs, Pred&& pred) const {
- using S = typename hana::tag_of<Xs>::type;
- using Span = BOOST_HANA_DISPATCH_IF(span_impl<S>,
- hana::Sequence<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::span(xs, pred) requires 'xs' to be a Sequence");
- #endif
-
- return Span::apply(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct span_impl<S, when<condition>> : default_ {
- template <typename Xs, std::size_t ...before, std::size_t ...after>
- static constexpr auto span_helper(Xs&& xs, std::index_sequence<before...>,
- std::index_sequence<after...>)
- {
- return hana::make_pair(
- hana::make<S>(hana::at_c<before>(static_cast<Xs&&>(xs))...),
- hana::make<S>(hana::at_c<sizeof...(before) + after>(static_cast<Xs&&>(xs))...)
- );
- }
-
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&&) {
- using FirstUnsatisfied = decltype(
- hana::unpack(static_cast<Xs&&>(xs),
- detail::first_unsatisfied_index<Pred&&>{})
- );
- constexpr std::size_t breakpoint = FirstUnsatisfied::value;
- constexpr std::size_t N = decltype(hana::length(xs))::value;
- return span_helper(static_cast<Xs&&>(xs),
- std::make_index_sequence<breakpoint>{},
- std::make_index_sequence<N - breakpoint>{});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_SPAN_HPP
diff --git a/contrib/restricted/boost/boost/hana/string.hpp b/contrib/restricted/boost/boost/hana/string.hpp
deleted file mode 100644
index a7b83dee86..0000000000
--- a/contrib/restricted/boost/boost/hana/string.hpp
+++ /dev/null
@@ -1,349 +0,0 @@
-/*!
-@file
-Defines `boost::hana::string`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_STRING_HPP
-#define BOOST_HANA_STRING_HPP
-
-#include <boost/hana/fwd/string.hpp>
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/detail/algorithm.hpp>
-#include <boost/hana/detail/operators/adl.hpp>
-#include <boost/hana/detail/operators/comparable.hpp>
-#include <boost/hana/detail/operators/iterable.hpp>
-#include <boost/hana/detail/operators/orderable.hpp>
-#include <boost/hana/fwd/at.hpp>
-#include <boost/hana/fwd/contains.hpp>
-#include <boost/hana/fwd/core/tag_of.hpp>
-#include <boost/hana/fwd/core/to.hpp>
-#include <boost/hana/fwd/drop_front.hpp>
-#include <boost/hana/fwd/equal.hpp>
-#include <boost/hana/fwd/find.hpp>
-#include <boost/hana/fwd/front.hpp>
-#include <boost/hana/fwd/hash.hpp>
-#include <boost/hana/fwd/is_empty.hpp>
-#include <boost/hana/fwd/length.hpp>
-#include <boost/hana/fwd/less.hpp>
-#include <boost/hana/fwd/plus.hpp>
-#include <boost/hana/fwd/unpack.hpp>
-#include <boost/hana/fwd/zero.hpp>
-#include <boost/hana/if.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/optional.hpp>
-#include <boost/hana/type.hpp>
-
-#include <utility>
-#include <cstddef>
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //////////////////////////////////////////////////////////////////////////
- // string<>
- //////////////////////////////////////////////////////////////////////////
- //! @cond
- namespace detail {
- template <char ...s>
- constexpr char const string_storage[sizeof...(s) + 1] = {s..., '\0'};
- }
-
- template <char ...s>
- struct string
- : detail::operators::adl<string<s...>>
- , detail::iterable_operators<string<s...>>
- {
- static constexpr char const* c_str() {
- return &detail::string_storage<s...>[0];
- }
- };
- //! @endcond
-
- template <char ...s>
- struct tag_of<string<s...>> {
- using type = string_tag;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // make<string_tag>
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct make_impl<string_tag> {
- template <typename ...Chars>
- static constexpr auto apply(Chars const& ...) {
- return hana::string<hana::value<Chars>()...>{};
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // BOOST_HANA_STRING
- //////////////////////////////////////////////////////////////////////////
- namespace string_detail {
- template <typename S, std::size_t ...N>
- constexpr string<S::get()[N]...>
- prepare_impl(S, std::index_sequence<N...>)
- { return {}; }
-
- template <typename S>
- constexpr decltype(auto) prepare(S s) {
- return prepare_impl(s,
- std::make_index_sequence<sizeof(S::get()) - 1>{});
- }
- }
-
-#define BOOST_HANA_STRING(s) \
- (::boost::hana::string_detail::prepare([]{ \
- struct tmp { \
- static constexpr decltype(auto) get() { return s; } \
- }; \
- return tmp{}; \
- }())) \
-/**/
-
-#ifdef BOOST_HANA_CONFIG_ENABLE_STRING_UDL
- //////////////////////////////////////////////////////////////////////////
- // _s user-defined literal
- //////////////////////////////////////////////////////////////////////////
- namespace literals {
- template <typename CharT, CharT ...s>
- constexpr auto operator"" _s() {
- static_assert(std::is_same<CharT, char>::value,
- "hana::string: Only narrow string literals are supported with "
- "the _s string literal right now. See https://goo.gl/fBbKD7 "
- "if you need support for fancier types of compile-time strings.");
- return hana::string_c<s...>;
- }
- }
-#endif
-
- //////////////////////////////////////////////////////////////////////////
- // Operators
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <>
- struct comparable_operators<string_tag> {
- static constexpr bool value = true;
- };
- template <>
- struct orderable_operators<string_tag> {
- static constexpr bool value = true;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // to<char const*>
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct to_impl<char const*, string_tag> {
- template <char ...c>
- static constexpr char const* apply(string<c...> const&)
- { return string<c...>::c_str(); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // to<string_tag>
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- constexpr std::size_t cx_strlen(char const* s) {
- std::size_t n = 0u;
- while (*s != '\0')
- ++s, ++n;
- return n;
- }
-
- template <typename S, std::size_t ...I>
- constexpr hana::string<hana::value<S>()[I]...> expand(std::index_sequence<I...>)
- { return {}; }
- }
-
- template <typename IC>
- struct to_impl<hana::string_tag, IC, hana::when<
- hana::Constant<IC>::value &&
- std::is_convertible<typename IC::value_type, char const*>::value
- >> {
- template <typename S>
- static constexpr auto apply(S const&) {
- constexpr char const* s = hana::value<S>();
- constexpr std::size_t len = detail::cx_strlen(s);
- return detail::expand<S>(std::make_index_sequence<len>{});
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Comparable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct equal_impl<string_tag, string_tag> {
- template <typename S>
- static constexpr auto apply(S const&, S const&)
- { return hana::true_c; }
-
- template <typename S1, typename S2>
- static constexpr auto apply(S1 const&, S2 const&)
- { return hana::false_c; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Orderable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct less_impl<string_tag, string_tag> {
- template <char ...s1, char ...s2>
- static constexpr auto
- apply(string<s1...> const&, string<s2...> const&) {
- // We put a '\0' at the end only to avoid empty arrays.
- constexpr char const c_str1[] = {s1..., '\0'};
- constexpr char const c_str2[] = {s2..., '\0'};
- return hana::bool_c<detail::lexicographical_compare(
- c_str1, c_str1 + sizeof...(s1),
- c_str2, c_str2 + sizeof...(s2)
- )>;
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Monoid
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct plus_impl<string_tag, string_tag> {
- template <char ...s1, char ...s2>
- static constexpr auto
- apply(string<s1...> const&, string<s2...> const&) {
- return string<s1..., s2...>{};
- }
- };
-
- template <>
- struct zero_impl<string_tag> {
- static constexpr auto apply() {
- return string<>{};
- }
- };
-
- template <char ...s1, char ...s2>
- constexpr auto operator+(string<s1...> const&, string<s2...> const&) {
- return hana::string<s1..., s2...>{};
- }
-
- //////////////////////////////////////////////////////////////////////////
- // Foldable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct unpack_impl<string_tag> {
- template <char ...s, typename F>
- static constexpr decltype(auto) apply(string<s...> const&, F&& f)
- { return static_cast<F&&>(f)(char_<s>{}...); }
- };
-
- template <>
- struct length_impl<string_tag> {
- template <char ...s>
- static constexpr auto apply(string<s...> const&)
- { return hana::size_c<sizeof...(s)>; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Iterable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct front_impl<string_tag> {
- template <char x, char ...xs>
- static constexpr auto apply(string<x, xs...> const&)
- { return hana::char_c<x>; }
- };
-
- template <>
- struct drop_front_impl<string_tag> {
- template <std::size_t N, char ...xs, std::size_t ...i>
- static constexpr auto helper(string<xs...> const&, std::index_sequence<i...>) {
- constexpr char s[] = {xs...};
- return hana::string_c<s[i + N]...>;
- }
-
- template <char ...xs, typename N>
- static constexpr auto apply(string<xs...> const& s, N const&) {
- return helper<N::value>(s, std::make_index_sequence<
- N::value < sizeof...(xs) ? sizeof...(xs) - N::value : 0
- >{});
- }
-
- template <typename N>
- static constexpr auto apply(string<> const& s, N const&)
- { return s; }
- };
-
- template <>
- struct is_empty_impl<string_tag> {
- template <char ...s>
- static constexpr auto apply(string<s...> const&)
- { return hana::bool_c<sizeof...(s) == 0>; }
- };
-
- template <>
- struct at_impl<string_tag> {
- template <char ...s, typename N>
- static constexpr auto apply(string<s...> const&, N const&) {
- // We put a '\0' at the end to avoid an empty array.
- constexpr char characters[] = {s..., '\0'};
- constexpr auto n = N::value;
- return hana::char_c<characters[n]>;
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Searchable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct contains_impl<string_tag> {
- template <char ...s, typename C>
- static constexpr auto
- helper(string<s...> const&, C const&, hana::true_) {
- constexpr char const characters[] = {s..., '\0'};
- constexpr char c = hana::value<C>();
- return hana::bool_c<
- detail::find(characters, characters + sizeof...(s), c)
- != characters + sizeof...(s)
- >;
- }
-
- template <typename S, typename C>
- static constexpr auto helper(S const&, C const&, hana::false_)
- { return hana::false_c; }
-
- template <typename S, typename C>
- static constexpr auto apply(S const& s, C const& c)
- { return helper(s, c, hana::bool_c<hana::Constant<C>::value>); }
- };
-
- template <>
- struct find_impl<string_tag> {
- template <char ...s, typename Char>
- static constexpr auto apply(string<s...> const& str, Char const& c) {
- return hana::if_(contains_impl<string_tag>::apply(str, c),
- hana::just(c),
- hana::nothing
- );
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Hashable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct hash_impl<string_tag> {
- template <typename String>
- static constexpr auto apply(String const&) {
- return hana::type_c<String>;
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_STRING_HPP
diff --git a/contrib/restricted/boost/boost/hana/suffix.hpp b/contrib/restricted/boost/boost/hana/suffix.hpp
deleted file mode 100644
index 68a344db6e..0000000000
--- a/contrib/restricted/boost/boost/hana/suffix.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*!
-@file
-Defines `boost::hana::suffix`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_SUFFIX_HPP
-#define BOOST_HANA_SUFFIX_HPP
-
-#include <boost/hana/fwd/suffix.hpp>
-
-#include <boost/hana/chain.hpp>
-#include <boost/hana/concept/monad_plus.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/lift.hpp>
-#include <boost/hana/prepend.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Sfx>
- constexpr auto suffix_t::operator()(Xs&& xs, Sfx&& sfx) const {
- using M = typename hana::tag_of<Xs>::type;
- using Suffix = BOOST_HANA_DISPATCH_IF(suffix_impl<M>,
- hana::MonadPlus<M>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::MonadPlus<M>::value,
- "hana::suffix(xs, sfx) requires 'xs' to be a MonadPlus");
- #endif
-
- return Suffix::apply(static_cast<Xs&&>(xs), static_cast<Sfx&&>(sfx));
- }
- //! @endcond
-
- template <typename M, bool condition>
- struct suffix_impl<M, when<condition>> : default_ {
- template <typename Xs, typename Z>
- static constexpr auto apply(Xs&& xs, Z&& z) {
- return hana::chain(static_cast<Xs&&>(xs),
- hana::partial(hana::prepend, hana::lift<M>(static_cast<Z&&>(z))));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_SUFFIX_HPP
diff --git a/contrib/restricted/boost/boost/hana/sum.hpp b/contrib/restricted/boost/boost/hana/sum.hpp
deleted file mode 100644
index 5c86dafdde..0000000000
--- a/contrib/restricted/boost/boost/hana/sum.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/*!
-@file
-Defines `boost::hana::sum`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_SUM_HPP
-#define BOOST_HANA_SUM_HPP
-
-#include <boost/hana/fwd/sum.hpp>
-
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/concept/monoid.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/fold_left.hpp>
-#include <boost/hana/integral_constant.hpp> // required by fwd decl
-#include <boost/hana/plus.hpp>
-#include <boost/hana/zero.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename M>
- struct sum_t {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Monoid<M>::value,
- "hana::sum<M> requires 'M' to be a Monoid");
- #endif
-
- template <typename Xs>
- constexpr decltype(auto) operator()(Xs&& xs) const {
- using S = typename hana::tag_of<Xs>::type;
- using Sum = BOOST_HANA_DISPATCH_IF(sum_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::sum<M>(xs) requires 'xs' to be Foldable");
- #endif
-
- return Sum::template apply<M>(static_cast<Xs&&>(xs));
- }
- };
-
- template <typename T, bool condition>
- struct sum_impl<T, when<condition>> : default_ {
- template <typename M, typename Xs>
- static constexpr decltype(auto) apply(Xs&& xs) {
- return hana::fold_left(static_cast<Xs&&>(xs), hana::zero<M>(), hana::plus);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_SUM_HPP
diff --git a/contrib/restricted/boost/boost/hana/symmetric_difference.hpp b/contrib/restricted/boost/boost/hana/symmetric_difference.hpp
deleted file mode 100644
index 1ca56d3019..0000000000
--- a/contrib/restricted/boost/boost/hana/symmetric_difference.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/*!
-@file
-Defines `boost::hana::symmetric_difference`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_SYMMETRIC_DIFFERENCE_HPP
-#define BOOST_HANA_SYMMETRIC_DIFFERENCE_HPP
-
-#include <boost/hana/fwd/symmetric_difference.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/difference.hpp>
-#include <boost/hana/union.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Ys>
- constexpr auto symmetric_difference_t::operator()(Xs&& xs, Ys&& ys) const {
- using S = typename hana::tag_of<Xs>::type;
- using SymmetricDifference = BOOST_HANA_DISPATCH_IF(symmetric_difference_impl<S>,
- true
- );
-
- return SymmetricDifference::apply(static_cast<Xs&&>(xs), static_cast<Ys&&>(ys));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct symmetric_difference_impl<S, when<condition>> : default_ {
- template <typename Xs, typename Ys>
- static constexpr auto apply(Xs&& xs, Ys&& ys) {
- return hana::union_(
- hana::difference(xs, ys),
- hana::difference(ys, xs)
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_SYMMETRIC_DIFFERENCE_HPP
diff --git a/contrib/restricted/boost/boost/hana/take_back.hpp b/contrib/restricted/boost/boost/hana/take_back.hpp
deleted file mode 100644
index 4d9c39974f..0000000000
--- a/contrib/restricted/boost/boost/hana/take_back.hpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/*!
-@file
-Defines `boost::hana::take_back`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_TAKE_BACK_HPP
-#define BOOST_HANA_TAKE_BACK_HPP
-
-#include <boost/hana/fwd/take_back.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/length.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename N>
- constexpr auto take_back_t::operator()(Xs&& xs, N const& n) const {
- using S = typename hana::tag_of<Xs>::type;
- using TakeBack = BOOST_HANA_DISPATCH_IF(take_back_impl<S>,
- hana::Sequence<S>::value &&
- hana::IntegralConstant<N>::value
- );
-
-#ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::take_back(xs, n) requires 'xs' to be a Sequence");
-
- static_assert(hana::IntegralConstant<N>::value,
- "hana::take_back(xs, n) requires 'n' to be an IntegralConstant");
-#endif
-
- return TakeBack::apply(static_cast<Xs&&>(xs), n);
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct take_back_impl<S, when<condition>> : default_ {
- template <std::size_t start, typename Xs, std::size_t ...n>
- static constexpr auto take_back_helper(Xs&& xs, std::index_sequence<n...>) {
- return hana::make<S>(hana::at_c<start + n>(static_cast<Xs&&>(xs))...);
- }
-
- template <typename Xs, typename N>
- static constexpr auto apply(Xs&& xs, N const&) {
- constexpr std::size_t n = N::value;
- constexpr std::size_t len = decltype(hana::length(xs))::value;
- constexpr std::size_t start = n < len ? len - n : 0;
- return take_back_helper<start>(static_cast<Xs&&>(xs),
- std::make_index_sequence<(n < len ? n : len)>{});
- }
- };
-
- template <std::size_t n>
- struct take_back_c_t {
- template <typename Xs>
- constexpr auto operator()(Xs&& xs) const {
- return hana::take_back(static_cast<Xs&&>(xs), hana::size_c<n>);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_TAKE_BACK_HPP
diff --git a/contrib/restricted/boost/boost/hana/take_front.hpp b/contrib/restricted/boost/boost/hana/take_front.hpp
deleted file mode 100644
index b32fbb6e50..0000000000
--- a/contrib/restricted/boost/boost/hana/take_front.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/*!
-@file
-Defines `boost::hana::take_front` and `boost::hana::take_front_c`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_TAKE_FRONT_HPP
-#define BOOST_HANA_TAKE_FRONT_HPP
-
-#include <boost/hana/fwd/take_front.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/length.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename N>
- constexpr auto take_front_t::operator()(Xs&& xs, N const& n) const {
- using S = typename hana::tag_of<Xs>::type;
- using TakeFront = BOOST_HANA_DISPATCH_IF(take_front_impl<S>,
- hana::Sequence<S>::value &&
- hana::IntegralConstant<N>::value
- );
-
-#ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::take_front(xs, n) requires 'xs' to be a Sequence");
-
- static_assert(hana::IntegralConstant<N>::value,
- "hana::take_front(xs, n) requires 'n' to be an IntegralConstant");
-#endif
-
- return TakeFront::apply(static_cast<Xs&&>(xs), n);
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct take_front_impl<S, when<condition>> : default_ {
- template <typename Xs, std::size_t ...n>
- static constexpr auto take_front_helper(Xs&& xs, std::index_sequence<n...>) {
- return hana::make<S>(hana::at_c<n>(static_cast<Xs&&>(xs))...);
- }
-
- template <typename Xs, typename N>
- static constexpr auto apply(Xs&& xs, N const&) {
- constexpr std::size_t n = N::value;
- constexpr std::size_t size = decltype(hana::length(xs))::value;
- return take_front_helper(static_cast<Xs&&>(xs),
- std::make_index_sequence<(n < size ? n : size)>{});
- }
- };
-
- template <std::size_t n>
- struct take_front_c_t {
- template <typename Xs>
- constexpr auto operator()(Xs&& xs) const {
- return hana::take_front(static_cast<Xs&&>(xs), hana::size_c<n>);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_TAKE_FRONT_HPP
diff --git a/contrib/restricted/boost/boost/hana/take_while.hpp b/contrib/restricted/boost/boost/hana/take_while.hpp
deleted file mode 100644
index 392459dca7..0000000000
--- a/contrib/restricted/boost/boost/hana/take_while.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*!
-@file
-Defines `boost::hana::take_while`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_TAKE_WHILE_HPP
-#define BOOST_HANA_TAKE_WHILE_HPP
-
-#include <boost/hana/fwd/take_while.hpp>
-
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/first_unsatisfied_index.hpp>
-#include <boost/hana/take_front.hpp>
-#include <boost/hana/unpack.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Pred>
- constexpr auto take_while_t::operator()(Xs&& xs, Pred&& pred) const {
- using S = typename hana::tag_of<Xs>::type;
- using TakeWhile = BOOST_HANA_DISPATCH_IF(take_while_impl<S>,
- hana::Sequence<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::take_while(xs, pred) requires 'xs' to be a Sequence");
- #endif
-
- return TakeWhile::apply(static_cast<Xs&&>(xs),
- static_cast<Pred&&>(pred));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct take_while_impl<S, when<condition>> : default_ {
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&&) {
- using FirstUnsatisfied = decltype(
- hana::unpack(static_cast<Xs&&>(xs),
- detail::first_unsatisfied_index<Pred&&>{})
- );
- return hana::take_front(static_cast<Xs&&>(xs), FirstUnsatisfied{});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_TAKE_WHILE_HPP
diff --git a/contrib/restricted/boost/boost/hana/tap.hpp b/contrib/restricted/boost/boost/hana/tap.hpp
deleted file mode 100644
index 7d37318255..0000000000
--- a/contrib/restricted/boost/boost/hana/tap.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/*!
-@file
-Defines `boost::hana::tap`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_TAP_HPP
-#define BOOST_HANA_TAP_HPP
-
-#include <boost/hana/fwd/tap.hpp>
-
-#include <boost/hana/concept/monad.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/lift.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename M>
- struct tap_t {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Monad<M>::value,
- "hana::tap<M> requires 'M' to be a Monad");
- #endif
-
- template <typename F>
- constexpr auto operator()(F&& f) const {
- using Tap = BOOST_HANA_DISPATCH_IF(tap_impl<M>,
- hana::Monad<M>::value
- );
-
- return Tap::apply(static_cast<F&&>(f));
- }
- };
-
- namespace detail {
- template <typename M>
- struct tap_helper {
- template <typename F, typename X>
- constexpr auto operator()(F&& f, X&& x) const {
- (void)static_cast<F&&>(f)(x);
- return hana::lift<M>(static_cast<X&&>(x));
- }
- };
- }
-
- template <typename M, bool condition>
- struct tap_impl<M, when<condition>> : default_ {
- template <typename F>
- static constexpr auto apply(F&& f)
- { return hana::partial(detail::tap_helper<M>{}, static_cast<F&&>(f)); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_TAP_HPP
diff --git a/contrib/restricted/boost/boost/hana/then.hpp b/contrib/restricted/boost/boost/hana/then.hpp
deleted file mode 100644
index b6d74cfcf4..0000000000
--- a/contrib/restricted/boost/boost/hana/then.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*!
-@file
-Defines `boost::hana::then`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_THEN_HPP
-#define BOOST_HANA_THEN_HPP
-
-#include <boost/hana/fwd/then.hpp>
-
-#include <boost/hana/chain.hpp>
-#include <boost/hana/concept/monad.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/functional/always.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Before, typename Xs>
- constexpr decltype(auto) then_t::operator()(Before&& before, Xs&& xs) const {
- using M = typename hana::tag_of<Before>::type;
- using Then = BOOST_HANA_DISPATCH_IF(then_impl<M>,
- hana::Monad<M>::value &&
- hana::Monad<Xs>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Monad<M>::value,
- "hana::then(before, xs) requires 'before' to be a Monad");
-
- static_assert(hana::Monad<Xs>::value,
- "hana::then(before, xs) requires 'xs' to be a Monad");
- #endif
-
- return Then::apply(static_cast<Before&&>(before),
- static_cast<Xs&&>(xs));
- }
- //! @endcond
-
- template <typename M, bool condition>
- struct then_impl<M, when<condition>> : default_ {
- template <typename Xs, typename Ys>
- static constexpr decltype(auto) apply(Xs&& xs, Ys&& ys) {
- return hana::chain(static_cast<Xs&&>(xs),
- hana::always(static_cast<Ys&&>(ys)));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_THEN_HPP
diff --git a/contrib/restricted/boost/boost/hana/traits.hpp b/contrib/restricted/boost/boost/hana/traits.hpp
deleted file mode 100644
index 983bdf8367..0000000000
--- a/contrib/restricted/boost/boost/hana/traits.hpp
+++ /dev/null
@@ -1,213 +0,0 @@
-/*!
-@file
-Defines function-like equivalents to the standard `<type_traits>`, and also
-to some utilities like `std::declval`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_TRAITS_HPP
-#define BOOST_HANA_TRAITS_HPP
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/type.hpp>
-
-#include <cstddef>
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN namespace traits {
- namespace detail {
- // We use this instead of hana::integral because we want to return
- // hana::integral_constants instead of std::integral_constants.
- template <template <typename ...> class F>
- struct hana_trait {
- template <typename ...T>
- constexpr auto operator()(T const& ...) const {
- using Result = typename F<typename T::type...>::type;
- return hana::integral_c<typename Result::value_type, Result::value>;
- }
- };
- }
-
- ///////////////////////
- // Type properties
- ///////////////////////
- // Primary type categories
- constexpr auto is_void = detail::hana_trait<std::is_void>{};
- constexpr auto is_null_pointer = detail::hana_trait<std::is_null_pointer>{};
- constexpr auto is_integral = detail::hana_trait<std::is_integral>{};
- constexpr auto is_floating_point = detail::hana_trait<std::is_floating_point>{};
- constexpr auto is_array = detail::hana_trait<std::is_array>{};
- constexpr auto is_enum = detail::hana_trait<std::is_enum>{};
- constexpr auto is_union = detail::hana_trait<std::is_union>{};
- constexpr auto is_class = detail::hana_trait<std::is_class>{};
- constexpr auto is_function = detail::hana_trait<std::is_function>{};
- constexpr auto is_pointer = detail::hana_trait<std::is_pointer>{};
- constexpr auto is_lvalue_reference = detail::hana_trait<std::is_lvalue_reference>{};
- constexpr auto is_rvalue_reference = detail::hana_trait<std::is_rvalue_reference>{};
- constexpr auto is_member_object_pointer = detail::hana_trait<std::is_member_object_pointer>{};
- constexpr auto is_member_function_pointer = detail::hana_trait<std::is_member_function_pointer>{};
-
- // Composite type categories
- constexpr auto is_fundamental = detail::hana_trait<std::is_fundamental>{};
- constexpr auto is_arithmetic = detail::hana_trait<std::is_arithmetic>{};
- constexpr auto is_scalar = detail::hana_trait<std::is_scalar>{};
- constexpr auto is_object = detail::hana_trait<std::is_object>{};
- constexpr auto is_compound = detail::hana_trait<std::is_compound>{};
- constexpr auto is_reference = detail::hana_trait<std::is_reference>{};
- constexpr auto is_member_pointer = detail::hana_trait<std::is_member_pointer>{};
-
- // Type properties
- constexpr auto is_const = detail::hana_trait<std::is_const>{};
- constexpr auto is_volatile = detail::hana_trait<std::is_volatile>{};
- constexpr auto is_trivial = detail::hana_trait<std::is_trivial>{};
- constexpr auto is_trivially_copyable = detail::hana_trait<std::is_trivially_copyable>{};
- constexpr auto is_standard_layout = detail::hana_trait<std::is_standard_layout>{};
- constexpr auto is_pod = detail::hana_trait<std::is_pod>{};
- constexpr auto is_literal_type = detail::hana_trait<std::is_literal_type>{};
- constexpr auto is_empty = detail::hana_trait<std::is_empty>{};
- constexpr auto is_polymorphic = detail::hana_trait<std::is_polymorphic>{};
- constexpr auto is_abstract = detail::hana_trait<std::is_abstract>{};
- constexpr auto is_signed = detail::hana_trait<std::is_signed>{};
- constexpr auto is_unsigned = detail::hana_trait<std::is_unsigned>{};
-
- // Supported operations
- constexpr auto is_constructible = detail::hana_trait<std::is_constructible>{};
- constexpr auto is_trivially_constructible = detail::hana_trait<std::is_trivially_constructible>{};
- constexpr auto is_nothrow_constructible = detail::hana_trait<std::is_nothrow_constructible>{};
-
- constexpr auto is_default_constructible = detail::hana_trait<std::is_default_constructible>{};
- constexpr auto is_trivially_default_constructible = detail::hana_trait<std::is_trivially_default_constructible>{};
- constexpr auto is_nothrow_default_constructible = detail::hana_trait<std::is_nothrow_default_constructible>{};
-
- constexpr auto is_copy_constructible = detail::hana_trait<std::is_copy_constructible>{};
- constexpr auto is_trivially_copy_constructible = detail::hana_trait<std::is_trivially_copy_constructible>{};
- constexpr auto is_nothrow_copy_constructible = detail::hana_trait<std::is_nothrow_copy_constructible>{};
-
- constexpr auto is_move_constructible = detail::hana_trait<std::is_move_constructible>{};
- constexpr auto is_trivially_move_constructible = detail::hana_trait<std::is_trivially_move_constructible>{};
- constexpr auto is_nothrow_move_constructible = detail::hana_trait<std::is_nothrow_move_constructible>{};
-
- constexpr auto is_assignable = detail::hana_trait<std::is_assignable>{};
- constexpr auto is_trivially_assignable = detail::hana_trait<std::is_trivially_assignable>{};
- constexpr auto is_nothrow_assignable = detail::hana_trait<std::is_nothrow_assignable>{};
-
- constexpr auto is_copy_assignable = detail::hana_trait<std::is_copy_assignable>{};
- constexpr auto is_trivially_copy_assignable = detail::hana_trait<std::is_trivially_copy_assignable>{};
- constexpr auto is_nothrow_copy_assignable = detail::hana_trait<std::is_nothrow_copy_assignable>{};
-
- constexpr auto is_move_assignable = detail::hana_trait<std::is_move_assignable>{};
- constexpr auto is_trivially_move_assignable = detail::hana_trait<std::is_trivially_move_assignable>{};
- constexpr auto is_nothrow_move_assignable = detail::hana_trait<std::is_nothrow_move_assignable>{};
-
- constexpr auto is_destructible = detail::hana_trait<std::is_destructible>{};
- constexpr auto is_trivially_destructible = detail::hana_trait<std::is_trivially_destructible>{};
- constexpr auto is_nothrow_destructible = detail::hana_trait<std::is_nothrow_destructible>{};
-
- constexpr auto has_virtual_destructor = detail::hana_trait<std::has_virtual_destructor>{};
-
- // Property queries
- constexpr auto alignment_of = detail::hana_trait<std::alignment_of>{};
- constexpr auto rank = detail::hana_trait<std::rank>{};
- constexpr struct extent_t {
- template <typename T, typename N>
- constexpr auto operator()(T const&, N const&) const {
- constexpr unsigned n = N::value;
- using Result = typename std::extent<typename T::type, n>::type;
- return hana::integral_c<typename Result::value_type, Result::value>;
- }
-
- template <typename T>
- constexpr auto operator()(T const& t) const
- { return (*this)(t, hana::uint_c<0>); }
- } extent{};
-
- // Type relationships
- constexpr auto is_same = detail::hana_trait<std::is_same>{};
- constexpr auto is_base_of = detail::hana_trait<std::is_base_of>{};
- constexpr auto is_convertible = detail::hana_trait<std::is_convertible>{};
-
- ///////////////////////
- // Type modifications
- ///////////////////////
- // Const-volatility specifiers
- constexpr auto remove_cv = metafunction<std::remove_cv>;
- constexpr auto remove_const = metafunction<std::remove_const>;
- constexpr auto remove_volatile = metafunction<std::remove_volatile>;
-
- constexpr auto add_cv = metafunction<std::add_cv>;
- constexpr auto add_const = metafunction<std::add_const>;
- constexpr auto add_volatile = metafunction<std::add_volatile>;
-
- // References
- constexpr auto remove_reference = metafunction<std::remove_reference>;
- constexpr auto add_lvalue_reference = metafunction<std::add_lvalue_reference>;
- constexpr auto add_rvalue_reference = metafunction<std::add_rvalue_reference>;
-
- // Pointers
- constexpr auto remove_pointer = metafunction<std::remove_pointer>;
- constexpr auto add_pointer = metafunction<std::add_pointer>;
-
- // Sign modifiers
- constexpr auto make_signed = metafunction<std::make_signed>;
- constexpr auto make_unsigned = metafunction<std::make_unsigned>;
-
- // Arrays
- constexpr auto remove_extent = metafunction<std::remove_extent>;
- constexpr auto remove_all_extents = metafunction<std::remove_all_extents>;
-
- // Miscellaneous transformations
- constexpr struct aligned_storage_t {
- template <typename Len, typename Align>
- constexpr auto operator()(Len const&, Align const&) const {
- constexpr std::size_t len = Len::value;
- constexpr std::size_t align = Align::value;
- using Result = typename std::aligned_storage<len, align>::type;
- return hana::type_c<Result>;
- }
-
- template <typename Len>
- constexpr auto operator()(Len const&) const {
- constexpr std::size_t len = Len::value;
- using Result = typename std::aligned_storage<len>::type;
- return hana::type_c<Result>;
- }
- } aligned_storage{};
-
- constexpr struct aligned_union_t {
- template <typename Len, typename ...T>
- constexpr auto operator()(Len const&, T const&...) const {
- constexpr std::size_t len = Len::value;
- using Result = typename std::aligned_union<len, typename T::type...>::type;
- return hana::type_c<Result>;
- }
- } aligned_union{};
-
- constexpr auto decay = metafunction<std::decay>;
- // enable_if
- // disable_if
- // conditional
-
- constexpr auto common_type = metafunction<std::common_type>;
- constexpr auto underlying_type = metafunction<std::underlying_type>;
- constexpr auto result_of = metafunction<std::result_of>;
-
-
- ///////////////////////
- // Utilities
- ///////////////////////
- struct declval_t {
- template <typename T>
- typename std::add_rvalue_reference<
- typename T::type
- >::type operator()(T const&) const;
- };
-
- constexpr declval_t declval{};
-} BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_TRAITS_HPP
diff --git a/contrib/restricted/boost/boost/hana/transform.hpp b/contrib/restricted/boost/boost/hana/transform.hpp
deleted file mode 100644
index 7c68731e2d..0000000000
--- a/contrib/restricted/boost/boost/hana/transform.hpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/*!
-@file
-Defines `boost::hana::transform`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_TRANSFORM_HPP
-#define BOOST_HANA_TRANSFORM_HPP
-
-#include <boost/hana/fwd/transform.hpp>
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/functor.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/functional/always.hpp>
-#include <boost/hana/fwd/adjust_if.hpp>
-#include <boost/hana/unpack.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename F>
- constexpr auto transform_t::operator()(Xs&& xs, F&& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using Transform = BOOST_HANA_DISPATCH_IF(transform_impl<S>,
- hana::Functor<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Functor<S>::value,
- "hana::transform(xs, f) requires 'xs' to be a Functor");
- #endif
-
- return Transform::apply(static_cast<Xs&&>(xs), static_cast<F&&>(f));
- }
- //! @endcond
-
- template <typename Fun, bool condition>
- struct transform_impl<Fun, when<condition>> : default_ {
- template <typename Xs, typename F>
- static constexpr auto apply(Xs&& xs, F&& f) {
- return hana::adjust_if(static_cast<Xs&&>(xs),
- hana::always(hana::true_c),
- static_cast<F&&>(f));
- }
- };
-
- template <typename S>
- struct transform_impl<S, when<Sequence<S>::value>> {
- //! @cond
- template <typename F>
- struct transformer {
- F f;
- template <typename ...Xs>
- constexpr auto operator()(Xs&& ...xs) const {
- return hana::make<S>((*f)(static_cast<Xs&&>(xs))...);
- }
- };
- //! @endcond
-
- template <typename Xs, typename F>
- static constexpr auto apply(Xs&& xs, F&& f) {
- // We use a pointer to workaround a Clang 3.5 ICE
- return hana::unpack(static_cast<Xs&&>(xs),
- transformer<decltype(&f)>{&f});
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_TRANSFORM_HPP
diff --git a/contrib/restricted/boost/boost/hana/tuple.hpp b/contrib/restricted/boost/boost/hana/tuple.hpp
deleted file mode 100644
index 3354a84bee..0000000000
--- a/contrib/restricted/boost/boost/hana/tuple.hpp
+++ /dev/null
@@ -1,312 +0,0 @@
-/*!
-@file
-Defines `boost::hana::tuple`.
-
-@copyright Louis Dionne 2013-2017
-@copyright Jason Rice 2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_TUPLE_HPP
-#define BOOST_HANA_TUPLE_HPP
-
-#include <boost/hana/fwd/tuple.hpp>
-
-#include <boost/hana/basic_tuple.hpp>
-#include <boost/hana/bool.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/decay.hpp>
-#include <boost/hana/detail/fast_and.hpp>
-#include <boost/hana/detail/index_if.hpp>
-#include <boost/hana/detail/intrinsics.hpp>
-#include <boost/hana/detail/operators/adl.hpp>
-#include <boost/hana/detail/operators/comparable.hpp>
-#include <boost/hana/detail/operators/iterable.hpp>
-#include <boost/hana/detail/operators/monad.hpp>
-#include <boost/hana/detail/operators/orderable.hpp>
-#include <boost/hana/fwd/at.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/drop_front.hpp>
-#include <boost/hana/fwd/index_if.hpp>
-#include <boost/hana/fwd/is_empty.hpp>
-#include <boost/hana/fwd/length.hpp>
-#include <boost/hana/fwd/optional.hpp>
-#include <boost/hana/fwd/unpack.hpp>
-#include <boost/hana/type.hpp> // required by fwd decl of tuple_t
-
-#include <cstddef>
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- namespace detail {
- template <typename Xs, typename Ys, std::size_t ...n>
- constexpr void assign(Xs& xs, Ys&& ys, std::index_sequence<n...>) {
- int sequence[] = {int{}, ((void)(
- hana::at_c<n>(xs) = hana::at_c<n>(static_cast<Ys&&>(ys))
- ), int{})...};
- (void)sequence;
- }
-
- struct from_index_sequence_t { };
-
- template <typename Tuple, typename ...Yn>
- struct is_same_tuple : std::false_type { };
-
- template <typename Tuple>
- struct is_same_tuple<typename detail::decay<Tuple>::type, Tuple>
- : std::true_type
- { };
-
- template <bool SameTuple, bool SameNumberOfElements, typename Tuple, typename ...Yn>
- struct enable_tuple_variadic_ctor;
-
- template <typename ...Xn, typename ...Yn>
- struct enable_tuple_variadic_ctor<false, true, hana::tuple<Xn...>, Yn...>
- : std::enable_if<
- detail::fast_and<BOOST_HANA_TT_IS_CONSTRUCTIBLE(Xn, Yn&&)...>::value
- >
- { };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // tuple
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct tuple<>
- : detail::operators::adl<tuple<>>
- , detail::iterable_operators<tuple<>>
- {
- constexpr tuple() { }
- using hana_tag = tuple_tag;
- };
-
- template <typename ...Xn>
- struct tuple
- : detail::operators::adl<tuple<Xn...>>
- , detail::iterable_operators<tuple<Xn...>>
- {
- basic_tuple<Xn...> storage_;
- using hana_tag = tuple_tag;
-
- private:
- template <typename Other, std::size_t ...n>
- explicit constexpr tuple(detail::from_index_sequence_t, std::index_sequence<n...>, Other&& other)
- : storage_(hana::at_c<n>(static_cast<Other&&>(other))...)
- { }
-
- public:
- template <typename ...dummy, typename = typename std::enable_if<
- detail::fast_and<BOOST_HANA_TT_IS_CONSTRUCTIBLE(Xn, dummy...)...>::value
- >::type>
- constexpr tuple()
- : storage_()
- { }
-
- template <typename ...dummy, typename = typename std::enable_if<
- detail::fast_and<BOOST_HANA_TT_IS_CONSTRUCTIBLE(Xn, Xn const&, dummy...)...>::value
- >::type>
- constexpr tuple(Xn const& ...xn)
- : storage_(xn...)
- { }
-
- template <typename ...Yn, typename = typename detail::enable_tuple_variadic_ctor<
- detail::is_same_tuple<tuple, Yn...>::value,
- sizeof...(Xn) == sizeof...(Yn), tuple, Yn...
- >::type>
- constexpr tuple(Yn&& ...yn)
- : storage_(static_cast<Yn&&>(yn)...)
- { }
-
- template <typename ...Yn, typename = typename std::enable_if<
- detail::fast_and<BOOST_HANA_TT_IS_CONSTRUCTIBLE(Xn, Yn const&)...>::value
- >::type>
- constexpr tuple(tuple<Yn...> const& other)
- : tuple(detail::from_index_sequence_t{},
- std::make_index_sequence<sizeof...(Xn)>{},
- other.storage_)
- { }
-
- template <typename ...Yn, typename = typename std::enable_if<
- detail::fast_and<BOOST_HANA_TT_IS_CONSTRUCTIBLE(Xn, Yn&&)...>::value
- >::type>
- constexpr tuple(tuple<Yn...>&& other)
- : tuple(detail::from_index_sequence_t{},
- std::make_index_sequence<sizeof...(Xn)>{},
- static_cast<tuple<Yn...>&&>(other).storage_)
- { }
-
- // The three following constructors are required to make sure that
- // the tuple(Yn&&...) constructor is _not_ preferred over the copy
- // constructor for unary tuples containing a type that is constructible
- // from tuple<...>. See test/tuple/cnstr.trap.cpp
- template <typename ...dummy, typename = typename std::enable_if<
- detail::fast_and<BOOST_HANA_TT_IS_CONSTRUCTIBLE(Xn, Xn const&, dummy...)...>::value
- >::type>
- constexpr tuple(tuple const& other)
- : tuple(detail::from_index_sequence_t{},
- std::make_index_sequence<sizeof...(Xn)>{},
- other.storage_)
- { }
-
- template <typename ...dummy, typename = typename std::enable_if<
- detail::fast_and<BOOST_HANA_TT_IS_CONSTRUCTIBLE(Xn, Xn const&, dummy...)...>::value
- >::type>
- constexpr tuple(tuple& other)
- : tuple(const_cast<tuple const&>(other))
- { }
-
- template <typename ...dummy, typename = typename std::enable_if<
- detail::fast_and<BOOST_HANA_TT_IS_CONSTRUCTIBLE(Xn, Xn&&, dummy...)...>::value
- >::type>
- constexpr tuple(tuple&& other)
- : tuple(detail::from_index_sequence_t{},
- std::make_index_sequence<sizeof...(Xn)>{},
- static_cast<tuple&&>(other).storage_)
- { }
-
-
- template <typename ...Yn, typename = typename std::enable_if<
- detail::fast_and<BOOST_HANA_TT_IS_ASSIGNABLE(Xn&, Yn const&)...>::value
- >::type>
- constexpr tuple& operator=(tuple<Yn...> const& other) {
- detail::assign(this->storage_, other.storage_,
- std::make_index_sequence<sizeof...(Xn)>{});
- return *this;
- }
-
- template <typename ...Yn, typename = typename std::enable_if<
- detail::fast_and<BOOST_HANA_TT_IS_ASSIGNABLE(Xn&, Yn&&)...>::value
- >::type>
- constexpr tuple& operator=(tuple<Yn...>&& other) {
- detail::assign(this->storage_, static_cast<tuple<Yn...>&&>(other).storage_,
- std::make_index_sequence<sizeof...(Xn)>{});
- return *this;
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Operators
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <>
- struct comparable_operators<tuple_tag> {
- static constexpr bool value = true;
- };
- template <>
- struct orderable_operators<tuple_tag> {
- static constexpr bool value = true;
- };
- template <>
- struct monad_operators<tuple_tag> {
- static constexpr bool value = true;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // Foldable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct unpack_impl<tuple_tag> {
- template <typename F>
- static constexpr decltype(auto) apply(tuple<>&&, F&& f)
- { return static_cast<F&&>(f)(); }
- template <typename F>
- static constexpr decltype(auto) apply(tuple<>&, F&& f)
- { return static_cast<F&&>(f)(); }
- template <typename F>
- static constexpr decltype(auto) apply(tuple<> const&, F&& f)
- { return static_cast<F&&>(f)(); }
-
- template <typename Xs, typename F>
- static constexpr decltype(auto) apply(Xs&& xs, F&& f) {
- return hana::unpack(static_cast<Xs&&>(xs).storage_, static_cast<F&&>(f));
- }
- };
-
- template <>
- struct length_impl<tuple_tag> {
- template <typename ...Xs>
- static constexpr auto apply(tuple<Xs...> const&)
- { return hana::size_c<sizeof...(Xs)>; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Iterable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct at_impl<tuple_tag> {
- template <typename Xs, typename N>
- static constexpr decltype(auto) apply(Xs&& xs, N const&) {
- constexpr std::size_t index = N::value;
- return hana::at_c<index>(static_cast<Xs&&>(xs).storage_);
- }
- };
-
- template <>
- struct drop_front_impl<tuple_tag> {
- template <std::size_t N, typename Xs, std::size_t ...i>
- static constexpr auto helper(Xs&& xs, std::index_sequence<i...>) {
- return hana::make<tuple_tag>(hana::at_c<i+N>(static_cast<Xs&&>(xs))...);
- }
-
- template <typename Xs, typename N>
- static constexpr auto apply(Xs&& xs, N const&) {
- constexpr std::size_t len = decltype(hana::length(xs))::value;
- return helper<N::value>(static_cast<Xs&&>(xs), std::make_index_sequence<
- N::value < len ? len - N::value : 0
- >{});
- }
- };
-
- template <>
- struct is_empty_impl<tuple_tag> {
- template <typename ...Xs>
- static constexpr auto apply(tuple<Xs...> const&)
- { return hana::bool_c<sizeof...(Xs) == 0>; }
- };
-
- // compile-time optimizations (to reduce the # of function instantiations)
- template <std::size_t n, typename ...Xs>
- constexpr decltype(auto) at_c(tuple<Xs...> const& xs) {
- return hana::at_c<n>(xs.storage_);
- }
-
- template <std::size_t n, typename ...Xs>
- constexpr decltype(auto) at_c(tuple<Xs...>& xs) {
- return hana::at_c<n>(xs.storage_);
- }
-
- template <std::size_t n, typename ...Xs>
- constexpr decltype(auto) at_c(tuple<Xs...>&& xs) {
- return hana::at_c<n>(static_cast<tuple<Xs...>&&>(xs).storage_);
- }
-
- template <>
- struct index_if_impl<tuple_tag> {
- template <typename ...Xs, typename Pred>
- static constexpr auto apply(tuple<Xs...> const&, Pred const&)
- -> typename detail::index_if<Pred, Xs...>::type
- { return {}; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Sequence
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct Sequence<tuple_tag> {
- static constexpr bool value = true;
- };
-
- template <>
- struct make_impl<tuple_tag> {
- template <typename ...Xs>
- static constexpr
- tuple<typename detail::decay<Xs>::type...> apply(Xs&& ...xs)
- { return {static_cast<Xs&&>(xs)...}; }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_TUPLE_HPP
diff --git a/contrib/restricted/boost/boost/hana/type.hpp b/contrib/restricted/boost/boost/hana/type.hpp
deleted file mode 100644
index 80a498753f..0000000000
--- a/contrib/restricted/boost/boost/hana/type.hpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/*!
-@file
-Defines `boost::hana::type` and related utilities.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_TYPE_HPP
-#define BOOST_HANA_TYPE_HPP
-
-#include <boost/hana/fwd/type.hpp>
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/operators/adl.hpp>
-#include <boost/hana/detail/operators/comparable.hpp>
-#include <boost/hana/fwd/concept/metafunction.hpp>
-#include <boost/hana/fwd/core/make.hpp>
-#include <boost/hana/fwd/equal.hpp>
-#include <boost/hana/fwd/hash.hpp>
-#include <boost/hana/integral_constant.hpp>
-
-#include <type_traits>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //////////////////////////////////////////////////////////////////////////
- // basic_type
- //////////////////////////////////////////////////////////////////////////
- //! @cond
- template <typename T>
- struct basic_type : detail::operators::adl<basic_type<T>> {
- using hana_tag = type_tag;
-
- using type = T;
- constexpr auto operator+() const { return *this; }
- };
- //! @endcond
-
- //////////////////////////////////////////////////////////////////////////
- // type
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct type_impl {
- struct _ : basic_type<T> { };
- };
-
- //////////////////////////////////////////////////////////////////////////
- // decltype_
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <typename T, typename = type_tag>
- struct decltype_t {
- using type = typename std::remove_reference<T>::type;
- };
-
- template <typename T>
- struct decltype_t<T, typename hana::tag_of<T>::type> {
- using type = typename std::remove_reference<T>::type::type;
- };
- }
-
- //! @cond
- template <typename T>
- constexpr auto decltype_t::operator()(T&&) const
- { return hana::type_c<typename detail::decltype_t<T>::type>; }
- //! @endcond
-
- //////////////////////////////////////////////////////////////////////////
- // typeid_
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <typename T, typename = type_tag>
- struct typeid_t {
- using type = typename std::remove_cv<
- typename std::remove_reference<T>::type
- >::type;
- };
-
- template <typename T>
- struct typeid_t<T, typename hana::tag_of<T>::type> {
- using type = typename std::remove_reference<T>::type::type;
- };
- }
- //! @cond
- template <typename T>
- constexpr auto typeid_t::operator()(T&&) const
- { return hana::type_c<typename detail::typeid_t<T>::type>; }
- //! @endcond
-
- //////////////////////////////////////////////////////////////////////////
- // make<type_tag>
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct make_impl<type_tag> {
- template <typename T>
- static constexpr auto apply(T&& t)
- { return hana::typeid_(static_cast<T&&>(t)); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // sizeof_
- //////////////////////////////////////////////////////////////////////////
- //! @cond
- template <typename T>
- constexpr auto sizeof_t::operator()(T&&) const
- { return hana::size_c<sizeof(typename detail::decltype_t<T>::type)>; }
- //! @endcond
-
- //////////////////////////////////////////////////////////////////////////
- // alignof_
- //////////////////////////////////////////////////////////////////////////
- //! @cond
- template <typename T>
- constexpr auto alignof_t::operator()(T&&) const
- { return hana::size_c<alignof(typename detail::decltype_t<T>::type)>; }
- //! @endcond
-
- //////////////////////////////////////////////////////////////////////////
- // is_valid
- //////////////////////////////////////////////////////////////////////////
- namespace type_detail {
- template <typename F, typename ...Args, typename = decltype(
- std::declval<F&&>()(std::declval<Args&&>()...)
- )>
- constexpr auto is_valid_impl(int) { return hana::true_c; }
-
- template <typename F, typename ...Args>
- constexpr auto is_valid_impl(...) { return hana::false_c; }
-
- template <typename F>
- struct is_valid_fun {
- template <typename ...Args>
- constexpr auto operator()(Args&& ...) const
- { return is_valid_impl<F, Args&&...>(int{}); }
- };
- }
-
- //! @cond
- template <typename F>
- constexpr auto is_valid_t::operator()(F&&) const
- { return type_detail::is_valid_fun<F&&>{}; }
-
- template <typename F, typename ...Args>
- constexpr auto is_valid_t::operator()(F&&, Args&& ...) const
- { return type_detail::is_valid_impl<F&&, Args&&...>(int{}); }
- //! @endcond
-
- //////////////////////////////////////////////////////////////////////////
- // template_
- //////////////////////////////////////////////////////////////////////////
- template <template <typename ...> class F>
- struct template_t {
- template <typename ...T>
- struct apply {
- using type = F<T...>;
- };
-
- template <typename ...T>
- constexpr auto operator()(T const& ...) const
- { return hana::type<F<typename T::type...>>{}; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // metafunction
- //////////////////////////////////////////////////////////////////////////
- template <template <typename ...> class F>
- struct metafunction_t {
- template <typename ...T>
- using apply = F<T...>;
-
- template <typename ...T>
- constexpr hana::type<typename F<typename T::type...>::type>
- operator()(T const& ...) const { return {}; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Metafunction
- //////////////////////////////////////////////////////////////////////////
- template <template <typename ...> class F>
- struct Metafunction<template_t<F>> {
- static constexpr bool value = true;
- };
-
- template <template <typename ...> class F>
- struct Metafunction<metafunction_t<F>> {
- static constexpr bool value = true;
- };
-
- template <typename F>
- struct Metafunction<metafunction_class_t<F>> {
- static constexpr bool value = true;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // integral
- //////////////////////////////////////////////////////////////////////////
- template <typename F>
- struct integral_t {
- template <typename ...T>
- constexpr auto operator()(T const& ...) const {
- using Result = typename F::template apply<typename T::type...>::type;
- return Result{};
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Operators
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <>
- struct comparable_operators<type_tag> {
- static constexpr bool value = true;
- };
- }
-
- //////////////////////////////////////////////////////////////////////////
- // Comparable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct equal_impl<type_tag, type_tag> {
- template <typename T, typename U>
- static constexpr auto apply(basic_type<T> const&, basic_type<U> const&)
- { return hana::false_c; }
-
- template <typename T>
- static constexpr auto apply(basic_type<T> const&, basic_type<T> const&)
- { return hana::true_c; }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Hashable
- //////////////////////////////////////////////////////////////////////////
- template <>
- struct hash_impl<hana::type_tag> {
- template <typename T>
- static constexpr T apply(T const& t)
- { return t; }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_TYPE_HPP
diff --git a/contrib/restricted/boost/boost/hana/unfold_left.hpp b/contrib/restricted/boost/boost/hana/unfold_left.hpp
deleted file mode 100644
index d058ac06b2..0000000000
--- a/contrib/restricted/boost/boost/hana/unfold_left.hpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*!
-@file
-Defines `boost::hana::unfold_left`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_UNFOLD_LEFT_HPP
-#define BOOST_HANA_UNFOLD_LEFT_HPP
-
-#include <boost/hana/fwd/unfold_left.hpp>
-
-#include <boost/hana/append.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/empty.hpp>
-#include <boost/hana/first.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/optional.hpp>
-#include <boost/hana/second.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename S>
- struct unfold_left_t {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::unfold_left<S> requires 'S' to be a Sequence");
- #endif
-
- template <typename State, typename F>
- constexpr auto operator()(State&& state, F&& f) const {
- return unfold_left_impl<S>::apply(
- static_cast<State&&>(state),
- static_cast<F&&>(f)
- );
- }
- };
- //! @endcond
-
- template <typename S, bool condition>
- struct unfold_left_impl<S, when<condition>> : default_ {
- struct unfold_left_helper {
- template <typename F, typename P>
- constexpr auto operator()(F&& f, P&& p) const {
- return hana::append(
- unfold_left_impl::apply(
- hana::first(static_cast<P&&>(p)),
- static_cast<F&&>(f)
- ),
- hana::second(static_cast<P&&>(p))
- );
- }
- };
-
- template <typename Init, typename F>
- static constexpr auto apply(Init&& init, F&& f) {
- decltype(auto) elt = f(static_cast<Init&&>(init));
- return hana::maybe(empty<S>(),
- hana::partial(unfold_left_helper{}, static_cast<F&&>(f)),
- static_cast<decltype(elt)&&>(elt)
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_UNFOLD_LEFT_HPP
diff --git a/contrib/restricted/boost/boost/hana/unfold_right.hpp b/contrib/restricted/boost/boost/hana/unfold_right.hpp
deleted file mode 100644
index f9917bd7e1..0000000000
--- a/contrib/restricted/boost/boost/hana/unfold_right.hpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*!
-@file
-Defines `boost::hana::unfold_right`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_UNFOLD_RIGHT_HPP
-#define BOOST_HANA_UNFOLD_RIGHT_HPP
-
-#include <boost/hana/fwd/unfold_right.hpp>
-
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/empty.hpp>
-#include <boost/hana/first.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/optional.hpp>
-#include <boost/hana/prepend.hpp>
-#include <boost/hana/second.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename S>
- struct unfold_right_t {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::unfold_right<S> requires 'S' to be a Sequence");
- #endif
-
- template <typename State, typename F>
- constexpr auto operator()(State&& state, F&& f) const {
- return unfold_right_impl<S>::apply(
- static_cast<State&&>(state),
- static_cast<F&&>(f)
- );
- }
- };
- //! @endcond
-
- template <typename S, bool condition>
- struct unfold_right_impl<S, when<condition>> : default_ {
- struct unfold_right_helper {
- template <typename F, typename P>
- constexpr auto operator()(F&& f, P&& p) const {
- return hana::prepend(
- unfold_right_impl::apply(
- hana::second(static_cast<P&&>(p)),
- static_cast<F&&>(f)
- ),
- hana::first(static_cast<P&&>(p))
- );
- }
- };
-
- template <typename Init, typename F>
- static constexpr auto apply(Init&& init, F&& f) {
- decltype(auto) elt = f(static_cast<Init&&>(init));
- return hana::maybe(hana::empty<S>(),
- hana::partial(unfold_right_helper{}, static_cast<F&&>(f)),
- static_cast<decltype(elt)&&>(elt)
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_UNFOLD_RIGHT_HPP
diff --git a/contrib/restricted/boost/boost/hana/union.hpp b/contrib/restricted/boost/boost/hana/union.hpp
deleted file mode 100644
index d7bb4403bf..0000000000
--- a/contrib/restricted/boost/boost/hana/union.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/*!
-@file
-Defines `boost::hana::union`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_UNION_HPP
-#define BOOST_HANA_UNION_HPP
-
-#include <boost/hana/fwd/union.hpp>
-
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename Ys>
- constexpr auto union_t::operator()(Xs&& xs, Ys&& ys) const {
- using S = typename hana::tag_of<Xs>::type;
- using Union = BOOST_HANA_DISPATCH_IF(union_impl<S>,
- true
- );
-
- return Union::apply(static_cast<Xs&&>(xs), static_cast<Ys&&>(ys));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct union_impl<S, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_UNION_HPP
diff --git a/contrib/restricted/boost/boost/hana/unique.hpp b/contrib/restricted/boost/boost/hana/unique.hpp
deleted file mode 100644
index 9485c332f0..0000000000
--- a/contrib/restricted/boost/boost/hana/unique.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/*!
-@file
-Defines `boost::hana::unique`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_UNIQUE_HPP
-#define BOOST_HANA_UNIQUE_HPP
-
-#include <boost/hana/fwd/unique.hpp>
-
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/nested_by.hpp> // required by fwd decl
-#include <boost/hana/equal.hpp>
-#include <boost/hana/front.hpp>
-#include <boost/hana/group.hpp>
-#include <boost/hana/transform.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs>
- constexpr auto unique_t::operator()(Xs&& xs) const {
- using S = typename hana::tag_of<Xs>::type;
- using Unique = BOOST_HANA_DISPATCH_IF(unique_impl<S>,
- hana::Sequence<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::unique(xs) requires 'xs' to be a Sequence");
- #endif
-
- return Unique::apply(static_cast<Xs&&>(xs));
- }
-
- template <typename Xs, typename Predicate>
- constexpr auto unique_t::operator()(Xs&& xs, Predicate&& predicate) const {
- using S = typename hana::tag_of<Xs>::type;
- using Unique = BOOST_HANA_DISPATCH_IF(unique_impl<S>,
- hana::Sequence<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Sequence<S>::value,
- "hana::unique(xs, predicate) requires 'xs' to be a Sequence");
- #endif
-
- return Unique::apply(static_cast<Xs&&>(xs),
- static_cast<Predicate&&>(predicate));
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct unique_impl<S, when<condition>> : default_ {
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&& pred) {
- return hana::transform(
- hana::group(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred)),
- hana::front
- );
- }
-
- template <typename Xs>
- static constexpr auto apply(Xs&& xs)
- { return unique_impl::apply(static_cast<Xs&&>(xs), hana::equal); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_UNIQUE_HPP
diff --git a/contrib/restricted/boost/boost/hana/unpack.hpp b/contrib/restricted/boost/boost/hana/unpack.hpp
deleted file mode 100644
index 485821ea7a..0000000000
--- a/contrib/restricted/boost/boost/hana/unpack.hpp
+++ /dev/null
@@ -1,141 +0,0 @@
-/*!
-@file
-Defines `boost::hana::unpack`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_UNPACK_HPP
-#define BOOST_HANA_UNPACK_HPP
-
-#include <boost/hana/fwd/unpack.hpp>
-
-#include <boost/hana/accessors.hpp>
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/foldable.hpp>
-#include <boost/hana/concept/iterable.hpp>
-#include <boost/hana/concept/struct.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/first.hpp>
-#include <boost/hana/functional/partial.hpp>
-#include <boost/hana/fwd/fold_left.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/pair.hpp>
-#include <boost/hana/second.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename F>
- constexpr decltype(auto) unpack_t::operator()(Xs&& xs, F&& f) const {
- using S = typename hana::tag_of<Xs>::type;
- using Unpack = BOOST_HANA_DISPATCH_IF(unpack_impl<S>,
- hana::Foldable<S>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Foldable<S>::value,
- "hana::unpack(xs, f) requires 'xs' to be Foldable");
- #endif
-
- return Unpack::apply(static_cast<Xs&&>(xs), static_cast<F&&>(f));
- }
- //! @endcond
-
- template <typename T, bool condition>
- struct unpack_impl<T, when<condition>> : default_ {
- template <typename Xs, typename F>
- static constexpr decltype(auto) apply(Xs&& xs, F&& f) {
- return hana::fold_left(static_cast<Xs&&>(xs),
- static_cast<F&&>(f),
- hana::partial)();
- }
- };
-
- template <typename It>
- struct unpack_impl<It, when<
- hana::Iterable<It>::value && !is_default<length_impl<It>>::value
- >> {
- template <typename Xs, typename F, std::size_t ...i>
- static constexpr decltype(auto)
- unpack_helper(Xs&& xs, F&& f, std::index_sequence<i...>) {
- return static_cast<F&&>(f)(hana::at_c<i>(static_cast<Xs&&>(xs))...);
- }
-
- template <typename Xs, typename F>
- static constexpr decltype(auto) apply(Xs&& xs, F&& f) {
- constexpr std::size_t N = decltype(hana::length(xs))::value;
- return unpack_helper(static_cast<Xs&&>(xs), static_cast<F&&>(f),
- std::make_index_sequence<N>{});
- }
- };
-
- template <typename T, std::size_t N>
- struct unpack_impl<T[N]> {
- template <typename Xs, typename F, std::size_t ...i>
- static constexpr decltype(auto)
- unpack_helper(Xs&& xs, F&& f, std::index_sequence<i...>) {
- return static_cast<F&&>(f)(static_cast<Xs&&>(xs)[i]...);
- }
-
- template <typename Xs, typename F>
- static constexpr decltype(auto) apply(Xs&& xs, F&& f) {
- return unpack_impl::unpack_helper(static_cast<Xs&&>(xs),
- static_cast<F&&>(f),
- std::make_index_sequence<N>{});
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for Products
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct unpack_impl<T, when<hana::Product<T>::value>> {
- template <typename P, typename F>
- static constexpr decltype(auto) apply(P&& p, F&& f) {
- return static_cast<F&&>(f)(
- hana::first(static_cast<P&&>(p)),
- hana::second(static_cast<P&&>(p))
- );
- }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for Structs
- //////////////////////////////////////////////////////////////////////////
- namespace struct_detail {
- // This is equivalent to `demux`, except that `demux` can't forward
- // the `udt` because it does not know the `g`s are accessors. Hence,
- // this can result in faster code.
- struct almost_demux {
- template <typename F, typename Udt, typename ...Members>
- constexpr decltype(auto)
- operator()(F&& f, Udt&& udt, Members&& ...g) const {
- return static_cast<F&&>(f)(hana::make_pair(
- hana::first(static_cast<Members&&>(g)),
- hana::second(static_cast<Members&&>(g))
- (static_cast<Udt&&>(udt))
- )...);
- }
- };
- }
-
- template <typename S>
- struct unpack_impl<S, when<hana::Struct<S>::value>> {
- template <typename Udt, typename F>
- static constexpr decltype(auto) apply(Udt&& udt, F&& f) {
- return hana::unpack(hana::accessors<S>(),
- hana::partial(struct_detail::almost_demux{},
- static_cast<F&&>(f),
- static_cast<Udt&&>(udt)));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_UNPACK_HPP
diff --git a/contrib/restricted/boost/boost/hana/value.hpp b/contrib/restricted/boost/boost/hana/value.hpp
deleted file mode 100644
index 52d0581853..0000000000
--- a/contrib/restricted/boost/boost/hana/value.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/*!
-@file
-Defines `boost::hana::value`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_VALUE_HPP
-#define BOOST_HANA_VALUE_HPP
-
-#include <boost/hana/fwd/value.hpp>
-
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/integral_constant.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename C, bool condition>
- struct value_impl<C, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...args) = delete;
- };
-
- template <typename T>
- constexpr decltype(auto) value() {
- using RawT = typename std::remove_cv<
- typename std::remove_reference<T>::type
- >::type;
- using C = typename hana::tag_of<RawT>::type;
- using Value = BOOST_HANA_DISPATCH_IF(
- value_impl<C>, hana::Constant<C>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Constant<C>::value,
- "hana::value<T>() requires 'T' to be a Constant");
- #endif
-
- return Value::template apply<RawT>();
- }
-
- template <typename I>
- struct value_impl<I, when<hana::IntegralConstant<I>::value>> {
- template <typename C>
- static constexpr auto apply()
- { return C::value; }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_VALUE_HPP
diff --git a/contrib/restricted/boost/boost/hana/version.hpp b/contrib/restricted/boost/boost/hana/version.hpp
deleted file mode 100644
index 70ba6fd9a1..0000000000
--- a/contrib/restricted/boost/boost/hana/version.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/*!
-@file
-Defines macros for tracking the version of the library.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_VERSION_HPP
-#define BOOST_HANA_VERSION_HPP
-
-//! @internal
-//! Transforms a (version, revision, patchlevel) triple into a number of the
-//! form 0xVVRRPPPP to allow comparing versions in a normalized way.
-//!
-//! See http://sourceforge.net/p/predef/wiki/VersionNormalization.
-#define BOOST_HANA_CONFIG_VERSION(version, revision, patch) \
- (((version) << 24) + ((revision) << 16) + (patch))
-
-//! @ingroup group-config
-//! Macro expanding to the major version of the library, i.e. the `x` in `x.y.z`.
-#define BOOST_HANA_MAJOR_VERSION 1
-
-//! @ingroup group-config
-//! Macro expanding to the minor version of the library, i.e. the `y` in `x.y.z`.
-#define BOOST_HANA_MINOR_VERSION 4
-
-//! @ingroup group-config
-//! Macro expanding to the patch level of the library, i.e. the `z` in `x.y.z`.
-#define BOOST_HANA_PATCH_VERSION 0
-
-//! @ingroup group-config
-//! Macro expanding to the full version of the library, in hexadecimal
-//! representation.
-//!
-//! Specifically, `BOOST_HANA_VERSION` expands to an hexadecimal number of the
-//! form 0xVVRRPPPP, where `VV` is the major version of the library, `RR` is
-//! the minor version and `PPPP` is the patch level. This allows the version
-//! of the library to be compared:
-//! @snippet example/version.cpp main
-//!
-//!
-//! @note
-//! The major, minor and patch versions of the library are also available
-//! individually with the `BOOST_HANA_{MAJOR,MINOR,PATCH}_VERSION` macros.
-#define BOOST_HANA_VERSION \
- BOOST_HANA_CONFIG_VERSION(BOOST_HANA_MAJOR_VERSION, \
- BOOST_HANA_MINOR_VERSION, \
- BOOST_HANA_PATCH_VERSION) \
-/**/
-
-#endif // !BOOST_HANA_VERSION_HPP
diff --git a/contrib/restricted/boost/boost/hana/while.hpp b/contrib/restricted/boost/boost/hana/while.hpp
deleted file mode 100644
index 312494daf5..0000000000
--- a/contrib/restricted/boost/boost/hana/while.hpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/*!
-@file
-Defines `boost::hana::while_`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_WHILE_HPP
-#define BOOST_HANA_WHILE_HPP
-
-#include <boost/hana/fwd/while.hpp>
-
-#include <boost/hana/bool.hpp>
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/logical.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/canonical_constant.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Pred, typename State, typename F>
- constexpr decltype(auto) while_t::operator()(Pred&& pred, State&& state, F&& f) const {
- using Cond = decltype(pred(state));
- using Bool = typename hana::tag_of<Cond>::type;
- using While = BOOST_HANA_DISPATCH_IF(while_impl<Bool>,
- hana::Logical<Bool>::value
- );
-
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Logical<Bool>::value,
- "hana::while_(pred, state, f) requires 'pred(state)' to be a Logical");
- #endif
-
- return While::apply(static_cast<Pred&&>(pred),
- static_cast<State&&>(state),
- static_cast<F&&>(f));
- }
- //! @endcond
-
- template <typename L, bool condition>
- struct while_impl<L, hana::when<condition>> : hana::default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- template <typename L>
- struct while_impl<L, hana::when<std::is_arithmetic<L>::value>> {
- template <typename Pred, typename State, typename F>
- static auto apply(Pred&& pred, State&& state, F&& f)
- -> decltype(
- true ? f(static_cast<State&&>(state))
- : static_cast<State&&>(state)
- )
- {
- if (pred(state)) {
- decltype(auto) r = f(static_cast<State&&>(state));
- return hana::while_(static_cast<Pred&&>(pred),
- static_cast<decltype(r)&&>(r),
- static_cast<F&&>(f));
- }
- else {
- return static_cast<State&&>(state);
- }
- }
- };
-
- template <typename C>
- struct while_impl<C, hana::when<
- hana::Constant<C>::value &&
- hana::Logical<typename C::value_type>::value
- >> {
- template <typename Pred, typename State, typename F>
- static constexpr State
- while_helper(hana::false_, Pred&&, State&& state, F&&) {
- return static_cast<State&&>(state);
- }
-
- template <typename Pred, typename State, typename F>
- static constexpr decltype(auto)
- while_helper(hana::true_, Pred&& pred, State&& state, F&& f) {
- decltype(auto) r = f(static_cast<State&&>(state));
- return hana::while_(static_cast<Pred&&>(pred),
- static_cast<decltype(r)&&>(r),
- static_cast<F&&>(f));
- }
-
- template <typename Pred, typename State, typename F>
- static constexpr decltype(auto)
- apply(Pred&& pred, State&& state, F&& f) {
- // Since `pred(state)` returns a `Constant`, we do not actually
- // need to call it; we only need its decltype. However, we still
- // call it to run potential side effects. I'm not sure whether
- // that is desirable, since we pretty much take for granted that
- // functions are pure, but we'll do it like this for now. Also, I
- // think there is something rather deep hidden behind this, and
- // understanding what must be done here should give us a better
- // understanding of something non-trivial.
- auto cond_ = pred(state);
- constexpr auto cond = hana::value(cond_);
- constexpr bool truth_value = hana::if_(cond, true, false);
- return while_helper(hana::bool_c<truth_value>,
- static_cast<Pred&&>(pred),
- static_cast<State&&>(state),
- static_cast<F&&>(f));
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_WHILE_HPP
diff --git a/contrib/restricted/boost/boost/hana/zero.hpp b/contrib/restricted/boost/boost/hana/zero.hpp
deleted file mode 100644
index baba9691f6..0000000000
--- a/contrib/restricted/boost/boost/hana/zero.hpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/*!
-@file
-Defines `boost::hana::zero`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ZERO_HPP
-#define BOOST_HANA_ZERO_HPP
-
-#include <boost/hana/fwd/zero.hpp>
-
-#include <boost/hana/concept/constant.hpp>
-#include <boost/hana/concept/monoid.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/to.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/canonical_constant.hpp>
-
-#include <type_traits>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- template <typename M>
- struct zero_t {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(hana::Monoid<M>::value,
- "hana::zero<M>() requires 'M' to be a Monoid");
- #endif
-
- constexpr decltype(auto) operator()() const {
- using Zero = BOOST_HANA_DISPATCH_IF(zero_impl<M>,
- hana::Monoid<M>::value
- );
-
- return Zero::apply();
- }
- };
-
- template <typename M, bool condition>
- struct zero_impl<M, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for non-boolean arithmetic data types
- //////////////////////////////////////////////////////////////////////////
- template <typename T>
- struct zero_impl<T, when<
- std::is_arithmetic<T>::value &&
- !std::is_same<T, bool>::value
- >> {
- static constexpr T apply()
- { return static_cast<T>(0); }
- };
-
- //////////////////////////////////////////////////////////////////////////
- // Model for Constants over a Monoid
- //////////////////////////////////////////////////////////////////////////
- namespace detail {
- template <typename C>
- struct constant_from_zero {
- static constexpr auto value = hana::zero<typename C::value_type>();
- using hana_tag = detail::CanonicalConstant<typename C::value_type>;
- };
- }
-
- template <typename C>
- struct zero_impl<C, when<
- hana::Constant<C>::value &&
- Monoid<typename C::value_type>::value
- >> {
- static constexpr decltype(auto) apply()
- { return hana::to<C>(detail::constant_from_zero<C>{}); }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_ZERO_HPP
diff --git a/contrib/restricted/boost/boost/hana/zip.hpp b/contrib/restricted/boost/boost/hana/zip.hpp
deleted file mode 100644
index d18f3ef5e7..0000000000
--- a/contrib/restricted/boost/boost/hana/zip.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*!
-@file
-Defines `boost::hana::zip`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ZIP_HPP
-#define BOOST_HANA_ZIP_HPP
-
-#include <boost/hana/fwd/zip.hpp>
-
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/fast_and.hpp>
-#include <boost/hana/tuple.hpp>
-#include <boost/hana/zip_with.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename ...Ys>
- constexpr auto zip_t::operator()(Xs&& xs, Ys&& ...ys) const {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(detail::fast_and<
- hana::Sequence<Xs>::value, hana::Sequence<Ys>::value...
- >::value,
- "hana::zip(xs, ys...) requires 'xs' and 'ys...' to be Sequences");
- #endif
-
- return zip_impl<typename hana::tag_of<Xs>::type>::apply(
- static_cast<Xs&&>(xs),
- static_cast<Ys&&>(ys)...
- );
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct zip_impl<S, when<condition>> : default_ {
- template <typename ...Xs>
- static constexpr decltype(auto) apply(Xs&& ...xs) {
- return hana::zip_with(hana::make_tuple, static_cast<Xs&&>(xs)...);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_ZIP_HPP
diff --git a/contrib/restricted/boost/boost/hana/zip_shortest.hpp b/contrib/restricted/boost/boost/hana/zip_shortest.hpp
deleted file mode 100644
index 761ca188c5..0000000000
--- a/contrib/restricted/boost/boost/hana/zip_shortest.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*!
-@file
-Defines `boost::hana::zip_shortest`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ZIP_SHORTEST_HPP
-#define BOOST_HANA_ZIP_SHORTEST_HPP
-
-#include <boost/hana/fwd/zip_shortest.hpp>
-
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/detail/fast_and.hpp>
-#include <boost/hana/tuple.hpp>
-#include <boost/hana/zip_shortest_with.hpp>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename Xs, typename ...Ys>
- constexpr auto zip_shortest_t::operator()(Xs&& xs, Ys&& ...ys) const {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(detail::fast_and<
- hana::Sequence<Xs>::value, hana::Sequence<Ys>::value...
- >::value,
- "hana::zip_shortest(xs, ys...) requires 'xs' and 'ys...' to be Sequences");
- #endif
-
- return zip_shortest_impl<typename hana::tag_of<Xs>::type>::apply(
- static_cast<Xs&&>(xs),
- static_cast<Ys&&>(ys)...
- );
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct zip_shortest_impl<S, when<condition>> : default_ {
- template <typename ...Xs>
- static constexpr decltype(auto) apply(Xs&& ...xs) {
- return hana::zip_shortest_with(hana::make_tuple,
- static_cast<Xs&&>(xs)...);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_ZIP_SHORTEST_HPP
diff --git a/contrib/restricted/boost/boost/hana/zip_shortest_with.hpp b/contrib/restricted/boost/boost/hana/zip_shortest_with.hpp
deleted file mode 100644
index fc43f35239..0000000000
--- a/contrib/restricted/boost/boost/hana/zip_shortest_with.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/*!
-@file
-Defines `boost::hana::zip_shortest_with`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ZIP_SHORTEST_WITH_HPP
-#define BOOST_HANA_ZIP_SHORTEST_WITH_HPP
-
-#include <boost/hana/fwd/zip_shortest_with.hpp>
-
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/detail/algorithm.hpp>
-#include <boost/hana/detail/fast_and.hpp>
-#include <boost/hana/integral_constant.hpp>
-#include <boost/hana/length.hpp>
-#include <boost/hana/take_front.hpp>
-#include <boost/hana/zip_with.hpp>
-
-#include <cstddef>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename F, typename Xs, typename ...Ys>
- constexpr auto
- zip_shortest_with_t::operator()(F&& f, Xs&& xs, Ys&& ...ys) const {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(detail::fast_and<
- hana::Sequence<Xs>::value, hana::Sequence<Ys>::value...
- >::value,
- "hana::zip_shortest_with(f, xs, ys...) requires 'xs' and 'ys...' to be Sequences");
- #endif
-
- return zip_shortest_with_impl<typename hana::tag_of<Xs>::type>::apply(
- static_cast<F&&>(f),
- static_cast<Xs&&>(xs),
- static_cast<Ys&&>(ys)...
- );
- }
- //! @endcond
-
- template <typename S, bool condition>
- struct zip_shortest_with_impl<S, when<condition>> : default_ {
- template <typename F, typename ...Xs>
- static constexpr decltype(auto) apply(F&& f, Xs&& ...xs) {
- constexpr std::size_t lengths[] = {
- decltype(hana::length(xs))::value...
- };
- constexpr std::size_t min_len =
- *detail::min_element(lengths, lengths + sizeof...(xs));
- return hana::zip_with(static_cast<F&&>(f),
- hana::take_front(static_cast<Xs&&>(xs), hana::size_c<min_len>)...
- );
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_ZIP_SHORTEST_WITH_HPP
diff --git a/contrib/restricted/boost/boost/hana/zip_with.hpp b/contrib/restricted/boost/boost/hana/zip_with.hpp
deleted file mode 100644
index 8a5e153fe0..0000000000
--- a/contrib/restricted/boost/boost/hana/zip_with.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/*!
-@file
-Defines `boost::hana::zip_with`.
-
-@copyright Louis Dionne 2013-2017
-Distributed under the Boost Software License, Version 1.0.
-(See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
-
-#ifndef BOOST_HANA_ZIP_WITH_HPP
-#define BOOST_HANA_ZIP_WITH_HPP
-
-#include <boost/hana/fwd/zip_with.hpp>
-
-#include <boost/hana/at.hpp>
-#include <boost/hana/concept/sequence.hpp>
-#include <boost/hana/config.hpp>
-#include <boost/hana/core/dispatch.hpp>
-#include <boost/hana/core/make.hpp>
-#include <boost/hana/detail/fast_and.hpp>
-#include <boost/hana/length.hpp>
-
-#include <cstddef>
-#include <utility>
-
-
-BOOST_HANA_NAMESPACE_BEGIN
- //! @cond
- template <typename F, typename Xs, typename ...Ys>
- constexpr auto zip_with_t::operator()(F&& f, Xs&& xs, Ys&& ...ys) const {
- #ifndef BOOST_HANA_CONFIG_DISABLE_CONCEPT_CHECKS
- static_assert(detail::fast_and<
- hana::Sequence<Xs>::value, hana::Sequence<Ys>::value...
- >::value,
- "hana::zip_with(f, xs, ys...) requires 'xs' and 'ys...' to be Sequences");
- #endif
-
- return zip_with_impl<typename hana::tag_of<Xs>::type>::apply(
- static_cast<F&&>(f),
- static_cast<Xs&&>(xs),
- static_cast<Ys&&>(ys)...
- );
- }
- //! @endcond
-
- template <typename S>
- struct zip_with_impl<S, when<Sequence<S>::value>> {
- template <std::size_t N, typename F, typename ...Xs>
- static constexpr decltype(auto) transverse(F&& f, Xs&& ...xs) {
- return static_cast<F&&>(f)(hana::at_c<N>(static_cast<Xs&&>(xs))...);
- }
-
- template <std::size_t ...N, typename F, typename ...Xs>
- static constexpr auto
- zip_helper(std::index_sequence<N...>, F&& f, Xs&& ...xs) {
- return hana::make<S>(transverse<N>(f, xs...)...);
- }
-
- template <typename F, typename X, typename ...Xs>
- static constexpr auto
- apply(F&& f, X&& x, Xs&& ...xs) {
- constexpr std::size_t N = decltype(hana::length(x))::value;
- return zip_helper(std::make_index_sequence<N>{},
- static_cast<F&&>(f),
- static_cast<X&&>(x), static_cast<Xs&&>(xs)...);
- }
- };
-BOOST_HANA_NAMESPACE_END
-
-#endif // !BOOST_HANA_ZIP_WITH_HPP
diff --git a/contrib/restricted/boost/hana/CONTRIBUTING.md b/contrib/restricted/boost/hana/CONTRIBUTING.md
new file mode 100644
index 0000000000..403fae5c60
--- /dev/null
+++ b/contrib/restricted/boost/hana/CONTRIBUTING.md
@@ -0,0 +1,60 @@
+# How to contribute
+
+Contributions are always very much appreciated. However, to make sure the
+process of accepting patches goes smoothly for everyone (especially for
+the maintainer), you should try to follow these few simple guidelines when
+you contribute:
+
+1. Fork the repository.
+2. Create a new branch based on the `develop` branch (`git checkout -b your_branch develop`).
+ If your contribution is a bug fix, you should name your branch `bugfix/xxx`;
+ for a feature, it should be `feature/xxx`. Otherwise, just use your good
+ judgment. Consistent naming of branches is appreciated since it makes the
+ output of `git branch` easier to understand with a single glance.
+3. Do your modifications on that branch. Except for special cases, your
+ contribution should include proper unit tests and documentation. Also,
+ please try to follow the style guide below.
+4. Make sure your modifications did not break anything by building and
+ running the tests:
+
+ ```shell
+ make check
+ ```
+5. Commit your changes. Your commit message should start with a one line
+ short description of the modifications, with the details and explanations
+ of your modifications following in subsequent paragraphs or bullet points.
+ Please limit your lines to about 78 characters in commit messages, since
+ it makes the output easier to read in `git log`. Also, starting your commit
+ message with a tag describing the nature of the commit is nice, since it
+ makes the commit history easier to skim through. For commits that do not
+ change any functionality (e.g. refactoring or fixing typos), the `[NFC]`
+ tag (No Functionality Change) can be used. Here's an example of an
+ acceptable commit message:
+ ```
+ [Searchable] Refactor the interface
+
+ - Rename elem to contains
+ - Rename subset to is_subset, and make is_subset applicable in infix notation
+ - Add the at_key method
+ - operator[] is now bound to at_key instead of find
+ ```
+ When applicable, please squash adjacent _wip_ commits into a single
+ _logical_ commit. If your contribution has several logical commits,
+ it's fine.
+6. Push the changes to your fork (`git push origin your_branch`).
+7. Open a pull request against Hana's `develop` branch (not against `master`).
+ I will do my best to respond in a timely manner. I might discuss your patch
+ and suggest some modifications, or I might amend your patch myself and ask
+ you for feedback. You will always be given proper credit.
+
+
+## Style guide
+
+I'm not going to write an exhaustive style guide, but here are a couple of
+points you should watch out for:
+- Indent using 4 spaces.
+- Do not leave trailing white spaces at the end of lines, and no more than a
+ single newline at the end of a source file.
+- Hana's `#include`s go first, then a blank line and system headers.
+ `#include`s within each block should be sorted in alphabetical order.
+- Use your own judgment and stick to the style of the surrounding code.
diff --git a/contrib/restricted/boost/hana/LICENSE.md b/contrib/restricted/boost/hana/LICENSE.md
new file mode 100644
index 0000000000..8639127154
--- /dev/null
+++ b/contrib/restricted/boost/hana/LICENSE.md
@@ -0,0 +1,25 @@
+Copyright Louis Dionne 2013-2017
+
+Boost Software License - Version 1.0 - August 17th, 2003
+
+Permission is hereby granted, free of charge, to any person or organization
+obtaining a copy of the software and accompanying documentation covered by
+this license (the "Software") to use, reproduce, display, distribute,
+execute, and transmit the Software, and to prepare derivative works of the
+Software, and to permit third-parties to whom the Software is furnished to
+do so, all subject to the following:
+
+The copyright notices in the Software and this entire statement, including
+the above license grant, this restriction and the following disclaimer,
+must be included in all copies of the Software, in whole or in part, and
+all derivative works of the Software, unless such copies or derivative
+works are solely in the form of machine-executable object code generated by
+a source language processor.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
+SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
+FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/contrib/restricted/boost/hana/README.md b/contrib/restricted/boost/hana/README.md
new file mode 100644
index 0000000000..b4ef11bb35
--- /dev/null
+++ b/contrib/restricted/boost/hana/README.md
@@ -0,0 +1,202 @@
+# Boost.Hana <a target="_blank" href="http://semver.org">![Version][badge.version]</a> <a target="_blank" href="https://travis-ci.org/boostorg/hana">![Travis status][badge.Travis]</a> <a target="_blank" href="https://ci.appveyor.com/project/ldionne/hana">![Appveyor status][badge.Appveyor]</a> <a target="_blank" href="http://melpon.org/wandbox/permlink/g4ozIK33ITDtyGa3">![Try it online][badge.wandbox]</a> <a target="_blank" href="https://gitter.im/boostorg/hana">![Gitter Chat][badge.Gitter]</a>
+
+> Your standard library for metaprogramming
+
+## Overview
+<!-- Important: keep this in sync with example/overview.cpp -->
+```cpp
+#include <boost/hana.hpp>
+#include <cassert>
+#include <string>
+namespace hana = boost::hana;
+using namespace hana::literals;
+
+struct Fish { std::string name; };
+struct Cat { std::string name; };
+struct Dog { std::string name; };
+
+int main() {
+ // Sequences capable of holding heterogeneous objects, and algorithms
+ // to manipulate them.
+ auto animals = hana::make_tuple(Fish{"Nemo"}, Cat{"Garfield"}, Dog{"Snoopy"});
+ auto names = hana::transform(animals, [](auto a) {
+ return a.name;
+ });
+ assert(hana::reverse(names) == hana::make_tuple("Snoopy", "Garfield", "Nemo"));
+
+ // No compile-time information is lost: even if `animals` can't be a
+ // constant expression because it contains strings, its length is constexpr.
+ static_assert(hana::length(animals) == 3u, "");
+
+ // Computations on types can be performed with the same syntax as that of
+ // normal C++. Believe it or not, everything is done at compile-time.
+ auto animal_types = hana::make_tuple(hana::type_c<Fish*>, hana::type_c<Cat&>, hana::type_c<Dog*>);
+ auto animal_ptrs = hana::filter(animal_types, [](auto a) {
+ return hana::traits::is_pointer(a);
+ });
+ static_assert(animal_ptrs == hana::make_tuple(hana::type_c<Fish*>, hana::type_c<Dog*>), "");
+
+ // And many other goodies to make your life easier, including:
+ // 1. Access to elements in a tuple with a sane syntax.
+ static_assert(animal_ptrs[0_c] == hana::type_c<Fish*>, "");
+ static_assert(animal_ptrs[1_c] == hana::type_c<Dog*>, "");
+
+ // 2. Unroll loops at compile-time without hassle.
+ std::string s;
+ hana::int_c<10>.times([&]{ s += "x"; });
+ // equivalent to s += "x"; s += "x"; ... s += "x";
+
+ // 3. Easily check whether an expression is valid.
+ // This is usually achieved with complex SFINAE-based tricks.
+ auto has_name = hana::is_valid([](auto&& x) -> decltype((void)x.name) { });
+ static_assert(has_name(animals[0_c]), "");
+ static_assert(!has_name(1), "");
+}
+```
+
+
+## Documentation
+You can browse the documentation online at http://boostorg.github.io/hana.
+The documentation covers everything you should need including installing the
+library, a tutorial explaining what Hana is and how to use it, and an extensive
+reference section with examples. The remainder of this README is mostly for
+people that wish to work on the library itself, not for its users.
+
+An offline copy of the documentation can be obtained by checking out the
+`gh-pages` branch. To avoid overwriting the current directory, you can clone
+the `gh-pages` branch into a subdirectory like `doc/html`:
+```shell
+git clone http://github.com/boostorg/hana --branch=gh-pages --depth=1 doc/html
+```
+
+After issuing this, `doc/html` will contain exactly the same static website
+that is [available online][Hana.docs]. Note that `doc/html` is automatically
+ignored by Git so updating the documentation won't pollute your index.
+
+
+## Hacking on Hana
+Setting yourself up to work on Hana is easy. First, you will need an
+installation of [CMake][]. Once this is done, you can `cd` to the root
+of the project and setup the build directory:
+```shell
+mkdir build
+cd build
+cmake ..
+```
+
+Usually, you'll want to specify a custom compiler because the system's
+compiler is too old:
+```shell
+cmake .. -DCMAKE_CXX_COMPILER=/path/to/compiler
+```
+
+Usually, this will work just fine. However, on some systems, the standard
+library and/or compiler provided by default does not support C++14. If
+this is your case, the [wiki][Hana.wiki] has more information about
+setting you up on different systems.
+
+Normally, Hana tries to find Boost headers if you have them on your system.
+It's also fine if you don't have them; a few tests requiring the Boost headers
+will be disabled in that case. However, if you'd like Hana to use a custom
+installation of Boost, you can specify the path to this custom installation:
+```shell
+cmake .. -DCMAKE_CXX_COMPILER=/path/to/compiler -DBOOST_ROOT=/path/to/boost
+```
+
+You can now build and run the unit tests and the examples:
+```shell
+cmake --build . --target check
+```
+
+You should be aware that compiling the unit tests is pretty time and RAM
+consuming, especially the tests for external adapters. This is due to the
+fact that Hana's unit tests are very thorough, and also that heterogeneous
+sequences in other libraries tend to have horrible compile-time performance.
+
+There are also optional targets which are enabled only when the required
+software is available on your computer. For example, generating the
+documentation requires [Doxygen][] to be installed. An informative message
+will be printed during the CMake generation step whenever an optional target
+is disabled. You can install any missing software and then re-run the CMake
+generation to update the list of available targets.
+
+> #### Tip
+> You can use the `help` target to get a list of all the available targets.
+
+If you want to add unit tests or examples, just add a source file in `test/`
+or `example/` and then re-run the CMake generation step so the new source
+file is known to the build system. Let's suppose the relative path from the
+root of the project to the new source file is `path/to/file.cpp`. When you
+re-run the CMake generation step, a new target named `path.to.file` will be
+created, and a test of the same name will also be created. Hence,
+```shell
+cd build # Go back to the build directory
+cmake --build . --target path.to.file # Builds the program associated to path/to/file.cpp
+ctest -R path.to.file # Runs the program as a test
+```
+
+> #### Tip for Sublime Text users
+> If you use the provided [hana.sublime-project](hana.sublime-project) file,
+> you can select the "[Hana] Build current file" build system. When viewing a
+> file to which a target is associated (like a test or an example), you can
+> then compile it by pressing ⌘B, or compile and then run it using ⇧⌘B.
+
+
+## Project organization
+The project is organized in a couple of subdirectories.
+- The [benchmark](benchmark) directory contains compile-time and runtime
+ benchmarks to make sure the library is as fast as advertised. The benchmark
+ code is written mostly in the form of [eRuby][] templates. The templates
+ are used to generate C++ files which are then compiled while gathering
+ compilation and execution statistics.
+- The [cmake](cmake) directory contains various CMake modules and other
+ scripts needed by the build system.
+- The [doc](doc) directory contains configuration files needed to generate
+ the documentation. The `doc/html` subdirectory is automatically ignored
+ by Git; you can conveniently store a local copy of the documentation by
+ cloning the `gh-pages` branch into that directory, as explained above.
+- The [example](example) directory contains the source code for all the
+ examples of both the tutorial and the reference documentation.
+- The [include](include) directory contains the library itself, which is
+ header only.
+- The [test](test) directory contains the source code for all the unit tests.
+
+
+## Contributing
+Please see [CONTRIBUTING.md](CONTRIBUTING.md).
+
+
+## License
+Please see [LICENSE.md](LICENSE.md).
+
+
+## Releasing
+This section acts as a reminder of the few simple steps required to release a
+new version of the library. This is only relevant to Hana's developers. To
+release a new version of the library, make sure the current version in
+`include/boost/hana/version.hpp` matches the release you're about to publish.
+Then, create an annotated tag with:
+```sh
+git tag -a --file=- v<version> <<EOM
+...your message here...
+EOM
+```
+
+Then, push the tag and create a new GitHub release pointing to that tag.
+Once that is done, bump the version number in `include/boost/hana/version.hpp`
+so that it matches the next _planned_ release. Finally, do not forget to update
+the [Homebrew formula][] to point to the latest version.
+
+
+<!-- Links -->
+[badge.Appveyor]: https://ci.appveyor.com/api/projects/status/github/boostorg/hana?svg=true&branch=master
+[badge.Gitter]: https://img.shields.io/badge/gitter-join%20chat-blue.svg
+[badge.Travis]: https://travis-ci.org/boostorg/hana.svg?branch=master
+[badge.version]: https://badge.fury.io/gh/boostorg%2Fhana.svg
+[badge.Wandbox]: https://img.shields.io/badge/try%20it-online-blue.svg
+[CMake]: http://www.cmake.org
+[Doxygen]: http://www.doxygen.org
+[eRuby]: http://en.wikipedia.org/wiki/ERuby
+[Hana.docs]: http://boostorg.github.io/hana
+[Hana.wiki]: https://github.com/boostorg/hana/wiki
+[Homebrew formula]: https://github.com/Homebrew/homebrew-core/blob/master/Formula/hana.rb