Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # 1 "test.cpp"
- # 1 "<built-in>" 1
- # 1 "<built-in>" 3
- # 354 "<built-in>" 3
- # 1 "<command line>" 1
- # 1 "<built-in>" 2
- # 1 "test.cpp" 2
- # 15 "test.cpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/assert.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/assert.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/constant.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/constant.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/constant.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/fwd/concept/constant.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/config.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/config.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/version.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/config.hpp" 2
- # 87 "/us/include/boost_1_64_0/boost/hana/config.hpp"
- # 1 "/usr/include/c++/5.2.0/cstddef" 1
- # 43 "/usr/include/c++/5.2.0/cstddef" 3
- # 1 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/c++config.h" 1 3
- # 184 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/c++config.h" 3
- namespace std
- {
- typedef long unsigned int size_t;
- typedef long int ptrdiff_t;
- typedef decltype(nullptr) nullptr_t;
- }
- # 426 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/c++config.h" 3
- # 1 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/os_defines.h" 1 3
- # 39 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/os_defines.h" 3
- # 1 "/usr/include/features.h" 1 3 4
- # 352 "/usr/include/features.h" 3 4
- # 1 "/usr/include/stdc-predef.h" 1 3 4
- # 353 "/usr/include/features.h" 2 3 4
- # 374 "/usr/include/features.h" 3 4
- # 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4
- # 385 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4
- # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
- # 386 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4
- # 375 "/usr/include/features.h" 2 3 4
- # 398 "/usr/include/features.h" 3 4
- # 1 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 1 3 4
- # 10 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 3 4
- # 1 "/usr/include/x86_64-linux-gnu/gnu/stubs-64.h" 1 3 4
- # 11 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 2 3 4
- # 399 "/usr/include/features.h" 2 3 4
- # 40 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/os_defines.h" 2 3
- # 427 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/c++config.h" 2 3
- # 1 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/cpu_defines.h" 1 3
- # 430 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/c++config.h" 2 3
- # 45 "/usr/include/c++/5.2.0/cstddef" 2 3
- # 1 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 1 3
- # 51 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 3
- typedef long int ptrdiff_t;
- # 62 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 3
- typedef long unsigned int size_t;
- # 118 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 3
- # 1 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/__stddef_max_align_t.h" 1 3
- # 35 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/__stddef_max_align_t.h" 3
- typedef struct {
- long long __clang_max_align_nonce1
- __attribute__((__aligned__(__alignof__(long long))));
- long double __clang_max_align_nonce2
- __attribute__((__aligned__(__alignof__(long double))));
- } max_align_t;
- # 119 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 2 3
- # 46 "/usr/include/c++/5.2.0/cstddef" 2 3
- namespace std
- {
- using ::max_align_t;
- }
- # 87 "/us/include/boost_1_64_0/boost/hana/config.hpp" 2
- # 13 "/us/include/boost_1_64_0/boost/hana/fwd/concept/constant.hpp" 2
- namespace boost { namespace hana {
- # 206 "/us/include/boost_1_64_0/boost/hana/fwd/concept/constant.hpp"
- template <typename C>
- struct Constant;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/constant.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/core/default.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/core/default.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/core/default.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/core/default.hpp"
- namespace boost { namespace hana {
- # 30 "/us/include/boost_1_64_0/boost/hana/fwd/core/default.hpp"
- struct default_ { };
- # 51 "/us/include/boost_1_64_0/boost/hana/fwd/core/default.hpp"
- template <typename T, typename = void>
- struct is_default;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/core/default.hpp" 2
- # 1 "/usr/include/c++/5.2.0/type_traits" 1
- # 33 "/usr/include/c++/5.2.0/type_traits" 3
- # 42 "/usr/include/c++/5.2.0/type_traits" 3
- namespace std
- {
- typedef unsigned short uint_least16_t;
- typedef unsigned int uint_least32_t;
- }
- namespace std __attribute__ ((__visibility__ ("default")))
- {
- # 68 "/usr/include/c++/5.2.0/type_traits" 3
- template<typename _Tp, _Tp __v>
- struct integral_constant
- {
- static constexpr _Tp value = __v;
- typedef _Tp value_type;
- typedef integral_constant<_Tp, __v> type;
- constexpr operator value_type() const { return value; }
- constexpr value_type operator()() const { return value; }
- };
- template<typename _Tp, _Tp __v>
- constexpr _Tp integral_constant<_Tp, __v>::value;
- typedef integral_constant<bool, true> true_type;
- typedef integral_constant<bool, false> false_type;
- template<bool __v>
- using __bool_constant = integral_constant<bool, __v>;
- template<bool, typename, typename>
- struct conditional;
- template<typename...>
- struct __or_;
- template<>
- struct __or_<>
- : public false_type
- { };
- template<typename _B1>
- struct __or_<_B1>
- : public _B1
- { };
- template<typename _B1, typename _B2>
- struct __or_<_B1, _B2>
- : public conditional<_B1::value, _B1, _B2>::type
- { };
- template<typename _B1, typename _B2, typename _B3, typename... _Bn>
- struct __or_<_B1, _B2, _B3, _Bn...>
- : public conditional<_B1::value, _B1, __or_<_B2, _B3, _Bn...>>::type
- { };
- template<typename...>
- struct __and_;
- template<>
- struct __and_<>
- : public true_type
- { };
- template<typename _B1>
- struct __and_<_B1>
- : public _B1
- { };
- template<typename _B1, typename _B2>
- struct __and_<_B1, _B2>
- : public conditional<_B1::value, _B2, _B1>::type
- { };
- template<typename _B1, typename _B2, typename _B3, typename... _Bn>
- struct __and_<_B1, _B2, _B3, _Bn...>
- : public conditional<_B1::value, __and_<_B2, _B3, _Bn...>, _B1>::type
- { };
- template<typename _Pp>
- struct __not_
- : public integral_constant<bool, !_Pp::value>
- { };
- template<typename _Tp>
- struct __success_type
- { typedef _Tp type; };
- struct __failure_type
- { };
- template<typename>
- struct remove_cv;
- template<typename>
- struct __is_void_helper
- : public false_type { };
- template<>
- struct __is_void_helper<void>
- : public true_type { };
- template<typename _Tp>
- struct is_void
- : public __is_void_helper<typename remove_cv<_Tp>::type>::type
- { };
- template<typename>
- struct __is_integral_helper
- : public false_type { };
- template<>
- struct __is_integral_helper<bool>
- : public true_type { };
- template<>
- struct __is_integral_helper<char>
- : public true_type { };
- template<>
- struct __is_integral_helper<signed char>
- : public true_type { };
- template<>
- struct __is_integral_helper<unsigned char>
- : public true_type { };
- template<>
- struct __is_integral_helper<wchar_t>
- : public true_type { };
- template<>
- struct __is_integral_helper<char16_t>
- : public true_type { };
- template<>
- struct __is_integral_helper<char32_t>
- : public true_type { };
- template<>
- struct __is_integral_helper<short>
- : public true_type { };
- template<>
- struct __is_integral_helper<unsigned short>
- : public true_type { };
- template<>
- struct __is_integral_helper<int>
- : public true_type { };
- template<>
- struct __is_integral_helper<unsigned int>
- : public true_type { };
- template<>
- struct __is_integral_helper<long>
- : public true_type { };
- template<>
- struct __is_integral_helper<unsigned long>
- : public true_type { };
- template<>
- struct __is_integral_helper<long long>
- : public true_type { };
- template<>
- struct __is_integral_helper<unsigned long long>
- : public true_type { };
- # 288 "/usr/include/c++/5.2.0/type_traits" 3
- template<typename _Tp>
- struct is_integral
- : public __is_integral_helper<typename remove_cv<_Tp>::type>::type
- { };
- template<typename>
- struct __is_floating_point_helper
- : public false_type { };
- template<>
- struct __is_floating_point_helper<float>
- : public true_type { };
- template<>
- struct __is_floating_point_helper<double>
- : public true_type { };
- template<>
- struct __is_floating_point_helper<long double>
- : public true_type { };
- # 316 "/usr/include/c++/5.2.0/type_traits" 3
- template<typename _Tp>
- struct is_floating_point
- : public __is_floating_point_helper<typename remove_cv<_Tp>::type>::type
- { };
- template<typename>
- struct is_array
- : public false_type { };
- template<typename _Tp, std::size_t _Size>
- struct is_array<_Tp[_Size]>
- : public true_type { };
- template<typename _Tp>
- struct is_array<_Tp[]>
- : public true_type { };
- template<typename>
- struct __is_pointer_helper
- : public false_type { };
- template<typename _Tp>
- struct __is_pointer_helper<_Tp*>
- : public true_type { };
- template<typename _Tp>
- struct is_pointer
- : public __is_pointer_helper<typename remove_cv<_Tp>::type>::type
- { };
- template<typename>
- struct is_lvalue_reference
- : public false_type { };
- template<typename _Tp>
- struct is_lvalue_reference<_Tp&>
- : public true_type { };
- template<typename>
- struct is_rvalue_reference
- : public false_type { };
- template<typename _Tp>
- struct is_rvalue_reference<_Tp&&>
- : public true_type { };
- template<typename>
- struct is_function;
- template<typename>
- struct __is_member_object_pointer_helper
- : public false_type { };
- template<typename _Tp, typename _Cp>
- struct __is_member_object_pointer_helper<_Tp _Cp::*>
- : public integral_constant<bool, !is_function<_Tp>::value> { };
- template<typename _Tp>
- struct is_member_object_pointer
- : public __is_member_object_pointer_helper<
- typename remove_cv<_Tp>::type>::type
- { };
- template<typename>
- struct __is_member_function_pointer_helper
- : public false_type { };
- template<typename _Tp, typename _Cp>
- struct __is_member_function_pointer_helper<_Tp _Cp::*>
- : public integral_constant<bool, is_function<_Tp>::value> { };
- template<typename _Tp>
- struct is_member_function_pointer
- : public __is_member_function_pointer_helper<
- typename remove_cv<_Tp>::type>::type
- { };
- template<typename _Tp>
- struct is_enum
- : public integral_constant<bool, __is_enum(_Tp)>
- { };
- template<typename _Tp>
- struct is_union
- : public integral_constant<bool, __is_union(_Tp)>
- { };
- template<typename _Tp>
- struct is_class
- : public integral_constant<bool, __is_class(_Tp)>
- { };
- template<typename>
- struct is_function
- : public false_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes...)>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes...) &>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes...) &&>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes......)>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes......) &>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes......) &&>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes...) const>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes...) const &>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes...) const &&>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes......) const>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes......) const &>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes......) const &&>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes...) volatile>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes...) volatile &>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes...) volatile &&>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes......) volatile>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes......) volatile &>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes......) volatile &&>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes...) const volatile>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes...) const volatile &>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes...) const volatile &&>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes......) const volatile>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes......) const volatile &>
- : public true_type { };
- template<typename _Res, typename... _ArgTypes>
- struct is_function<_Res(_ArgTypes......) const volatile &&>
- : public true_type { };
- template<typename>
- struct __is_null_pointer_helper
- : public false_type { };
- template<>
- struct __is_null_pointer_helper<std::nullptr_t>
- : public true_type { };
- template<typename _Tp>
- struct is_null_pointer
- : public __is_null_pointer_helper<typename remove_cv<_Tp>::type>::type
- { };
- template<typename _Tp>
- struct __is_nullptr_t
- : public is_null_pointer<_Tp>
- { };
- template<typename _Tp>
- struct is_reference
- : public __or_<is_lvalue_reference<_Tp>,
- is_rvalue_reference<_Tp>>::type
- { };
- template<typename _Tp>
- struct is_arithmetic
- : public __or_<is_integral<_Tp>, is_floating_point<_Tp>>::type
- { };
- template<typename _Tp>
- struct is_fundamental
- : public __or_<is_arithmetic<_Tp>, is_void<_Tp>,
- is_null_pointer<_Tp>>::type
- { };
- template<typename _Tp>
- struct is_object
- : public __not_<__or_<is_function<_Tp>, is_reference<_Tp>,
- is_void<_Tp>>>::type
- { };
- template<typename>
- struct is_member_pointer;
- template<typename _Tp>
- struct is_scalar
- : public __or_<is_arithmetic<_Tp>, is_enum<_Tp>, is_pointer<_Tp>,
- is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type
- { };
- template<typename _Tp>
- struct is_compound
- : public integral_constant<bool, !is_fundamental<_Tp>::value> { };
- template<typename _Tp>
- struct __is_member_pointer_helper
- : public false_type { };
- template<typename _Tp, typename _Cp>
- struct __is_member_pointer_helper<_Tp _Cp::*>
- : public true_type { };
- template<typename _Tp>
- struct is_member_pointer
- : public __is_member_pointer_helper<typename remove_cv<_Tp>::type>::type
- { };
- template<typename _Tp>
- struct __is_referenceable
- : public __or_<is_object<_Tp>, is_reference<_Tp>>::type
- { };
- template<typename _Res, typename... _Args>
- struct __is_referenceable<_Res(_Args...)>
- : public true_type
- { };
- template<typename _Res, typename... _Args>
- struct __is_referenceable<_Res(_Args......)>
- : public true_type
- { };
- template<typename>
- struct is_const
- : public false_type { };
- template<typename _Tp>
- struct is_const<_Tp const>
- : public true_type { };
- template<typename>
- struct is_volatile
- : public false_type { };
- template<typename _Tp>
- struct is_volatile<_Tp volatile>
- : public true_type { };
- template<typename _Tp>
- struct is_trivial
- : public integral_constant<bool, __is_trivial(_Tp)>
- { };
- template<typename _Tp>
- struct is_trivially_copyable
- : public integral_constant<bool, __is_trivially_copyable(_Tp)>
- { };
- template<typename _Tp>
- struct is_standard_layout
- : public integral_constant<bool, __is_standard_layout(_Tp)>
- { };
- template<typename _Tp>
- struct is_pod
- : public integral_constant<bool, __is_pod(_Tp)>
- { };
- template<typename _Tp>
- struct is_literal_type
- : public integral_constant<bool, __is_literal_type(_Tp)>
- { };
- template<typename _Tp>
- struct is_empty
- : public integral_constant<bool, __is_empty(_Tp)>
- { };
- template<typename _Tp>
- struct is_polymorphic
- : public integral_constant<bool, __is_polymorphic(_Tp)>
- { };
- template<typename _Tp>
- struct is_final
- : public integral_constant<bool, __is_final(_Tp)>
- { };
- template<typename _Tp>
- struct is_abstract
- : public integral_constant<bool, __is_abstract(_Tp)>
- { };
- template<typename _Tp,
- bool = is_arithmetic<_Tp>::value>
- struct __is_signed_helper
- : public false_type { };
- template<typename _Tp>
- struct __is_signed_helper<_Tp, true>
- : public integral_constant<bool, _Tp(-1) < _Tp(0)>
- { };
- template<typename _Tp>
- struct is_signed
- : public __is_signed_helper<_Tp>::type
- { };
- template<typename _Tp>
- struct is_unsigned
- : public __and_<is_arithmetic<_Tp>, __not_<is_signed<_Tp>>>::type
- { };
- template<typename>
- struct add_rvalue_reference;
- template<typename _Tp>
- typename add_rvalue_reference<_Tp>::type declval() noexcept;
- template<typename, unsigned = 0>
- struct extent;
- template<typename>
- struct remove_all_extents;
- template<typename _Tp>
- struct __is_array_known_bounds
- : public integral_constant<bool, (extent<_Tp>::value > 0)>
- { };
- template<typename _Tp>
- struct __is_array_unknown_bounds
- : public __and_<is_array<_Tp>, __not_<extent<_Tp>>>::type
- { };
- struct __do_is_destructible_impl
- {
- template<typename _Tp, typename = decltype(declval<_Tp&>().~_Tp())>
- static true_type __test(int);
- template<typename>
- static false_type __test(...);
- };
- template<typename _Tp>
- struct __is_destructible_impl
- : public __do_is_destructible_impl
- {
- typedef decltype(__test<_Tp>(0)) type;
- };
- template<typename _Tp,
- bool = __or_<is_void<_Tp>,
- __is_array_unknown_bounds<_Tp>,
- is_function<_Tp>>::value,
- bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
- struct __is_destructible_safe;
- template<typename _Tp>
- struct __is_destructible_safe<_Tp, false, false>
- : public __is_destructible_impl<typename
- remove_all_extents<_Tp>::type>::type
- { };
- template<typename _Tp>
- struct __is_destructible_safe<_Tp, true, false>
- : public false_type { };
- template<typename _Tp>
- struct __is_destructible_safe<_Tp, false, true>
- : public true_type { };
- template<typename _Tp>
- struct is_destructible
- : public __is_destructible_safe<_Tp>::type
- { };
- struct __do_is_nt_destructible_impl
- {
- template<typename _Tp>
- static integral_constant<bool, noexcept(declval<_Tp&>().~_Tp())>
- __test(int);
- template<typename>
- static false_type __test(...);
- };
- template<typename _Tp>
- struct __is_nt_destructible_impl
- : public __do_is_nt_destructible_impl
- {
- typedef decltype(__test<_Tp>(0)) type;
- };
- template<typename _Tp,
- bool = __or_<is_void<_Tp>,
- __is_array_unknown_bounds<_Tp>,
- is_function<_Tp>>::value,
- bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
- struct __is_nt_destructible_safe;
- template<typename _Tp>
- struct __is_nt_destructible_safe<_Tp, false, false>
- : public __is_nt_destructible_impl<typename
- remove_all_extents<_Tp>::type>::type
- { };
- template<typename _Tp>
- struct __is_nt_destructible_safe<_Tp, true, false>
- : public false_type { };
- template<typename _Tp>
- struct __is_nt_destructible_safe<_Tp, false, true>
- : public true_type { };
- template<typename _Tp>
- struct is_nothrow_destructible
- : public __is_nt_destructible_safe<_Tp>::type
- { };
- struct __do_is_default_constructible_impl
- {
- template<typename _Tp, typename = decltype(_Tp())>
- static true_type __test(int);
- template<typename>
- static false_type __test(...);
- };
- template<typename _Tp>
- struct __is_default_constructible_impl
- : public __do_is_default_constructible_impl
- {
- typedef decltype(__test<_Tp>(0)) type;
- };
- template<typename _Tp>
- struct __is_default_constructible_atom
- : public __and_<__not_<is_void<_Tp>>,
- __is_default_constructible_impl<_Tp>>::type
- { };
- template<typename _Tp, bool = is_array<_Tp>::value>
- struct __is_default_constructible_safe;
- template<typename _Tp>
- struct __is_default_constructible_safe<_Tp, true>
- : public __and_<__is_array_known_bounds<_Tp>,
- __is_default_constructible_atom<typename
- remove_all_extents<_Tp>::type>>::type
- { };
- template<typename _Tp>
- struct __is_default_constructible_safe<_Tp, false>
- : public __is_default_constructible_atom<_Tp>::type
- { };
- template<typename _Tp>
- struct is_default_constructible
- : public __is_default_constructible_safe<_Tp>::type
- { };
- # 900 "/usr/include/c++/5.2.0/type_traits" 3
- struct __do_is_static_castable_impl
- {
- template<typename _From, typename _To, typename
- = decltype(static_cast<_To>(declval<_From>()))>
- static true_type __test(int);
- template<typename, typename>
- static false_type __test(...);
- };
- template<typename _From, typename _To>
- struct __is_static_castable_impl
- : public __do_is_static_castable_impl
- {
- typedef decltype(__test<_From, _To>(0)) type;
- };
- template<typename _From, typename _To>
- struct __is_static_castable_safe
- : public __is_static_castable_impl<_From, _To>::type
- { };
- template<typename _From, typename _To>
- struct __is_static_castable
- : public integral_constant<bool, (__is_static_castable_safe<
- _From, _To>::value)>
- { };
- struct __do_is_direct_constructible_impl
- {
- template<typename _Tp, typename _Arg, typename
- = decltype(::new _Tp(declval<_Arg>()))>
- static true_type __test(int);
- template<typename, typename>
- static false_type __test(...);
- };
- template<typename _Tp, typename _Arg>
- struct __is_direct_constructible_impl
- : public __do_is_direct_constructible_impl
- {
- typedef decltype(__test<_Tp, _Arg>(0)) type;
- };
- template<typename _Tp, typename _Arg>
- struct __is_direct_constructible_new_safe
- : public __and_<is_destructible<_Tp>,
- __is_direct_constructible_impl<_Tp, _Arg>>::type
- { };
- template<typename, typename>
- struct is_same;
- template<typename, typename>
- struct is_base_of;
- template<typename>
- struct remove_reference;
- template<typename _From, typename _To, bool
- = __not_<__or_<is_void<_From>,
- is_function<_From>>>::value>
- struct __is_base_to_derived_ref;
- template<typename _From, typename _To>
- struct __is_base_to_derived_ref<_From, _To, true>
- {
- typedef typename remove_cv<typename remove_reference<_From
- >::type>::type __src_t;
- typedef typename remove_cv<typename remove_reference<_To
- >::type>::type __dst_t;
- typedef __and_<__not_<is_same<__src_t, __dst_t>>,
- is_base_of<__src_t, __dst_t>> type;
- static constexpr bool value = type::value;
- };
- template<typename _From, typename _To>
- struct __is_base_to_derived_ref<_From, _To, false>
- : public false_type
- { };
- template<typename _From, typename _To, bool
- = __and_<is_lvalue_reference<_From>,
- is_rvalue_reference<_To>>::value>
- struct __is_lvalue_to_rvalue_ref;
- template<typename _From, typename _To>
- struct __is_lvalue_to_rvalue_ref<_From, _To, true>
- {
- typedef typename remove_cv<typename remove_reference<
- _From>::type>::type __src_t;
- typedef typename remove_cv<typename remove_reference<
- _To>::type>::type __dst_t;
- typedef __and_<__not_<is_function<__src_t>>,
- __or_<is_same<__src_t, __dst_t>,
- is_base_of<__dst_t, __src_t>>> type;
- static constexpr bool value = type::value;
- };
- template<typename _From, typename _To>
- struct __is_lvalue_to_rvalue_ref<_From, _To, false>
- : public false_type
- { };
- template<typename _Tp, typename _Arg>
- struct __is_direct_constructible_ref_cast
- : public __and_<__is_static_castable<_Arg, _Tp>,
- __not_<__or_<__is_base_to_derived_ref<_Arg, _Tp>,
- __is_lvalue_to_rvalue_ref<_Arg, _Tp>
- >>>::type
- { };
- template<typename _Tp, typename _Arg>
- struct __is_direct_constructible_new
- : public conditional<is_reference<_Tp>::value,
- __is_direct_constructible_ref_cast<_Tp, _Arg>,
- __is_direct_constructible_new_safe<_Tp, _Arg>
- >::type
- { };
- template<typename _Tp, typename _Arg>
- struct __is_direct_constructible
- : public __is_direct_constructible_new<_Tp, _Arg>::type
- { };
- struct __do_is_nary_constructible_impl
- {
- template<typename _Tp, typename... _Args, typename
- = decltype(_Tp(declval<_Args>()...))>
- static true_type __test(int);
- template<typename, typename...>
- static false_type __test(...);
- };
- template<typename _Tp, typename... _Args>
- struct __is_nary_constructible_impl
- : public __do_is_nary_constructible_impl
- {
- typedef decltype(__test<_Tp, _Args...>(0)) type;
- };
- template<typename _Tp, typename... _Args>
- struct __is_nary_constructible
- : public __is_nary_constructible_impl<_Tp, _Args...>::type
- {
- static_assert(sizeof...(_Args) > 1,
- "Only useful for > 1 arguments");
- };
- template<typename _Tp, typename... _Args>
- struct __is_constructible_impl
- : public __is_nary_constructible<_Tp, _Args...>
- { };
- template<typename _Tp, typename _Arg>
- struct __is_constructible_impl<_Tp, _Arg>
- : public __is_direct_constructible<_Tp, _Arg>
- { };
- template<typename _Tp>
- struct __is_constructible_impl<_Tp>
- : public is_default_constructible<_Tp>
- { };
- template<typename _Tp, typename... _Args>
- struct is_constructible
- : public __is_constructible_impl<_Tp, _Args...>::type
- { };
- template<typename _Tp, bool = __is_referenceable<_Tp>::value>
- struct __is_copy_constructible_impl;
- template<typename _Tp>
- struct __is_copy_constructible_impl<_Tp, false>
- : public false_type { };
- template<typename _Tp>
- struct __is_copy_constructible_impl<_Tp, true>
- : public is_constructible<_Tp, const _Tp&>
- { };
- template<typename _Tp>
- struct is_copy_constructible
- : public __is_copy_constructible_impl<_Tp>
- { };
- template<typename _Tp, bool = __is_referenceable<_Tp>::value>
- struct __is_move_constructible_impl;
- template<typename _Tp>
- struct __is_move_constructible_impl<_Tp, false>
- : public false_type { };
- template<typename _Tp>
- struct __is_move_constructible_impl<_Tp, true>
- : public is_constructible<_Tp, _Tp&&>
- { };
- template<typename _Tp>
- struct is_move_constructible
- : public __is_move_constructible_impl<_Tp>
- { };
- template<typename _Tp>
- struct __is_nt_default_constructible_atom
- : public integral_constant<bool, noexcept(_Tp())>
- { };
- template<typename _Tp, bool = is_array<_Tp>::value>
- struct __is_nt_default_constructible_impl;
- template<typename _Tp>
- struct __is_nt_default_constructible_impl<_Tp, true>
- : public __and_<__is_array_known_bounds<_Tp>,
- __is_nt_default_constructible_atom<typename
- remove_all_extents<_Tp>::type>>::type
- { };
- template<typename _Tp>
- struct __is_nt_default_constructible_impl<_Tp, false>
- : public __is_nt_default_constructible_atom<_Tp>
- { };
- template<typename _Tp>
- struct is_nothrow_default_constructible
- : public __and_<is_default_constructible<_Tp>,
- __is_nt_default_constructible_impl<_Tp>>::type
- { };
- template<typename _Tp, typename... _Args>
- struct __is_nt_constructible_impl
- : public integral_constant<bool, noexcept(_Tp(declval<_Args>()...))>
- { };
- template<typename _Tp, typename _Arg>
- struct __is_nt_constructible_impl<_Tp, _Arg>
- : public integral_constant<bool,
- noexcept(static_cast<_Tp>(declval<_Arg>()))>
- { };
- template<typename _Tp>
- struct __is_nt_constructible_impl<_Tp>
- : public is_nothrow_default_constructible<_Tp>
- { };
- template<typename _Tp, typename... _Args>
- struct is_nothrow_constructible
- : public __and_<is_constructible<_Tp, _Args...>,
- __is_nt_constructible_impl<_Tp, _Args...>>::type
- { };
- template<typename _Tp, bool = __is_referenceable<_Tp>::value>
- struct __is_nothrow_copy_constructible_impl;
- template<typename _Tp>
- struct __is_nothrow_copy_constructible_impl<_Tp, false>
- : public false_type { };
- template<typename _Tp>
- struct __is_nothrow_copy_constructible_impl<_Tp, true>
- : public is_nothrow_constructible<_Tp, const _Tp&>
- { };
- template<typename _Tp>
- struct is_nothrow_copy_constructible
- : public __is_nothrow_copy_constructible_impl<_Tp>
- { };
- template<typename _Tp, bool = __is_referenceable<_Tp>::value>
- struct __is_nothrow_move_constructible_impl;
- template<typename _Tp>
- struct __is_nothrow_move_constructible_impl<_Tp, false>
- : public false_type { };
- template<typename _Tp>
- struct __is_nothrow_move_constructible_impl<_Tp, true>
- : public is_nothrow_constructible<_Tp, _Tp&&>
- { };
- template<typename _Tp>
- struct is_nothrow_move_constructible
- : public __is_nothrow_move_constructible_impl<_Tp>
- { };
- template<typename _Tp, typename _Up>
- class __is_assignable_helper
- {
- template<typename _Tp1, typename _Up1,
- typename = decltype(declval<_Tp1>() = declval<_Up1>())>
- static true_type
- __test(int);
- template<typename, typename>
- static false_type
- __test(...);
- public:
- typedef decltype(__test<_Tp, _Up>(0)) type;
- };
- template<typename _Tp, typename _Up>
- struct is_assignable
- : public __is_assignable_helper<_Tp, _Up>::type
- { };
- template<typename _Tp, bool = __is_referenceable<_Tp>::value>
- struct __is_copy_assignable_impl;
- template<typename _Tp>
- struct __is_copy_assignable_impl<_Tp, false>
- : public false_type { };
- template<typename _Tp>
- struct __is_copy_assignable_impl<_Tp, true>
- : public is_assignable<_Tp&, const _Tp&>
- { };
- template<typename _Tp>
- struct is_copy_assignable
- : public __is_copy_assignable_impl<_Tp>
- { };
- template<typename _Tp, bool = __is_referenceable<_Tp>::value>
- struct __is_move_assignable_impl;
- template<typename _Tp>
- struct __is_move_assignable_impl<_Tp, false>
- : public false_type { };
- template<typename _Tp>
- struct __is_move_assignable_impl<_Tp, true>
- : public is_assignable<_Tp&, _Tp&&>
- { };
- template<typename _Tp>
- struct is_move_assignable
- : public __is_move_assignable_impl<_Tp>
- { };
- template<typename _Tp, typename _Up>
- struct __is_nt_assignable_impl
- : public integral_constant<bool, noexcept(declval<_Tp>() = declval<_Up>())>
- { };
- template<typename _Tp, typename _Up>
- struct is_nothrow_assignable
- : public __and_<is_assignable<_Tp, _Up>,
- __is_nt_assignable_impl<_Tp, _Up>>::type
- { };
- template<typename _Tp, bool = __is_referenceable<_Tp>::value>
- struct __is_nt_copy_assignable_impl;
- template<typename _Tp>
- struct __is_nt_copy_assignable_impl<_Tp, false>
- : public false_type { };
- template<typename _Tp>
- struct __is_nt_copy_assignable_impl<_Tp, true>
- : public is_nothrow_assignable<_Tp&, const _Tp&>
- { };
- template<typename _Tp>
- struct is_nothrow_copy_assignable
- : public __is_nt_copy_assignable_impl<_Tp>
- { };
- template<typename _Tp, bool = __is_referenceable<_Tp>::value>
- struct __is_nt_move_assignable_impl;
- template<typename _Tp>
- struct __is_nt_move_assignable_impl<_Tp, false>
- : public false_type { };
- template<typename _Tp>
- struct __is_nt_move_assignable_impl<_Tp, true>
- : public is_nothrow_assignable<_Tp&, _Tp&&>
- { };
- template<typename _Tp>
- struct is_nothrow_move_assignable
- : public __is_nt_move_assignable_impl<_Tp>
- { };
- template<typename _Tp, typename... _Args>
- struct is_trivially_constructible
- : public __and_<is_constructible<_Tp, _Args...>, integral_constant<bool,
- __is_trivially_constructible(_Tp, _Args...)>>::type
- { };
- template<typename _Tp>
- struct is_trivially_default_constructible
- : public is_trivially_constructible<_Tp>::type
- { };
- template<typename _Tp>
- struct is_trivially_copy_constructible
- : public __and_<is_copy_constructible<_Tp>,
- integral_constant<bool,
- __is_trivially_constructible(_Tp, const _Tp&)>>::type
- { };
- template<typename _Tp>
- struct is_trivially_move_constructible
- : public __and_<is_move_constructible<_Tp>,
- integral_constant<bool,
- __is_trivially_constructible(_Tp, _Tp&&)>>::type
- { };
- template<typename _Tp, typename _Up>
- struct is_trivially_assignable
- : public __and_<is_assignable<_Tp, _Up>,
- integral_constant<bool,
- __is_trivially_assignable(_Tp, _Up)>>::type
- { };
- template<typename _Tp>
- struct is_trivially_copy_assignable
- : public __and_<is_copy_assignable<_Tp>,
- integral_constant<bool,
- __is_trivially_assignable(_Tp&, const _Tp&)>>::type
- { };
- template<typename _Tp>
- struct is_trivially_move_assignable
- : public __and_<is_move_assignable<_Tp>,
- integral_constant<bool,
- __is_trivially_assignable(_Tp&, _Tp&&)>>::type
- { };
- template<typename _Tp>
- struct is_trivially_destructible
- : public __and_<is_destructible<_Tp>, integral_constant<bool,
- __has_trivial_destructor(_Tp)>>::type
- { };
- template<typename _Tp>
- struct has_trivial_default_constructor
- : public integral_constant<bool, __has_trivial_constructor(_Tp)>
- { } __attribute__ ((__deprecated__));
- template<typename _Tp>
- struct has_trivial_copy_constructor
- : public integral_constant<bool, __has_trivial_copy(_Tp)>
- { } __attribute__ ((__deprecated__));
- template<typename _Tp>
- struct has_trivial_copy_assign
- : public integral_constant<bool, __has_trivial_assign(_Tp)>
- { } __attribute__ ((__deprecated__));
- template<typename _Tp>
- struct has_virtual_destructor
- : public integral_constant<bool, __has_virtual_destructor(_Tp)>
- { };
- template<typename _Tp>
- struct alignment_of
- : public integral_constant<std::size_t, __alignof__(_Tp)> { };
- template<typename>
- struct rank
- : public integral_constant<std::size_t, 0> { };
- template<typename _Tp, std::size_t _Size>
- struct rank<_Tp[_Size]>
- : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
- template<typename _Tp>
- struct rank<_Tp[]>
- : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
- template<typename, unsigned _Uint>
- struct extent
- : public integral_constant<std::size_t, 0> { };
- template<typename _Tp, unsigned _Uint, std::size_t _Size>
- struct extent<_Tp[_Size], _Uint>
- : public integral_constant<std::size_t,
- _Uint == 0 ? _Size : extent<_Tp,
- _Uint - 1>::value>
- { };
- template<typename _Tp, unsigned _Uint>
- struct extent<_Tp[], _Uint>
- : public integral_constant<std::size_t,
- _Uint == 0 ? 0 : extent<_Tp,
- _Uint - 1>::value>
- { };
- template<typename, typename>
- struct is_same
- : public false_type { };
- template<typename _Tp>
- struct is_same<_Tp, _Tp>
- : public true_type { };
- template<typename _Base, typename _Derived>
- struct is_base_of
- : public integral_constant<bool, __is_base_of(_Base, _Derived)>
- { };
- template<typename _From, typename _To,
- bool = __or_<is_void<_From>, is_function<_To>,
- is_array<_To>>::value>
- struct __is_convertible_helper
- { typedef typename is_void<_To>::type type; };
- template<typename _From, typename _To>
- class __is_convertible_helper<_From, _To, false>
- {
- template<typename _To1>
- static void __test_aux(_To1);
- template<typename _From1, typename _To1,
- typename = decltype(__test_aux<_To1>(std::declval<_From1>()))>
- static true_type
- __test(int);
- template<typename, typename>
- static false_type
- __test(...);
- public:
- typedef decltype(__test<_From, _To>(0)) type;
- };
- template<typename _From, typename _To>
- struct is_convertible
- : public __is_convertible_helper<_From, _To>::type
- { };
- template<typename _Tp>
- struct remove_const
- { typedef _Tp type; };
- template<typename _Tp>
- struct remove_const<_Tp const>
- { typedef _Tp type; };
- template<typename _Tp>
- struct remove_volatile
- { typedef _Tp type; };
- template<typename _Tp>
- struct remove_volatile<_Tp volatile>
- { typedef _Tp type; };
- template<typename _Tp>
- struct remove_cv
- {
- typedef typename
- remove_const<typename remove_volatile<_Tp>::type>::type type;
- };
- template<typename _Tp>
- struct add_const
- { typedef _Tp const type; };
- template<typename _Tp>
- struct add_volatile
- { typedef _Tp volatile type; };
- template<typename _Tp>
- struct add_cv
- {
- typedef typename
- add_const<typename add_volatile<_Tp>::type>::type type;
- };
- template<typename _Tp>
- using remove_const_t = typename remove_const<_Tp>::type;
- template<typename _Tp>
- using remove_volatile_t = typename remove_volatile<_Tp>::type;
- template<typename _Tp>
- using remove_cv_t = typename remove_cv<_Tp>::type;
- template<typename _Tp>
- using add_const_t = typename add_const<_Tp>::type;
- template<typename _Tp>
- using add_volatile_t = typename add_volatile<_Tp>::type;
- template<typename _Tp>
- using add_cv_t = typename add_cv<_Tp>::type;
- template<typename _Tp>
- struct remove_reference
- { typedef _Tp type; };
- template<typename _Tp>
- struct remove_reference<_Tp&>
- { typedef _Tp type; };
- template<typename _Tp>
- struct remove_reference<_Tp&&>
- { typedef _Tp type; };
- template<typename _Tp, bool = __is_referenceable<_Tp>::value>
- struct __add_lvalue_reference_helper
- { typedef _Tp type; };
- template<typename _Tp>
- struct __add_lvalue_reference_helper<_Tp, true>
- { typedef _Tp& type; };
- template<typename _Tp>
- struct add_lvalue_reference
- : public __add_lvalue_reference_helper<_Tp>
- { };
- template<typename _Tp, bool = __is_referenceable<_Tp>::value>
- struct __add_rvalue_reference_helper
- { typedef _Tp type; };
- template<typename _Tp>
- struct __add_rvalue_reference_helper<_Tp, true>
- { typedef _Tp&& type; };
- template<typename _Tp>
- struct add_rvalue_reference
- : public __add_rvalue_reference_helper<_Tp>
- { };
- template<typename _Tp>
- using remove_reference_t = typename remove_reference<_Tp>::type;
- template<typename _Tp>
- using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type;
- template<typename _Tp>
- using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type;
- template<typename _Unqualified, bool _IsConst, bool _IsVol>
- struct __cv_selector;
- template<typename _Unqualified>
- struct __cv_selector<_Unqualified, false, false>
- { typedef _Unqualified __type; };
- template<typename _Unqualified>
- struct __cv_selector<_Unqualified, false, true>
- { typedef volatile _Unqualified __type; };
- template<typename _Unqualified>
- struct __cv_selector<_Unqualified, true, false>
- { typedef const _Unqualified __type; };
- template<typename _Unqualified>
- struct __cv_selector<_Unqualified, true, true>
- { typedef const volatile _Unqualified __type; };
- template<typename _Qualified, typename _Unqualified,
- bool _IsConst = is_const<_Qualified>::value,
- bool _IsVol = is_volatile<_Qualified>::value>
- class __match_cv_qualifiers
- {
- typedef __cv_selector<_Unqualified, _IsConst, _IsVol> __match;
- public:
- typedef typename __match::__type __type;
- };
- template<typename _Tp>
- struct __make_unsigned
- { typedef _Tp __type; };
- template<>
- struct __make_unsigned<char>
- { typedef unsigned char __type; };
- template<>
- struct __make_unsigned<signed char>
- { typedef unsigned char __type; };
- template<>
- struct __make_unsigned<short>
- { typedef unsigned short __type; };
- template<>
- struct __make_unsigned<int>
- { typedef unsigned int __type; };
- template<>
- struct __make_unsigned<long>
- { typedef unsigned long __type; };
- template<>
- struct __make_unsigned<long long>
- { typedef unsigned long long __type; };
- template<>
- struct __make_unsigned<wchar_t> : __make_unsigned<int>
- { };
- # 1718 "/usr/include/c++/5.2.0/type_traits" 3
- template<typename _Tp,
- bool _IsInt = is_integral<_Tp>::value,
- bool _IsEnum = is_enum<_Tp>::value>
- class __make_unsigned_selector;
- template<typename _Tp>
- class __make_unsigned_selector<_Tp, true, false>
- {
- typedef __make_unsigned<typename remove_cv<_Tp>::type> __unsignedt;
- typedef typename __unsignedt::__type __unsigned_type;
- typedef __match_cv_qualifiers<_Tp, __unsigned_type> __cv_unsigned;
- public:
- typedef typename __cv_unsigned::__type __type;
- };
- template<typename _Tp>
- class __make_unsigned_selector<_Tp, false, true>
- {
- typedef unsigned char __smallest;
- static const bool __b0 = sizeof(_Tp) <= sizeof(__smallest);
- static const bool __b1 = sizeof(_Tp) <= sizeof(unsigned short);
- static const bool __b2 = sizeof(_Tp) <= sizeof(unsigned int);
- typedef conditional<__b2, unsigned int, unsigned long> __cond2;
- typedef typename __cond2::type __cond2_type;
- typedef conditional<__b1, unsigned short, __cond2_type> __cond1;
- typedef typename __cond1::type __cond1_type;
- public:
- typedef typename conditional<__b0, __smallest, __cond1_type>::type __type;
- };
- template<typename _Tp>
- struct make_unsigned
- { typedef typename __make_unsigned_selector<_Tp>::__type type; };
- template<>
- struct make_unsigned<bool>;
- template<typename _Tp>
- struct __make_signed
- { typedef _Tp __type; };
- template<>
- struct __make_signed<char>
- { typedef signed char __type; };
- template<>
- struct __make_signed<unsigned char>
- { typedef signed char __type; };
- template<>
- struct __make_signed<unsigned short>
- { typedef signed short __type; };
- template<>
- struct __make_signed<unsigned int>
- { typedef signed int __type; };
- template<>
- struct __make_signed<unsigned long>
- { typedef signed long __type; };
- template<>
- struct __make_signed<unsigned long long>
- { typedef signed long long __type; };
- # 1800 "/usr/include/c++/5.2.0/type_traits" 3
- template<>
- struct __make_signed<char16_t> : __make_signed<uint_least16_t>
- { };
- template<>
- struct __make_signed<char32_t> : __make_signed<uint_least32_t>
- { };
- # 1830 "/usr/include/c++/5.2.0/type_traits" 3
- template<typename _Tp,
- bool _IsInt = is_integral<_Tp>::value,
- bool _IsEnum = is_enum<_Tp>::value>
- class __make_signed_selector;
- template<typename _Tp>
- class __make_signed_selector<_Tp, true, false>
- {
- typedef __make_signed<typename remove_cv<_Tp>::type> __signedt;
- typedef typename __signedt::__type __signed_type;
- typedef __match_cv_qualifiers<_Tp, __signed_type> __cv_signed;
- public:
- typedef typename __cv_signed::__type __type;
- };
- template<typename _Tp>
- class __make_signed_selector<_Tp, false, true>
- {
- typedef signed char __smallest;
- static const bool __b0 = sizeof(_Tp) <= sizeof(__smallest);
- static const bool __b1 = sizeof(_Tp) <= sizeof(signed short);
- static const bool __b2 = sizeof(_Tp) <= sizeof(signed int);
- typedef conditional<__b2, signed int, signed long> __cond2;
- typedef typename __cond2::type __cond2_type;
- typedef conditional<__b1, signed short, __cond2_type> __cond1;
- typedef typename __cond1::type __cond1_type;
- public:
- typedef typename conditional<__b0, __smallest, __cond1_type>::type __type;
- };
- template<typename _Tp>
- struct make_signed
- { typedef typename __make_signed_selector<_Tp>::__type type; };
- template<>
- struct make_signed<bool>;
- template<typename _Tp>
- using make_signed_t = typename make_signed<_Tp>::type;
- template<typename _Tp>
- using make_unsigned_t = typename make_unsigned<_Tp>::type;
- template<typename _Tp>
- struct remove_extent
- { typedef _Tp type; };
- template<typename _Tp, std::size_t _Size>
- struct remove_extent<_Tp[_Size]>
- { typedef _Tp type; };
- template<typename _Tp>
- struct remove_extent<_Tp[]>
- { typedef _Tp type; };
- template<typename _Tp>
- struct remove_all_extents
- { typedef _Tp type; };
- template<typename _Tp, std::size_t _Size>
- struct remove_all_extents<_Tp[_Size]>
- { typedef typename remove_all_extents<_Tp>::type type; };
- template<typename _Tp>
- struct remove_all_extents<_Tp[]>
- { typedef typename remove_all_extents<_Tp>::type type; };
- template<typename _Tp>
- using remove_extent_t = typename remove_extent<_Tp>::type;
- template<typename _Tp>
- using remove_all_extents_t = typename remove_all_extents<_Tp>::type;
- template<typename _Tp, typename>
- struct __remove_pointer_helper
- { typedef _Tp type; };
- template<typename _Tp, typename _Up>
- struct __remove_pointer_helper<_Tp, _Up*>
- { typedef _Up type; };
- template<typename _Tp>
- struct remove_pointer
- : public __remove_pointer_helper<_Tp, typename remove_cv<_Tp>::type>
- { };
- template<typename _Tp, bool = __or_<__is_referenceable<_Tp>,
- is_void<_Tp>>::value>
- struct __add_pointer_helper
- { typedef _Tp type; };
- template<typename _Tp>
- struct __add_pointer_helper<_Tp, true>
- { typedef typename remove_reference<_Tp>::type* type; };
- template<typename _Tp>
- struct add_pointer
- : public __add_pointer_helper<_Tp>
- { };
- template<typename _Tp>
- using remove_pointer_t = typename remove_pointer<_Tp>::type;
- template<typename _Tp>
- using add_pointer_t = typename add_pointer<_Tp>::type;
- template<std::size_t _Len>
- struct __aligned_storage_msa
- {
- union __type
- {
- unsigned char __data[_Len];
- struct __attribute__((__aligned__)) { } __align;
- };
- };
- # 1984 "/usr/include/c++/5.2.0/type_traits" 3
- template<std::size_t _Len, std::size_t _Align =
- __alignof__(typename __aligned_storage_msa<_Len>::__type)>
- struct aligned_storage
- {
- union type
- {
- unsigned char __data[_Len];
- struct __attribute__((__aligned__((_Align)))) { } __align;
- };
- };
- template <typename... _Types>
- struct __strictest_alignment
- {
- static const size_t _S_alignment = 0;
- static const size_t _S_size = 0;
- };
- template <typename _Tp, typename... _Types>
- struct __strictest_alignment<_Tp, _Types...>
- {
- static const size_t _S_alignment =
- alignof(_Tp) > __strictest_alignment<_Types...>::_S_alignment
- ? alignof(_Tp) : __strictest_alignment<_Types...>::_S_alignment;
- static const size_t _S_size =
- sizeof(_Tp) > __strictest_alignment<_Types...>::_S_size
- ? sizeof(_Tp) : __strictest_alignment<_Types...>::_S_size;
- };
- # 2023 "/usr/include/c++/5.2.0/type_traits" 3
- template <size_t _Len, typename... _Types>
- struct aligned_union
- {
- private:
- static_assert(sizeof...(_Types) != 0, "At least one type is required");
- using __strictest = __strictest_alignment<_Types...>;
- static const size_t _S_len = _Len > __strictest::_S_size
- ? _Len : __strictest::_S_size;
- public:
- static const size_t alignment_value = __strictest::_S_alignment;
- typedef typename aligned_storage<_S_len, alignment_value>::type type;
- };
- template <size_t _Len, typename... _Types>
- const size_t aligned_union<_Len, _Types...>::alignment_value;
- template<typename _Up,
- bool _IsArray = is_array<_Up>::value,
- bool _IsFunction = is_function<_Up>::value>
- struct __decay_selector;
- template<typename _Up>
- struct __decay_selector<_Up, false, false>
- { typedef typename remove_cv<_Up>::type __type; };
- template<typename _Up>
- struct __decay_selector<_Up, true, false>
- { typedef typename remove_extent<_Up>::type* __type; };
- template<typename _Up>
- struct __decay_selector<_Up, false, true>
- { typedef typename add_pointer<_Up>::type __type; };
- template<typename _Tp>
- class decay
- {
- typedef typename remove_reference<_Tp>::type __remove_type;
- public:
- typedef typename __decay_selector<__remove_type>::__type type;
- };
- template<typename _Tp>
- class reference_wrapper;
- template<typename _Tp>
- struct __strip_reference_wrapper
- {
- typedef _Tp __type;
- };
- template<typename _Tp>
- struct __strip_reference_wrapper<reference_wrapper<_Tp> >
- {
- typedef _Tp& __type;
- };
- template<typename _Tp>
- struct __decay_and_strip
- {
- typedef typename __strip_reference_wrapper<
- typename decay<_Tp>::type>::__type __type;
- };
- template<bool, typename _Tp = void>
- struct enable_if
- { };
- template<typename _Tp>
- struct enable_if<true, _Tp>
- { typedef _Tp type; };
- template<typename... _Cond>
- using _Require = typename enable_if<__and_<_Cond...>::value>::type;
- template<bool _Cond, typename _Iftrue, typename _Iffalse>
- struct conditional
- { typedef _Iftrue type; };
- template<typename _Iftrue, typename _Iffalse>
- struct conditional<false, _Iftrue, _Iffalse>
- { typedef _Iffalse type; };
- template<typename... _Tp>
- struct common_type;
- struct __do_common_type_impl
- {
- template<typename _Tp, typename _Up>
- static __success_type<typename decay<decltype
- (true ? std::declval<_Tp>()
- : std::declval<_Up>())>::type> _S_test(int);
- template<typename, typename>
- static __failure_type _S_test(...);
- };
- template<typename _Tp, typename _Up>
- struct __common_type_impl
- : private __do_common_type_impl
- {
- typedef decltype(_S_test<_Tp, _Up>(0)) type;
- };
- struct __do_member_type_wrapper
- {
- template<typename _Tp>
- static __success_type<typename _Tp::type> _S_test(int);
- template<typename>
- static __failure_type _S_test(...);
- };
- template<typename _Tp>
- struct __member_type_wrapper
- : private __do_member_type_wrapper
- {
- typedef decltype(_S_test<_Tp>(0)) type;
- };
- template<typename _CTp, typename... _Args>
- struct __expanded_common_type_wrapper
- {
- typedef common_type<typename _CTp::type, _Args...> type;
- };
- template<typename... _Args>
- struct __expanded_common_type_wrapper<__failure_type, _Args...>
- { typedef __failure_type type; };
- template<typename _Tp>
- struct common_type<_Tp>
- { typedef typename decay<_Tp>::type type; };
- template<typename _Tp, typename _Up>
- struct common_type<_Tp, _Up>
- : public __common_type_impl<_Tp, _Up>::type
- { };
- template<typename _Tp, typename _Up, typename... _Vp>
- struct common_type<_Tp, _Up, _Vp...>
- : public __expanded_common_type_wrapper<typename __member_type_wrapper<
- common_type<_Tp, _Up>>::type, _Vp...>::type
- { };
- template<typename _Tp>
- struct underlying_type
- {
- typedef __underlying_type(_Tp) type;
- };
- template<typename _Tp>
- struct __declval_protector
- {
- static const bool __stop = false;
- static typename add_rvalue_reference<_Tp>::type __delegate();
- };
- template<typename _Tp>
- inline typename add_rvalue_reference<_Tp>::type
- declval() noexcept
- {
- static_assert(__declval_protector<_Tp>::__stop,
- "declval() must not be used!");
- return __declval_protector<_Tp>::__delegate();
- }
- template<typename _Signature>
- class result_of;
- struct __result_of_memfun_ref_impl
- {
- template<typename _Fp, typename _Tp1, typename... _Args>
- static __success_type<decltype(
- (std::declval<_Tp1>().*std::declval<_Fp>())(std::declval<_Args>()...)
- )> _S_test(int);
- template<typename...>
- static __failure_type _S_test(...);
- };
- template<typename _MemPtr, typename _Arg, typename... _Args>
- struct __result_of_memfun_ref
- : private __result_of_memfun_ref_impl
- {
- typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type;
- };
- struct __result_of_memfun_deref_impl
- {
- template<typename _Fp, typename _Tp1, typename... _Args>
- static __success_type<decltype(
- ((*std::declval<_Tp1>()).*std::declval<_Fp>())(std::declval<_Args>()...)
- )> _S_test(int);
- template<typename...>
- static __failure_type _S_test(...);
- };
- template<typename _MemPtr, typename _Arg, typename... _Args>
- struct __result_of_memfun_deref
- : private __result_of_memfun_deref_impl
- {
- typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type;
- };
- struct __result_of_memobj_ref_impl
- {
- template<typename _Fp, typename _Tp1>
- static __success_type<decltype(
- std::declval<_Tp1>().*std::declval<_Fp>()
- )> _S_test(int);
- template<typename, typename>
- static __failure_type _S_test(...);
- };
- template<typename _MemPtr, typename _Arg>
- struct __result_of_memobj_ref
- : private __result_of_memobj_ref_impl
- {
- typedef decltype(_S_test<_MemPtr, _Arg>(0)) type;
- };
- struct __result_of_memobj_deref_impl
- {
- template<typename _Fp, typename _Tp1>
- static __success_type<decltype(
- (*std::declval<_Tp1>()).*std::declval<_Fp>()
- )> _S_test(int);
- template<typename, typename>
- static __failure_type _S_test(...);
- };
- template<typename _MemPtr, typename _Arg>
- struct __result_of_memobj_deref
- : private __result_of_memobj_deref_impl
- {
- typedef decltype(_S_test<_MemPtr, _Arg>(0)) type;
- };
- template<typename _MemPtr, typename _Arg>
- struct __result_of_memobj;
- template<typename _Res, typename _Class, typename _Arg>
- struct __result_of_memobj<_Res _Class::*, _Arg>
- {
- typedef typename remove_cv<typename remove_reference<
- _Arg>::type>::type _Argval;
- typedef _Res _Class::* _MemPtr;
- typedef typename conditional<__or_<is_same<_Argval, _Class>,
- is_base_of<_Class, _Argval>>::value,
- __result_of_memobj_ref<_MemPtr, _Arg>,
- __result_of_memobj_deref<_MemPtr, _Arg>
- >::type::type type;
- };
- template<typename _MemPtr, typename _Arg, typename... _Args>
- struct __result_of_memfun;
- template<typename _Res, typename _Class, typename _Arg, typename... _Args>
- struct __result_of_memfun<_Res _Class::*, _Arg, _Args...>
- {
- typedef typename remove_cv<typename remove_reference<
- _Arg>::type>::type _Argval;
- typedef _Res _Class::* _MemPtr;
- typedef typename conditional<__or_<is_same<_Argval, _Class>,
- is_base_of<_Class, _Argval>>::value,
- __result_of_memfun_ref<_MemPtr, _Arg, _Args...>,
- __result_of_memfun_deref<_MemPtr, _Arg, _Args...>
- >::type::type type;
- };
- template<bool, bool, typename _Functor, typename... _ArgTypes>
- struct __result_of_impl
- {
- typedef __failure_type type;
- };
- template<typename _MemPtr, typename _Arg>
- struct __result_of_impl<true, false, _MemPtr, _Arg>
- : public __result_of_memobj<typename decay<_MemPtr>::type, _Arg>
- { };
- template<typename _MemPtr, typename _Arg, typename... _Args>
- struct __result_of_impl<false, true, _MemPtr, _Arg, _Args...>
- : public __result_of_memfun<typename decay<_MemPtr>::type, _Arg, _Args...>
- { };
- struct __result_of_other_impl
- {
- template<typename _Fn, typename... _Args>
- static __success_type<decltype(
- std::declval<_Fn>()(std::declval<_Args>()...)
- )> _S_test(int);
- template<typename...>
- static __failure_type _S_test(...);
- };
- template<typename _Functor, typename... _ArgTypes>
- struct __result_of_impl<false, false, _Functor, _ArgTypes...>
- : private __result_of_other_impl
- {
- typedef decltype(_S_test<_Functor, _ArgTypes...>(0)) type;
- };
- template<typename _Functor, typename... _ArgTypes>
- struct result_of<_Functor(_ArgTypes...)>
- : public __result_of_impl<
- is_member_object_pointer<
- typename remove_reference<_Functor>::type
- >::value,
- is_member_function_pointer<
- typename remove_reference<_Functor>::type
- >::value,
- _Functor, _ArgTypes...
- >::type
- { };
- template<size_t _Len, size_t _Align =
- __alignof__(typename __aligned_storage_msa<_Len>::__type)>
- using aligned_storage_t = typename aligned_storage<_Len, _Align>::type;
- template <size_t _Len, typename... _Types>
- using aligned_union_t = typename aligned_union<_Len, _Types...>::type;
- template<typename _Tp>
- using decay_t = typename decay<_Tp>::type;
- template<bool _Cond, typename _Tp = void>
- using enable_if_t = typename enable_if<_Cond, _Tp>::type;
- template<bool _Cond, typename _Iftrue, typename _Iffalse>
- using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type;
- template<typename... _Tp>
- using common_type_t = typename common_type<_Tp...>::type;
- template<typename _Tp>
- using underlying_type_t = typename underlying_type<_Tp>::type;
- template<typename _Tp>
- using result_of_t = typename result_of<_Tp>::type;
- template<typename...> using __void_t = void;
- # 2426 "/usr/include/c++/5.2.0/type_traits" 3
- }
- # 17 "/us/include/boost_1_64_0/boost/hana/core/default.hpp" 2
- namespace boost { namespace hana {
- 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
- { };
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/concept/constant.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/core/tag_of.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/core/tag_of.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/core/tag_of.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/core/tag_of.hpp"
- namespace boost { namespace hana {
- # 105 "/us/include/boost_1_64_0/boost/hana/fwd/core/tag_of.hpp"
- template <typename T, typename = void>
- struct tag_of;
- # 116 "/us/include/boost_1_64_0/boost/hana/fwd/core/tag_of.hpp"
- template <typename T>
- using tag_of_t = typename hana::tag_of<T>::type;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/core/tag_of.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/core/when.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/core/when.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/core/when.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/core/when.hpp"
- namespace boost { namespace hana {
- # 38 "/us/include/boost_1_64_0/boost/hana/fwd/core/when.hpp"
- template <bool condition>
- struct when;
- namespace core_detail {
- template <typename ...>
- struct always_true { static constexpr bool value = true; };
- }
- # 67 "/us/include/boost_1_64_0/boost/hana/fwd/core/when.hpp"
- template <typename ...Dummy>
- using when_valid = when<
- core_detail::always_true<Dummy...>::value
- >;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/core/when.hpp" 2
- # 16 "/us/include/boost_1_64_0/boost/hana/core/tag_of.hpp" 2
- namespace boost { namespace hana {
- template <typename T, typename>
- struct tag_of : tag_of<T, when<true>> { };
- 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> { };
- }}
- # 17 "/us/include/boost_1_64_0/boost/hana/concept/constant.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/integral_constant.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/detail/integral_constant.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/operators/adl.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/detail/operators/adl.hpp"
- namespace boost { namespace hana { namespace detail { namespace operators {
- # 30 "/us/include/boost_1_64_0/boost/hana/detail/operators/adl.hpp"
- template <typename ...>
- struct adl { };
- }} }}
- # 15 "/us/include/boost_1_64_0/boost/hana/detail/integral_constant.hpp" 2
- namespace boost { namespace hana {
- 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;
- };
- }
- # 233 "/us/include/boost_1_64_0/boost/hana/detail/integral_constant.hpp"
- template <typename T, T v>
- struct integral_constant
- : std::integral_constant<T, v>
- , detail::operators::adl<integral_constant<T, v>>
- {
- using type = integral_constant;
- static constexpr ic_detail::times_t<T, v> times{};
- using hana_tag = integral_constant_tag<T>;
- };
- }}
- # 18 "/us/include/boost_1_64_0/boost/hana/concept/constant.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/value.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/value.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/value.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/value.hpp"
- namespace boost { namespace hana {
- # 58 "/us/include/boost_1_64_0/boost/hana/fwd/value.hpp"
- 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>(); }
- # 90 "/us/include/boost_1_64_0/boost/hana/fwd/value.hpp"
- struct value_of_t {
- template <typename T>
- constexpr decltype(auto) operator()(T const&) const
- { return hana::value<T>(); }
- };
- constexpr value_of_t value_of{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/value.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/constant.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/value.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/integral_constant.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/integral_constant.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/integral_constant.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/integral_constant.hpp"
- namespace boost { namespace hana {
- # 69 "/us/include/boost_1_64_0/boost/hana/fwd/concept/integral_constant.hpp"
- template <typename C>
- struct IntegralConstant;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/integral_constant.hpp" 2
- namespace boost { namespace hana {
- 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>
- { };
- }
- template <typename C>
- struct IntegralConstant
- : detail::integral_constant_dispatch<C>
- { };
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/value.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/core/dispatch.hpp" 1
- # 14 "/us/include/boost_1_64_0/boost/hana/core/dispatch.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/dispatch_if.hpp" 1
- # 18 "/us/include/boost_1_64_0/boost/hana/detail/dispatch_if.hpp"
- namespace boost { namespace hana {
- struct deleted_implementation {
- template <typename ...T>
- static constexpr auto apply(T&& ...) = delete;
- };
- # 54 "/us/include/boost_1_64_0/boost/hana/detail/dispatch_if.hpp"
- }}
- # 14 "/us/include/boost_1_64_0/boost/hana/core/dispatch.hpp" 2
- # 18 "/us/include/boost_1_64_0/boost/hana/value.hpp" 2
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Constant<C>::value), value_impl<C>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Constant<C>::value,
- "hana::value<T>() requires 'T' to be a Constant");
- 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; }
- };
- }}
- # 19 "/us/include/boost_1_64_0/boost/hana/concept/constant.hpp" 2
- namespace boost { namespace hana {
- template <typename C>
- struct Constant
- : hana::integral_constant<bool,
- !is_default<value_impl<typename tag_of<C>::type>>::value
- >
- { };
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/assert.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/preprocessor.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/assert.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/if.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/if.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/if.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/if.hpp"
- namespace boost { namespace hana {
- # 45 "/us/include/boost_1_64_0/boost/hana/fwd/if.hpp"
- 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_{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/if.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/logical.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/logical.hpp"
- namespace boost { namespace hana {
- # 162 "/us/include/boost_1_64_0/boost/hana/fwd/concept/logical.hpp"
- template <typename L>
- struct Logical;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/eval_if.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/eval_if.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/eval_if.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/eval_if.hpp"
- namespace boost { namespace hana {
- # 143 "/us/include/boost_1_64_0/boost/hana/fwd/eval_if.hpp"
- 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{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/eval_if.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/bool.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/bool.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/bool.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/fwd/bool.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/integral_constant.hpp" 1
- # 19 "/us/include/boost_1_64_0/boost/hana/fwd/integral_constant.hpp"
- namespace boost { namespace hana {
- # 38 "/us/include/boost_1_64_0/boost/hana/fwd/integral_constant.hpp"
- template <typename T, T v>
- constexpr integral_constant<T, v> integral_c{};
- template <bool b>
- using bool_ = integral_constant<bool, b>;
- template <bool b>
- constexpr bool_<b> bool_c{};
- using true_ = bool_<true>;
- constexpr auto true_c = bool_c<true>;
- using false_ = bool_<false>;
- constexpr auto false_c = bool_c<false>;
- template <char c>
- using char_ = integral_constant<char, c>;
- template <char c>
- constexpr char_<c> char_c{};
- template <short i>
- using short_ = integral_constant<short, i>;
- template <short i>
- constexpr short_<i> short_c{};
- template <unsigned short i>
- using ushort_ = integral_constant<unsigned short, i>;
- template <unsigned short i>
- constexpr ushort_<i> ushort_c{};
- template <int i>
- using int_ = integral_constant<int, i>;
- template <int i>
- constexpr int_<i> int_c{};
- template <unsigned int i>
- using uint = integral_constant<unsigned int, i>;
- template <unsigned int i>
- constexpr uint<i> uint_c{};
- template <long i>
- using long_ = integral_constant<long, i>;
- template <long i>
- constexpr long_<i> long_c{};
- template <unsigned long i>
- using ulong = integral_constant<unsigned long, i>;
- template <unsigned long i>
- constexpr ulong<i> ulong_c{};
- template <long long i>
- using llong = integral_constant<long long, i>;
- template <long long i>
- constexpr llong<i> llong_c{};
- template <unsigned long long i>
- using ullong = integral_constant<unsigned long long, i>;
- template <unsigned long long i>
- constexpr ullong<i> ullong_c{};
- template <std::size_t i>
- using size_t = integral_constant<std::size_t, i>;
- template <std::size_t i>
- constexpr size_t<i> size_c{};
- namespace literals {
- # 170 "/us/include/boost_1_64_0/boost/hana/fwd/integral_constant.hpp"
- template <char ...c>
- constexpr auto operator"" _c();
- }
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/fwd/bool.hpp" 2
- # 13 "/us/include/boost_1_64_0/boost/hana/bool.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/core/to.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/core/to.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/core/to.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/core/to.hpp"
- namespace boost { namespace hana {
- # 101 "/us/include/boost_1_64_0/boost/hana/fwd/core/to.hpp"
- 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{};
- # 129 "/us/include/boost_1_64_0/boost/hana/fwd/core/to.hpp"
- template <typename From, typename To, typename = void>
- struct is_convertible;
- # 151 "/us/include/boost_1_64_0/boost/hana/fwd/core/to.hpp"
- template <bool = true>
- struct embedding { };
- # 169 "/us/include/boost_1_64_0/boost/hana/fwd/core/to.hpp"
- template <typename From, typename To, typename = void>
- struct is_embedded;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/core/to.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/foldable.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/foldable.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/foldable.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/foldable.hpp"
- namespace boost { namespace hana {
- # 137 "/us/include/boost_1_64_0/boost/hana/fwd/concept/foldable.hpp"
- template <typename T>
- struct Foldable;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/foldable.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fold_left.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/fold_left.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/fold_left.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/fold_left.hpp"
- namespace boost { namespace hana {
- # 73 "/us/include/boost_1_64_0/boost/hana/fwd/fold_left.hpp"
- 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{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/fold_left.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/foldable.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/fold_left.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/variadic/foldl1.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/detail/variadic/foldl1.hpp"
- namespace boost { namespace hana { namespace detail { namespace variadic {
- 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)...);
- }
- };
- 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;
- }} }}
- # 18 "/us/include/boost_1_64_0/boost/hana/fold_left.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/functional/partial.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/functional/partial.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/basic_tuple.hpp" 1
- # 14 "/us/include/boost_1_64_0/boost/hana/fwd/basic_tuple.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/core/make.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/core/make.hpp"
- namespace boost { namespace hana {
- # 54 "/us/include/boost_1_64_0/boost/hana/fwd/core/make.hpp"
- 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{};
- }}
- # 14 "/us/include/boost_1_64_0/boost/hana/fwd/basic_tuple.hpp" 2
- namespace boost { namespace hana {
- # 29 "/us/include/boost_1_64_0/boost/hana/fwd/basic_tuple.hpp"
- template <typename ...Xs>
- struct basic_tuple;
- struct basic_tuple_tag { };
- # 62 "/us/include/boost_1_64_0/boost/hana/fwd/basic_tuple.hpp"
- constexpr auto make_basic_tuple = make<basic_tuple_tag>;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/decay.hpp" 1
- # 19 "/us/include/boost_1_64_0/boost/hana/detail/decay.hpp"
- namespace boost { namespace hana { namespace detail {
- # 32 "/us/include/boost_1_64_0/boost/hana/detail/decay.hpp"
- 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..., ...); };
- } }}
- # 16 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/ebo.hpp" 1
- # 14 "/us/include/boost_1_64_0/boost/hana/detail/ebo.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/intrinsics.hpp" 1
- # 14 "/us/include/boost_1_64_0/boost/hana/detail/ebo.hpp" 2
- namespace _hana {
- # 50 "/us/include/boost_1_64_0/boost/hana/detail/ebo.hpp"
- template <typename K, typename V, bool =
- __is_empty(V) && !__is_final(V)
- >
- struct ebo;
- 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))
- { }
- };
- 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_;
- };
- 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_); }
- }
- namespace boost { namespace hana {
- namespace detail {
- using ::_hana::ebo;
- using ::_hana::ebo_get;
- }
- }}
- # 17 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/at.hpp" 1
- # 19 "/us/include/boost_1_64_0/boost/hana/fwd/at.hpp"
- namespace boost { namespace hana {
- # 54 "/us/include/boost_1_64_0/boost/hana/fwd/at.hpp"
- 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{};
- # 84 "/us/include/boost_1_64_0/boost/hana/fwd/at.hpp"
- template <std::size_t n, typename Xs>
- constexpr decltype(auto) at_c(Xs&& xs);
- }}
- # 18 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/sequence.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/concept/sequence.hpp"
- namespace boost { namespace hana {
- # 160 "/us/include/boost_1_64_0/boost/hana/fwd/concept/sequence.hpp"
- template <typename S, typename = void>
- struct Sequence : Sequence<S, when<true>> { };
- }}
- # 20 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/drop_front.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/drop_front.hpp"
- namespace boost { namespace hana {
- # 51 "/us/include/boost_1_64_0/boost/hana/fwd/drop_front.hpp"
- 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{};
- }}
- # 23 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/is_empty.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/is_empty.hpp"
- namespace boost { namespace hana {
- # 37 "/us/include/boost_1_64_0/boost/hana/fwd/is_empty.hpp"
- 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{};
- }}
- # 24 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/transform.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/transform.hpp"
- namespace boost { namespace hana {
- # 45 "/us/include/boost_1_64_0/boost/hana/fwd/transform.hpp"
- 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{};
- }}
- # 25 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/unpack.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/unpack.hpp"
- namespace boost { namespace hana {
- # 83 "/us/include/boost_1_64_0/boost/hana/fwd/unpack.hpp"
- 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{};
- }}
- # 26 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
- # 35 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp"
- # 1 "/usr/include/c++/5.2.0/utility" 1
- # 59 "/usr/include/c++/5.2.0/utility" 3
- # 69 "/usr/include/c++/5.2.0/utility" 3
- # 1 "/usr/include/c++/5.2.0/bits/stl_relops.h" 1 3
- # 67 "/usr/include/c++/5.2.0/bits/stl_relops.h" 3
- namespace std __attribute__ ((__visibility__ ("default")))
- {
- namespace rel_ops
- {
- # 85 "/usr/include/c++/5.2.0/bits/stl_relops.h" 3
- template <class _Tp>
- inline bool
- operator!=(const _Tp& __x, const _Tp& __y)
- { return !(__x == __y); }
- # 98 "/usr/include/c++/5.2.0/bits/stl_relops.h" 3
- template <class _Tp>
- inline bool
- operator>(const _Tp& __x, const _Tp& __y)
- { return __y < __x; }
- # 111 "/usr/include/c++/5.2.0/bits/stl_relops.h" 3
- template <class _Tp>
- inline bool
- operator<=(const _Tp& __x, const _Tp& __y)
- { return !(__y < __x); }
- # 124 "/usr/include/c++/5.2.0/bits/stl_relops.h" 3
- template <class _Tp>
- inline bool
- operator>=(const _Tp& __x, const _Tp& __y)
- { return !(__x < __y); }
- }
- }
- # 70 "/usr/include/c++/5.2.0/utility" 2 3
- # 1 "/usr/include/c++/5.2.0/bits/stl_pair.h" 1 3
- # 59 "/usr/include/c++/5.2.0/bits/stl_pair.h" 3
- # 1 "/usr/include/c++/5.2.0/bits/move.h" 1 3
- # 34 "/usr/include/c++/5.2.0/bits/move.h" 3
- # 1 "/usr/include/c++/5.2.0/bits/concept_check.h" 1 3
- # 34 "/usr/include/c++/5.2.0/bits/concept_check.h" 3
- # 35 "/usr/include/c++/5.2.0/bits/move.h" 2 3
- namespace std __attribute__ ((__visibility__ ("default")))
- {
- template<typename _Tp>
- inline _Tp*
- __addressof(_Tp& __r) noexcept
- {
- return reinterpret_cast<_Tp*>
- (&const_cast<char&>(reinterpret_cast<const volatile char&>(__r)));
- }
- }
- namespace std __attribute__ ((__visibility__ ("default")))
- {
- # 74 "/usr/include/c++/5.2.0/bits/move.h" 3
- template<typename _Tp>
- constexpr _Tp&&
- forward(typename std::remove_reference<_Tp>::type& __t) noexcept
- { return static_cast<_Tp&&>(__t); }
- template<typename _Tp>
- constexpr _Tp&&
- forward(typename std::remove_reference<_Tp>::type&& __t) noexcept
- {
- static_assert(!std::is_lvalue_reference<_Tp>::value, "template argument"
- " substituting _Tp is an lvalue reference type");
- return static_cast<_Tp&&>(__t);
- }
- template<typename _Tp>
- constexpr typename std::remove_reference<_Tp>::type&&
- move(_Tp&& __t) noexcept
- { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }
- template<typename _Tp>
- struct __move_if_noexcept_cond
- : public __and_<__not_<is_nothrow_move_constructible<_Tp>>,
- is_copy_constructible<_Tp>>::type { };
- # 118 "/usr/include/c++/5.2.0/bits/move.h" 3
- template<typename _Tp>
- constexpr typename
- conditional<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&>::type
- move_if_noexcept(_Tp& __x) noexcept
- { return std::move(__x); }
- # 133 "/usr/include/c++/5.2.0/bits/move.h" 3
- template<typename _Tp>
- inline _Tp*
- addressof(_Tp& __r) noexcept
- { return std::__addressof(__r); }
- template <typename _Tp, typename _Up = _Tp>
- inline _Tp
- __exchange(_Tp& __obj, _Up&& __new_val)
- {
- _Tp __old_val = std::move(__obj);
- __obj = std::forward<_Up>(__new_val);
- return __old_val;
- }
- }
- # 159 "/usr/include/c++/5.2.0/bits/move.h" 3
- namespace std __attribute__ ((__visibility__ ("default")))
- {
- # 174 "/usr/include/c++/5.2.0/bits/move.h" 3
- template<typename _Tp>
- inline void
- swap(_Tp& __a, _Tp& __b)
- noexcept(__and_<is_nothrow_move_constructible<_Tp>,
- is_nothrow_move_assignable<_Tp>>::value)
- {
- _Tp __tmp = std::move(__a);
- __a = std::move(__b);
- __b = std::move(__tmp);
- }
- template<typename _Tp, size_t _Nm>
- inline void
- swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
- noexcept(noexcept(swap(*__a, *__b)))
- {
- for (size_t __n = 0; __n < _Nm; ++__n)
- swap(__a[__n], __b[__n]);
- }
- }
- # 60 "/usr/include/c++/5.2.0/bits/stl_pair.h" 2 3
- namespace std __attribute__ ((__visibility__ ("default")))
- {
- # 76 "/usr/include/c++/5.2.0/bits/stl_pair.h" 3
- struct piecewise_construct_t { };
- constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t();
- template<typename...>
- class tuple;
- template<std::size_t...>
- struct _Index_tuple;
- # 95 "/usr/include/c++/5.2.0/bits/stl_pair.h" 3
- template<class _T1, class _T2>
- struct pair
- {
- typedef _T1 first_type;
- typedef _T2 second_type;
- _T1 first;
- _T2 second;
- constexpr pair()
- : first(), second() { }
- constexpr pair(const _T1& __a, const _T2& __b)
- : first(__a), second(__b) { }
- template<class _U1, class _U2, class = typename
- enable_if<__and_<is_convertible<const _U1&, _T1>,
- is_convertible<const _U2&, _T2>>::value>::type>
- constexpr pair(const pair<_U1, _U2>& __p)
- : first(__p.first), second(__p.second) { }
- constexpr pair(const pair&) = default;
- constexpr pair(pair&&) = default;
- template<class _U1, class = typename
- enable_if<is_convertible<_U1, _T1>::value>::type>
- constexpr pair(_U1&& __x, const _T2& __y)
- : first(std::forward<_U1>(__x)), second(__y) { }
- template<class _U2, class = typename
- enable_if<is_convertible<_U2, _T2>::value>::type>
- constexpr pair(const _T1& __x, _U2&& __y)
- : first(__x), second(std::forward<_U2>(__y)) { }
- template<class _U1, class _U2, class = typename
- enable_if<__and_<is_convertible<_U1, _T1>,
- is_convertible<_U2, _T2>>::value>::type>
- constexpr pair(_U1&& __x, _U2&& __y)
- : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { }
- template<class _U1, class _U2, class = typename
- enable_if<__and_<is_convertible<_U1, _T1>,
- is_convertible<_U2, _T2>>::value>::type>
- constexpr pair(pair<_U1, _U2>&& __p)
- : first(std::forward<_U1>(__p.first)),
- second(std::forward<_U2>(__p.second)) { }
- template<typename... _Args1, typename... _Args2>
- pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
- pair&
- operator=(const pair& __p)
- {
- first = __p.first;
- second = __p.second;
- return *this;
- }
- pair&
- operator=(pair&& __p)
- noexcept(__and_<is_nothrow_move_assignable<_T1>,
- is_nothrow_move_assignable<_T2>>::value)
- {
- first = std::forward<first_type>(__p.first);
- second = std::forward<second_type>(__p.second);
- return *this;
- }
- template<class _U1, class _U2>
- pair&
- operator=(const pair<_U1, _U2>& __p)
- {
- first = __p.first;
- second = __p.second;
- return *this;
- }
- template<class _U1, class _U2>
- pair&
- operator=(pair<_U1, _U2>&& __p)
- {
- first = std::forward<_U1>(__p.first);
- second = std::forward<_U2>(__p.second);
- return *this;
- }
- void
- swap(pair& __p)
- noexcept(noexcept(swap(first, __p.first))
- && noexcept(swap(second, __p.second)))
- {
- using std::swap;
- swap(first, __p.first);
- swap(second, __p.second);
- }
- private:
- template<typename... _Args1, std::size_t... _Indexes1,
- typename... _Args2, std::size_t... _Indexes2>
- pair(tuple<_Args1...>&, tuple<_Args2...>&,
- _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>);
- };
- template<class _T1, class _T2>
- inline constexpr bool
- operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
- { return __x.first == __y.first && __x.second == __y.second; }
- template<class _T1, class _T2>
- inline constexpr bool
- operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
- { return __x.first < __y.first
- || (!(__y.first < __x.first) && __x.second < __y.second); }
- template<class _T1, class _T2>
- inline constexpr bool
- operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
- { return !(__x == __y); }
- template<class _T1, class _T2>
- inline constexpr bool
- operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
- { return __y < __x; }
- template<class _T1, class _T2>
- inline constexpr bool
- operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
- { return !(__y < __x); }
- template<class _T1, class _T2>
- inline constexpr bool
- operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
- { return !(__x < __y); }
- template<class _T1, class _T2>
- inline void
- swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y)
- noexcept(noexcept(__x.swap(__y)))
- { __x.swap(__y); }
- # 273 "/usr/include/c++/5.2.0/bits/stl_pair.h" 3
- template<class _T1, class _T2>
- constexpr pair<typename __decay_and_strip<_T1>::__type,
- typename __decay_and_strip<_T2>::__type>
- make_pair(_T1&& __x, _T2&& __y)
- {
- typedef typename __decay_and_strip<_T1>::__type __ds_type1;
- typedef typename __decay_and_strip<_T2>::__type __ds_type2;
- typedef pair<__ds_type1, __ds_type2> __pair_type;
- return __pair_type(std::forward<_T1>(__x), std::forward<_T2>(__y));
- }
- # 293 "/usr/include/c++/5.2.0/bits/stl_pair.h" 3
- }
- # 71 "/usr/include/c++/5.2.0/utility" 2 3
- # 1 "/usr/include/c++/5.2.0/initializer_list" 1 3
- # 34 "/usr/include/c++/5.2.0/initializer_list" 3
- #pragma GCC visibility push(default)
- namespace std
- {
- template<class _E>
- class initializer_list
- {
- public:
- typedef _E value_type;
- typedef const _E& reference;
- typedef const _E& const_reference;
- typedef size_t size_type;
- typedef const _E* iterator;
- typedef const _E* const_iterator;
- private:
- iterator _M_array;
- size_type _M_len;
- constexpr initializer_list(const_iterator __a, size_type __l)
- : _M_array(__a), _M_len(__l) { }
- public:
- constexpr initializer_list() noexcept
- : _M_array(0), _M_len(0) { }
- constexpr size_type
- size() const noexcept { return _M_len; }
- constexpr const_iterator
- begin() const noexcept { return _M_array; }
- constexpr const_iterator
- end() const noexcept { return begin() + size(); }
- };
- template<class _Tp>
- constexpr const _Tp*
- begin(initializer_list<_Tp> __ils) noexcept
- { return __ils.begin(); }
- template<class _Tp>
- constexpr const _Tp*
- end(initializer_list<_Tp> __ils) noexcept
- { return __ils.end(); }
- }
- #pragma GCC visibility pop
- # 76 "/usr/include/c++/5.2.0/utility" 2 3
- namespace std __attribute__ ((__visibility__ ("default")))
- {
- template<class _Tp>
- class tuple_size;
- template<std::size_t _Int, class _Tp>
- class tuple_element;
- template<class _Tp1, class _Tp2>
- struct tuple_size<std::pair<_Tp1, _Tp2>>
- : public integral_constant<std::size_t, 2> { };
- template<class _Tp1, class _Tp2>
- struct tuple_element<0, std::pair<_Tp1, _Tp2>>
- { typedef _Tp1 type; };
- template<class _Tp1, class _Tp2>
- struct tuple_element<1, std::pair<_Tp1, _Tp2>>
- { typedef _Tp2 type; };
- template<std::size_t _Int>
- struct __pair_get;
- template<>
- struct __pair_get<0>
- {
- template<typename _Tp1, typename _Tp2>
- static constexpr _Tp1&
- __get(std::pair<_Tp1, _Tp2>& __pair) noexcept
- { return __pair.first; }
- template<typename _Tp1, typename _Tp2>
- static constexpr _Tp1&&
- __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept
- { return std::forward<_Tp1>(__pair.first); }
- template<typename _Tp1, typename _Tp2>
- static constexpr const _Tp1&
- __const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept
- { return __pair.first; }
- };
- template<>
- struct __pair_get<1>
- {
- template<typename _Tp1, typename _Tp2>
- static constexpr _Tp2&
- __get(std::pair<_Tp1, _Tp2>& __pair) noexcept
- { return __pair.second; }
- template<typename _Tp1, typename _Tp2>
- static constexpr _Tp2&&
- __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept
- { return std::forward<_Tp2>(__pair.second); }
- template<typename _Tp1, typename _Tp2>
- static constexpr const _Tp2&
- __const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept
- { return __pair.second; }
- };
- template<std::size_t _Int, class _Tp1, class _Tp2>
- constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&
- get(std::pair<_Tp1, _Tp2>& __in) noexcept
- { return __pair_get<_Int>::__get(__in); }
- template<std::size_t _Int, class _Tp1, class _Tp2>
- constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&&
- get(std::pair<_Tp1, _Tp2>&& __in) noexcept
- { return __pair_get<_Int>::__move_get(std::move(__in)); }
- template<std::size_t _Int, class _Tp1, class _Tp2>
- constexpr const typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&
- get(const std::pair<_Tp1, _Tp2>& __in) noexcept
- { return __pair_get<_Int>::__const_get(__in); }
- template <typename _Tp, typename _Up>
- constexpr _Tp&
- get(pair<_Tp, _Up>& __p) noexcept
- { return __p.first; }
- template <typename _Tp, typename _Up>
- constexpr const _Tp&
- get(const pair<_Tp, _Up>& __p) noexcept
- { return __p.first; }
- template <typename _Tp, typename _Up>
- constexpr _Tp&&
- get(pair<_Tp, _Up>&& __p) noexcept
- { return std::move(__p.first); }
- template <typename _Tp, typename _Up>
- constexpr _Tp&
- get(pair<_Up, _Tp>& __p) noexcept
- { return __p.second; }
- template <typename _Tp, typename _Up>
- constexpr const _Tp&
- get(const pair<_Up, _Tp>& __p) noexcept
- { return __p.second; }
- template <typename _Tp, typename _Up>
- constexpr _Tp&&
- get(pair<_Up, _Tp>&& __p) noexcept
- { return std::move(__p.second); }
- template <typename _Tp, typename _Up = _Tp>
- inline _Tp
- exchange(_Tp& __obj, _Up&& __new_val)
- { return std::__exchange(__obj, std::forward<_Up>(__new_val)); }
- template<size_t... _Indexes>
- struct _Index_tuple
- {
- typedef _Index_tuple<_Indexes..., sizeof...(_Indexes)> __next;
- };
- template<size_t _Num>
- struct _Build_index_tuple
- {
- typedef typename _Build_index_tuple<_Num - 1>::__type::__next __type;
- };
- template<>
- struct _Build_index_tuple<0>
- {
- typedef _Index_tuple<> __type;
- };
- template<typename _Tp, _Tp... _Idx>
- struct integer_sequence
- {
- typedef _Tp value_type;
- static constexpr size_t size() { return sizeof...(_Idx); }
- };
- template<typename _Tp, _Tp _Num,
- typename _ISeq = typename _Build_index_tuple<_Num>::__type>
- struct _Make_integer_sequence;
- template<typename _Tp, _Tp _Num, size_t... _Idx>
- struct _Make_integer_sequence<_Tp, _Num, _Index_tuple<_Idx...>>
- {
- static_assert( _Num >= 0,
- "Cannot make integer sequence of negative length" );
- typedef integer_sequence<_Tp, static_cast<_Tp>(_Idx)...> __type;
- };
- template<typename _Tp, _Tp _Num>
- using make_integer_sequence
- = typename _Make_integer_sequence<_Tp, _Num>::__type;
- template<size_t... _Idx>
- using index_sequence = integer_sequence<size_t, _Idx...>;
- template<size_t _Num>
- using make_index_sequence = make_integer_sequence<size_t, _Num>;
- template<typename... _Types>
- using index_sequence_for = make_index_sequence<sizeof...(_Types)>;
- }
- # 35 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
- namespace boost { namespace hana {
- namespace detail {
- template <std::size_t> struct bti;
- 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))...
- { }
- };
- }
- 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;
- 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)...)
- { }
- };
- template <typename ...Xn>
- struct tag_of<basic_tuple<Xn...>> {
- using type = basic_tuple_tag;
- };
- 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)
- )...
- );
- }
- };
- 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)
- ))...
- );
- }
- };
- 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 {}; }
- };
- 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));
- }
- 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)...
- };
- }
- };
- # 259 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp"
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/functional/partial.hpp" 2
- namespace boost { namespace hana {
- # 49 "/us/include/boost_1_64_0/boost/hana/functional/partial.hpp"
- 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{};
- }}
- # 19 "/us/include/boost_1_64_0/boost/hana/fold_left.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/unpack.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/unpack.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/accessors.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/accessors.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/accessors.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/accessors.hpp"
- namespace boost { namespace hana {
- # 39 "/us/include/boost_1_64_0/boost/hana/fwd/accessors.hpp"
- 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{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/accessors.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/struct.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/struct.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/struct.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/struct.hpp"
- namespace boost { namespace hana {
- # 152 "/us/include/boost_1_64_0/boost/hana/fwd/concept/struct.hpp"
- template <typename S>
- struct Struct;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/struct.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/accessors.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/concept/struct.hpp" 2
- namespace boost { namespace hana {
- template <typename S>
- struct Struct
- : hana::integral_constant<bool,
- !is_default<accessors_impl<typename tag_of<S>::type>>::value
- >
- { };
- }}
- # 15 "/us/include/boost_1_64_0/boost/hana/accessors.hpp" 2
- namespace boost { namespace hana {
- template <typename S>
- struct accessors_t {
- static_assert(hana::Struct<S>::value,
- "hana::accessors<S> requires 'S' to be a Struct");
- constexpr decltype(auto) operator()() const {
- using Accessors = ::std::conditional_t< (hana::Struct<S>::value), accessors_impl<S>, ::boost::hana::deleted_implementation >;
- 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
- { };
- }}
- # 15 "/us/include/boost_1_64_0/boost/hana/unpack.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/at.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/at.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/iterable.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/iterable.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/iterable.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/iterable.hpp"
- namespace boost { namespace hana {
- # 145 "/us/include/boost_1_64_0/boost/hana/fwd/concept/iterable.hpp"
- template <typename It>
- struct Iterable;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/iterable.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/at.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/concept/iterable.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/drop_front.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/drop_front.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/iterable.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/drop_front.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/integral_constant.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/integral_constant.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/bool.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/integral_constant.hpp" 2
- # 20 "/us/include/boost_1_64_0/boost/hana/drop_front.hpp" 2
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Iterable<It>::value && hana::IntegralConstant<N>::value), drop_front_impl<It>, ::boost::hana::deleted_implementation >;
- 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");
- 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>{});
- }
- 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;
- };
- }}
- # 20 "/us/include/boost_1_64_0/boost/hana/concept/iterable.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/is_empty.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/is_empty.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/iterable.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/is_empty.hpp" 2
- namespace boost { namespace hana {
- template <typename Xs>
- constexpr auto is_empty_t::operator()(Xs const& xs) const {
- using It = typename hana::tag_of<Xs>::type;
- using IsEmpty = ::std::conditional_t< (hana::Iterable<It>::value), is_empty_impl<It>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Iterable<It>::value,
- "hana::is_empty(xs) requires 'xs' to be an Iterable");
- return IsEmpty::apply(xs);
- }
- template <typename It, bool condition>
- struct is_empty_impl<It, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
- }}
- # 21 "/us/include/boost_1_64_0/boost/hana/concept/iterable.hpp" 2
- namespace boost { namespace hana {
- 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
- >
- { };
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/at.hpp" 2
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Iterable<It>::value), at_impl<It>, ::boost::hana::deleted_implementation >;
- 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");
- return At::apply(static_cast<Xs&&>(xs), n);
- }
- 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>{});
- }
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/unpack.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/foldable.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/unpack.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/first.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/first.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/first.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/first.hpp"
- namespace boost { namespace hana {
- # 37 "/us/include/boost_1_64_0/boost/hana/fwd/first.hpp"
- 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{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/first.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/product.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/product.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/product.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/product.hpp"
- namespace boost { namespace hana {
- # 99 "/us/include/boost_1_64_0/boost/hana/fwd/concept/product.hpp"
- template <typename P>
- struct Product;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/product.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/first.hpp" 1
- # 19 "/us/include/boost_1_64_0/boost/hana/concept/product.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/second.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/second.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/second.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/second.hpp"
- namespace boost { namespace hana {
- # 36 "/us/include/boost_1_64_0/boost/hana/fwd/second.hpp"
- 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{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/second.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/product.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/second.hpp" 2
- namespace boost { namespace hana {
- template <typename Pair>
- constexpr decltype(auto) second_t::operator()(Pair&& pair) const {
- using P = typename hana::tag_of<Pair>::type;
- using Second = ::std::conditional_t< (hana::Product<P>::value), second_impl<P>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Product<P>::value,
- "hana::second(pair) requires 'pair' to be a Product");
- return Second::apply(static_cast<Pair&&>(pair));
- }
- template <typename P, bool condition>
- struct second_impl<P, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
- }}
- # 20 "/us/include/boost_1_64_0/boost/hana/concept/product.hpp" 2
- namespace boost { namespace hana {
- 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
- >
- { };
- }}
- # 15 "/us/include/boost_1_64_0/boost/hana/first.hpp" 2
- namespace boost { namespace hana {
- template <typename Pair>
- constexpr decltype(auto) first_t::operator()(Pair&& pair) const {
- using P = typename hana::tag_of<Pair>::type;
- using First = ::std::conditional_t< (hana::Product<P>::value), first_impl<P>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Product<P>::value,
- "hana::first(pair) requires 'pair' to be a Product");
- return First::apply(static_cast<Pair&&>(pair));
- }
- template <typename P, bool condition>
- struct first_impl<P, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
- }}
- # 22 "/us/include/boost_1_64_0/boost/hana/unpack.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/length.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/length.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/length.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/length.hpp"
- namespace boost { namespace hana {
- # 38 "/us/include/boost_1_64_0/boost/hana/fwd/length.hpp"
- 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{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/length.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/foldable.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/length.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/unpack.hpp" 1
- # 19 "/us/include/boost_1_64_0/boost/hana/length.hpp" 2
- namespace boost { namespace hana {
- template <typename Xs>
- constexpr auto length_t::operator()(Xs const& xs) const {
- using S = typename hana::tag_of<Xs>::type;
- using Length = ::std::conditional_t< (hana::Foldable<S>::value), length_impl<S>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Foldable<S>::value,
- "hana::length(xs) requires 'xs' to be Foldable");
- return Length::apply(xs);
- }
- 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{});
- }
- };
- }}
- # 25 "/us/include/boost_1_64_0/boost/hana/unpack.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/pair.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/pair.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/pair.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/pair.hpp"
- namespace boost { namespace hana {
- # 120 "/us/include/boost_1_64_0/boost/hana/fwd/pair.hpp"
- template <typename First, typename Second>
- struct pair;
- struct pair_tag { };
- # 150 "/us/include/boost_1_64_0/boost/hana/fwd/pair.hpp"
- constexpr auto make_pair = make<pair_tag>;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/pair.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/operators/comparable.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/comparable.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/equal.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/fwd/equal.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/nested_to_fwd.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/detail/nested_to_fwd.hpp"
- namespace boost { namespace hana { namespace detail {
- template <typename Algorithm>
- struct nested_to_t {
- template <typename X>
- constexpr decltype(auto) operator()(X&& x) const;
- };
- # 40 "/us/include/boost_1_64_0/boost/hana/detail/nested_to_fwd.hpp"
- 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;
- } }}
- # 15 "/us/include/boost_1_64_0/boost/hana/fwd/equal.hpp" 2
- namespace boost { namespace hana {
- # 68 "/us/include/boost_1_64_0/boost/hana/fwd/equal.hpp"
- 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{};
- }}
- # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/comparable.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/not_equal.hpp" 1
- # 18 "/us/include/boost_1_64_0/boost/hana/fwd/not_equal.hpp"
- namespace boost { namespace hana {
- # 58 "/us/include/boost_1_64_0/boost/hana/fwd/not_equal.hpp"
- 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{};
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/detail/operators/comparable.hpp" 2
- namespace boost { namespace hana { 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)); }
- }
- } }}
- # 20 "/us/include/boost_1_64_0/boost/hana/pair.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/operators/orderable.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/orderable.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/greater.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/fwd/greater.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/nested_than_fwd.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/detail/nested_than_fwd.hpp"
- namespace boost { namespace hana { namespace detail {
- template <typename Algorithm>
- struct nested_than_t {
- template <typename X>
- constexpr decltype(auto) operator()(X&& x) const;
- };
- # 40 "/us/include/boost_1_64_0/boost/hana/detail/nested_than_fwd.hpp"
- 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;
- } }}
- # 15 "/us/include/boost_1_64_0/boost/hana/fwd/greater.hpp" 2
- namespace boost { namespace hana {
- # 41 "/us/include/boost_1_64_0/boost/hana/fwd/greater.hpp"
- 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{};
- }}
- # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/orderable.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/greater_equal.hpp" 1
- # 18 "/us/include/boost_1_64_0/boost/hana/fwd/greater_equal.hpp"
- namespace boost { namespace hana {
- # 42 "/us/include/boost_1_64_0/boost/hana/fwd/greater_equal.hpp"
- 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{};
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/detail/operators/orderable.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/less.hpp" 1
- # 18 "/us/include/boost_1_64_0/boost/hana/fwd/less.hpp"
- namespace boost { namespace hana {
- # 41 "/us/include/boost_1_64_0/boost/hana/fwd/less.hpp"
- 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{};
- }}
- # 17 "/us/include/boost_1_64_0/boost/hana/detail/operators/orderable.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/less_equal.hpp" 1
- # 18 "/us/include/boost_1_64_0/boost/hana/fwd/less_equal.hpp"
- namespace boost { namespace hana {
- # 42 "/us/include/boost_1_64_0/boost/hana/fwd/less_equal.hpp"
- 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{};
- }}
- # 18 "/us/include/boost_1_64_0/boost/hana/detail/operators/orderable.hpp" 2
- namespace boost { namespace hana { 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)); }
- }
- } }}
- # 21 "/us/include/boost_1_64_0/boost/hana/pair.hpp" 2
- # 30 "/us/include/boost_1_64_0/boost/hana/pair.hpp"
- namespace boost { namespace hana {
- namespace detail {
- template <int> struct pix;
- }
- 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>
- {
- template <typename ...dummy, typename = typename std::enable_if<
- ::std::is_constructible<First, dummy...>::value &&
- ::std::is_constructible<Second, dummy...>::value
- >::type>
- constexpr pair()
- : detail::ebo<detail::pix<0>, First>()
- , detail::ebo<detail::pix<1>, Second>()
- { }
- template <typename ...dummy, typename = typename std::enable_if<
- ::std::is_constructible<First, First const&, dummy...>::value &&
- ::std::is_constructible<Second, Second const&, dummy...>::value
- >::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<
- ::std::is_convertible<T&&, First>::value &&
- ::std::is_convertible<U&&, Second>::value
- >::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))
- { }
- template <typename T, typename U, typename = typename std::enable_if<
- ::std::is_constructible<First, T const&>::value &&
- ::std::is_constructible<Second, U const&>::value &&
- ::std::is_convertible<T const&, First>::value &&
- ::std::is_convertible<U const&, Second>::value
- >::type>
- constexpr pair(pair<T, U> const& other)
- : detail::ebo<detail::pix<0>, First>(detail::ebo_get<detail::pix<0>>(other))
- , detail::ebo<detail::pix<1>, Second>(detail::ebo_get<detail::pix<1>>(other))
- { }
- template <typename T, typename U, typename = typename std::enable_if<
- ::std::is_constructible<First, T&&>::value &&
- ::std::is_constructible<Second, U&&>::value &&
- ::std::is_convertible<T&&, First>::value &&
- ::std::is_convertible<U&&, Second>::value
- >::type>
- constexpr pair(pair<T, U>&& other)
- : detail::ebo<detail::pix<0>, First>(static_cast<T&&>(detail::ebo_get<detail::pix<0>>(other)))
- , detail::ebo<detail::pix<1>, Second>(static_cast<U&&>(detail::ebo_get<detail::pix<1>>(other)))
- { }
- template <typename T, typename U, typename = typename std::enable_if<
- ::std::is_assignable<First&, T const&>::value &&
- ::std::is_assignable<Second&, U const&>::value
- >::type>
- constexpr pair& operator=(pair<T, U> const& other) {
- detail::ebo_get<detail::pix<0>>(*this) = detail::ebo_get<detail::pix<0>>(other);
- detail::ebo_get<detail::pix<1>>(*this) = detail::ebo_get<detail::pix<1>>(other);
- return *this;
- }
- template <typename T, typename U, typename = typename std::enable_if<
- ::std::is_assignable<First&, T&&>::value &&
- ::std::is_assignable<Second&, U&&>::value
- >::type>
- constexpr pair& operator=(pair<T, U>&& other) {
- detail::ebo_get<detail::pix<0>>(*this) = static_cast<T&&>(detail::ebo_get<detail::pix<0>>(other));
- detail::ebo_get<detail::pix<1>>(*this) = static_cast<U&&>(detail::ebo_get<detail::pix<1>>(other));
- return *this;
- }
- ~pair() = default;
- friend struct first_impl<pair_tag>;
- friend struct second_impl<pair_tag>;
- template <typename F, typename S> friend struct pair;
- };
- template <typename First, typename Second>
- struct tag_of<pair<First, Second>> {
- using type = pair_tag;
- };
- namespace detail {
- template <>
- struct comparable_operators<pair_tag> {
- static constexpr bool value = true;
- };
- template <>
- struct orderable_operators<pair_tag> {
- static constexpr bool value = true;
- };
- }
- 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)
- );
- }
- };
- }}
- # 26 "/us/include/boost_1_64_0/boost/hana/unpack.hpp" 2
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Foldable<S>::value), unpack_impl<S>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Foldable<S>::value,
- "hana::unpack(xs, f) requires 'xs' to be Foldable");
- return Unpack::apply(static_cast<Xs&&>(xs), static_cast<F&&>(f));
- }
- 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>{});
- }
- };
- 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))
- );
- }
- };
- namespace struct_detail {
- 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)));
- }
- };
- }}
- # 20 "/us/include/boost_1_64_0/boost/hana/fold_left.hpp" 2
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Foldable<S>::value), fold_left_impl<S>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Foldable<S>::value,
- "hana::fold_left(xs, state, f) requires 'xs' to be Foldable");
- 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 = ::std::conditional_t< (hana::Foldable<S>::value), fold_left_impl<S>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Foldable<S>::value,
- "hana::fold_left(xs, f) requires 'xs' to be Foldable");
- return FoldLeft::apply(static_cast<Xs&&>(xs), static_cast<F&&>(f));
- }
- 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_ {
- 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}
- );
- }
- 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)
- )
- );
- }
- };
- }}
- # 19 "/us/include/boost_1_64_0/boost/hana/concept/foldable.hpp" 2
- namespace boost { namespace hana {
- 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
- >
- { };
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/core/to.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/sequence.hpp" 1
- # 21 "/us/include/boost_1_64_0/boost/hana/concept/sequence.hpp"
- namespace boost { namespace hana {
- 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>
- { };
- }
- template <typename S, bool condition>
- struct Sequence<S, when<condition>>
- : detail::sequence_dispatch<S>
- { };
- }}
- # 17 "/us/include/boost_1_64_0/boost/hana/core/to.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/core/common.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/core/common.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/core/common.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/core/common.hpp"
- namespace boost { namespace hana {
- # 70 "/us/include/boost_1_64_0/boost/hana/fwd/core/common.hpp"
- template <typename T, typename U, typename = void>
- struct common;
- # 88 "/us/include/boost_1_64_0/boost/hana/fwd/core/common.hpp"
- template <typename T, typename U, typename = void>
- struct has_common;
- # 99 "/us/include/boost_1_64_0/boost/hana/fwd/core/common.hpp"
- template <typename T, typename U>
- using common_t = typename common<T, U>::type;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/core/common.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/canonical_constant.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/detail/canonical_constant.hpp"
- namespace boost { namespace hana { namespace detail {
- # 25 "/us/include/boost_1_64_0/boost/hana/detail/canonical_constant.hpp"
- template <typename T>
- struct CanonicalConstant {
- using value_type = T;
- };
- } }}
- # 1 "/us/include/boost_1_64_0/boost/hana/core/to.hpp" 1
- # 34 "/us/include/boost_1_64_0/boost/hana/detail/canonical_constant.hpp" 2
- namespace boost { namespace hana {
- 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 {}; }
- };
- template <typename T>
- struct IntegralConstant<detail::CanonicalConstant<T>> {
- static constexpr bool value = std::is_integral<T>::value;
- };
- }}
- # 18 "/us/include/boost_1_64_0/boost/hana/core/common.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/std_common_type.hpp" 1
- # 19 "/us/include/boost_1_64_0/boost/hana/detail/std_common_type.hpp"
- namespace boost { namespace hana { namespace detail {
- 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;
- };
- } }}
- # 19 "/us/include/boost_1_64_0/boost/hana/core/common.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/void_t.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/detail/void_t.hpp"
- namespace boost { namespace hana { namespace detail {
- template <typename ...>
- using void_t = void;
- } }}
- # 20 "/us/include/boost_1_64_0/boost/hana/core/common.hpp" 2
- namespace boost { namespace hana {
- template <typename T, typename U, typename>
- struct common : common<T, U, when<true>> { };
- 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;
- };
- 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
- { };
- namespace constant_detail {
- 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;
- };
- }}
- # 19 "/us/include/boost_1_64_0/boost/hana/core/to.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/core/make.hpp" 1
- # 20 "/us/include/boost_1_64_0/boost/hana/core/make.hpp"
- namespace boost { namespace hana {
- template <typename Datatype, typename>
- struct make_impl : make_impl<Datatype, when<true>> { };
- 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)...); }
- template <typename ...X>
- static constexpr auto make_helper(long, X&& ...) {
- static_assert((sizeof...(X), false),
- "there exists no constructor for the given data type");
- }
- template <typename ...X>
- static constexpr decltype(auto) apply(X&& ...x)
- { return make_helper(int{}, static_cast<X&&>(x)...); }
- };
- }}
- # 21 "/us/include/boost_1_64_0/boost/hana/core/to.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/wrong.hpp" 1
- # 18 "/us/include/boost_1_64_0/boost/hana/detail/wrong.hpp"
- namespace boost { namespace hana { namespace detail {
- # 29 "/us/include/boost_1_64_0/boost/hana/detail/wrong.hpp"
- template <typename ...>
- struct wrong : std::false_type { };
- } }}
- # 22 "/us/include/boost_1_64_0/boost/hana/core/to.hpp" 2
- namespace boost { namespace hana {
- template <typename To, typename From, typename>
- struct to_impl : to_impl<To, From, when<true>> { };
- namespace convert_detail {
- struct no_conversion { };
- template <typename ...>
- struct is_valid { static constexpr bool value = true; };
- }
- template <typename To, typename From, bool condition>
- struct to_impl<To, From, when<condition>> : convert_detail::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 to_impl<To, From, when<convert_detail::is_valid<
- decltype(static_cast<To>(std::declval<From>()))
- >::value>> {
- template <typename X>
- static constexpr To apply(X&& x)
- { return static_cast<To>(static_cast<X&&>(x)); }
- };
- template <typename To>
- struct to_impl<To, To> : embedding<> {
- template <typename X>
- static constexpr X apply(X&& x)
- { return static_cast<X&&>(x); }
- };
- 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));
- }
- template <> struct to_impl<long double, double> : embedding<> { static constexpr long double apply(double x) { return x; } };
- template <> struct to_impl<long double, float> : embedding<> { static constexpr long double apply(float x) { return x; } };
- template <> struct to_impl<double, float> : embedding<> { static constexpr double apply(float x) { return x; } };
- template <> struct to_impl<signed long long, signed long> : embedding<> { static constexpr signed long long apply(signed long x) { return x; } };
- template <> struct to_impl<signed long long, signed int> : embedding<> { static constexpr signed long long apply(signed int x) { return x; } };
- template <> struct to_impl<signed long long, signed short> : embedding<> { static constexpr signed long long apply(signed short x) { return x; } };
- template <> struct to_impl<signed long long, signed char> : embedding<> { static constexpr signed long long apply(signed char x) { return x; } };
- template <> struct to_impl<signed long, signed int> : embedding<> { static constexpr signed long apply(signed int x) { return x; } };
- template <> struct to_impl<signed long, signed short> : embedding<> { static constexpr signed long apply(signed short x) { return x; } };
- template <> struct to_impl<signed long, signed char> : embedding<> { static constexpr signed long apply(signed char x) { return x; } };
- template <> struct to_impl<signed int, signed short> : embedding<> { static constexpr signed int apply(signed short x) { return x; } };
- template <> struct to_impl<signed int, signed char> : embedding<> { static constexpr signed int apply(signed char x) { return x; } };
- template <> struct to_impl<signed short, signed char> : embedding<> { static constexpr signed short apply(signed char x) { return x; } };
- template <> struct to_impl<unsigned long long, unsigned long> : embedding<> { static constexpr unsigned long long apply(unsigned long x) { return x; } };
- template <> struct to_impl<unsigned long long, unsigned int> : embedding<> { static constexpr unsigned long long apply(unsigned int x) { return x; } };
- template <> struct to_impl<unsigned long long, unsigned short> : embedding<> { static constexpr unsigned long long apply(unsigned short x) { return x; } };
- template <> struct to_impl<unsigned long long, unsigned char> : embedding<> { static constexpr unsigned long long apply(unsigned char x) { return x; } };
- template <> struct to_impl<unsigned long, unsigned int> : embedding<> { static constexpr unsigned long apply(unsigned int x) { return x; } };
- template <> struct to_impl<unsigned long, unsigned short> : embedding<> { static constexpr unsigned long apply(unsigned short x) { return x; } };
- template <> struct to_impl<unsigned long, unsigned char> : embedding<> { static constexpr unsigned long apply(unsigned char x) { return x; } };
- template <> struct to_impl<unsigned int, unsigned short> : embedding<> { static constexpr unsigned int apply(unsigned short x) { return x; } };
- template <> struct to_impl<unsigned int, unsigned char> : embedding<> { static constexpr unsigned int apply(unsigned char x) { return x; } };
- template <> struct to_impl<unsigned short, unsigned char> : embedding<> { static constexpr unsigned short apply(unsigned char x) { return x; } };
- 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;
- };
- }
- # 134 "/us/include/boost_1_64_0/boost/hana/core/to.hpp"
- template <> struct to_impl<detail::copy_char_signedness<long long>::type, char> : embedding<> { static constexpr detail::copy_char_signedness<long long>::type apply(char x) { return x; } };
- template <> struct to_impl<detail::copy_char_signedness<long>::type, char> : embedding<> { static constexpr detail::copy_char_signedness<long>::type apply(char x) { return x; } };
- template <> struct to_impl<detail::copy_char_signedness<int>::type, char> : embedding<> { static constexpr detail::copy_char_signedness<int>::type apply(char x) { return x; } };
- template <> struct to_impl<detail::copy_char_signedness<short>::type, char> : embedding<> { static constexpr detail::copy_char_signedness<short>::type apply(char x) { return x; } };
- template <typename T>
- struct to_impl<T*, decltype(nullptr)> : embedding<> {
- static constexpr T* apply(decltype(nullptr)) { return nullptr; }
- };
- 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 { };
- 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 { };
- 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>()); }
- };
- 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>); }
- };
- }}
- # 17 "/us/include/boost_1_64_0/boost/hana/bool.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/operators/arithmetic.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/arithmetic.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/div.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/div.hpp"
- namespace boost { namespace hana {
- # 47 "/us/include/boost_1_64_0/boost/hana/fwd/div.hpp"
- 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{};
- }}
- # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/arithmetic.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/minus.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/minus.hpp"
- namespace boost { namespace hana {
- # 55 "/us/include/boost_1_64_0/boost/hana/fwd/minus.hpp"
- 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{};
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/detail/operators/arithmetic.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/mod.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/mod.hpp"
- namespace boost { namespace hana {
- # 50 "/us/include/boost_1_64_0/boost/hana/fwd/mod.hpp"
- 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{};
- }}
- # 17 "/us/include/boost_1_64_0/boost/hana/detail/operators/arithmetic.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/mult.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/mult.hpp"
- namespace boost { namespace hana {
- # 51 "/us/include/boost_1_64_0/boost/hana/fwd/mult.hpp"
- 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{};
- }}
- # 18 "/us/include/boost_1_64_0/boost/hana/detail/operators/arithmetic.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/negate.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/negate.hpp"
- namespace boost { namespace hana {
- # 30 "/us/include/boost_1_64_0/boost/hana/fwd/negate.hpp"
- 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{};
- }}
- # 19 "/us/include/boost_1_64_0/boost/hana/detail/operators/arithmetic.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/plus.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/plus.hpp"
- namespace boost { namespace hana {
- # 51 "/us/include/boost_1_64_0/boost/hana/fwd/plus.hpp"
- 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{};
- }}
- # 20 "/us/include/boost_1_64_0/boost/hana/detail/operators/arithmetic.hpp" 2
- namespace boost { namespace hana { 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)); }
- }
- } }}
- # 19 "/us/include/boost_1_64_0/boost/hana/bool.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/operators/logical.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/logical.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/and.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/and.hpp"
- namespace boost { namespace hana {
- # 38 "/us/include/boost_1_64_0/boost/hana/fwd/and.hpp"
- 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_{};
- }}
- # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/logical.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/not.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/not.hpp"
- namespace boost { namespace hana {
- # 35 "/us/include/boost_1_64_0/boost/hana/fwd/not.hpp"
- 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_{};
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/detail/operators/logical.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/or.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/or.hpp"
- namespace boost { namespace hana {
- # 38 "/us/include/boost_1_64_0/boost/hana/fwd/or.hpp"
- 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_{};
- }}
- # 17 "/us/include/boost_1_64_0/boost/hana/detail/operators/logical.hpp" 2
- namespace boost { namespace hana { 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)); }
- }
- } }}
- # 21 "/us/include/boost_1_64_0/boost/hana/bool.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/eval.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/eval.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/eval.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/eval.hpp"
- namespace boost { namespace hana {
- # 46 "/us/include/boost_1_64_0/boost/hana/fwd/eval.hpp"
- 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{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/eval.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/functional/id.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/functional/id.hpp"
- namespace boost { namespace hana {
- # 27 "/us/include/boost_1_64_0/boost/hana/functional/id.hpp"
- struct id_t {
- template <typename T>
- constexpr T operator()(T&& t) const {
- return static_cast<T&&>(t);
- }
- };
- constexpr id_t id{};
- }}
- # 18 "/us/include/boost_1_64_0/boost/hana/eval.hpp" 2
- namespace boost { namespace hana {
- 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)
- );
- }
- 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{}); }
- };
- }}
- # 23 "/us/include/boost_1_64_0/boost/hana/bool.hpp" 2
- # 34 "/us/include/boost_1_64_0/boost/hana/bool.hpp"
- namespace boost { namespace hana {
- 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)); }
- template <typename T, T v>
- constexpr with_index_t<T, v> times_t<T, v>::with_index;
- }
- 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>;
- };
- 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;
- };
- }
- # 118 "/us/include/boost_1_64_0/boost/hana/bool.hpp"
- template <typename U, U u> constexpr integral_constant<decltype(+ u), (+ u)> operator +(integral_constant<U, u>) { return {}; }
- template <typename U, U u> constexpr integral_constant<decltype(~ u), (~ u)> operator ~(integral_constant<U, u>) { return {}; }
- template <typename U, U u, typename V, V v> constexpr integral_constant<decltype(u & v), (u & v)> operator &(integral_constant<U, u>, integral_constant<V, v>) { return {}; }
- template <typename U, U u, typename V, V v> constexpr integral_constant<decltype(u | v), (u | v)> operator |(integral_constant<U, u>, integral_constant<V, v>) { return {}; }
- template <typename U, U u, typename V, V v> constexpr integral_constant<decltype(u ^ v), (u ^ v)> operator ^(integral_constant<U, u>, integral_constant<V, v>) { return {}; }
- template <typename U, U u, typename V, V v> constexpr integral_constant<decltype(u << v), (u << v)> operator <<(integral_constant<U, u>, integral_constant<V, v>) { return {}; }
- template <typename U, U u, typename V, V v> constexpr integral_constant<decltype(u >> v), (u >> v)> operator >>(integral_constant<U, u>, integral_constant<V, v>) { return {}; }
- # 135 "/us/include/boost_1_64_0/boost/hana/bool.hpp"
- 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) {
- base = 16;
- offset = 2;
- }
- else if (is_binary) {
- base = 2;
- offset = 2;
- }
- else if (starts_with_zero) {
- 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];
- 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...})>{};
- }
- }
- 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>{}; }
- };
- 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));
- }
- 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); }
- };
- }}
- # 15 "/us/include/boost_1_64_0/boost/hana/eval_if.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/eval_if.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/if.hpp" 1
- # 21 "/us/include/boost_1_64_0/boost/hana/eval_if.hpp" 2
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Logical<Bool>::value), eval_if_impl<Bool>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Logical<Bool>::value,
- "hana::eval_if(cond, then, else) requires 'cond' to be a Logical");
- return EvalIf::apply(static_cast<Cond&&>(cond),
- static_cast<Then&&>(then_),
- static_cast<Else&&>(else_));
- }
- template <typename L, bool condition>
- struct eval_if_impl<L, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
- 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));
- }
- };
- 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));
- }
- };
- }}
- # 19 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/not.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/not.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/not.hpp" 2
- # 25 "/us/include/boost_1_64_0/boost/hana/not.hpp"
- namespace boost { namespace hana {
- template <typename X>
- constexpr decltype(auto) not_t::operator()(X&& x) const {
- using Bool = typename hana::tag_of<X>::type;
- using Not = ::std::conditional_t< (hana::Logical<Bool>::value), hana::not_impl<Bool>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Logical<Bool>::value,
- "hana::not_(cond) requires 'cond' to be a Logical");
- return Not::apply(static_cast<X&&>(x));
- }
- 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>{}); }
- };
- }}
- # 20 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/while.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/while.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/while.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/while.hpp"
- namespace boost { namespace hana {
- # 59 "/us/include/boost_1_64_0/boost/hana/fwd/while.hpp"
- 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_{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/while.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp" 1
- # 18 "/us/include/boost_1_64_0/boost/hana/while.hpp" 2
- # 27 "/us/include/boost_1_64_0/boost/hana/while.hpp"
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Logical<Bool>::value), while_impl<Bool>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Logical<Bool>::value,
- "hana::while_(pred, state, f) requires 'pred(state)' to be a Logical");
- return While::apply(static_cast<Pred&&>(pred),
- static_cast<State&&>(state),
- static_cast<F&&>(f));
- }
- 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) {
- # 106 "/us/include/boost_1_64_0/boost/hana/while.hpp"
- 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));
- }
- };
- }}
- # 21 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp" 2
- namespace boost { namespace hana {
- 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
- >
- { };
- }}
- # 15 "/us/include/boost_1_64_0/boost/hana/if.hpp" 2
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Logical<Bool>::value), if_impl<Bool>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Logical<Bool>::value,
- "hana::if_(cond, then, else) requires 'cond' to be a Logical");
- return If::apply(static_cast<Cond&&>(cond),
- static_cast<Then&&>(then_),
- static_cast<Else&&>(else_));
- }
- 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)}
- );
- }
- };
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/assert.hpp" 2
- # 1 "/usr/include/c++/5.2.0/cstdio" 1
- # 40 "/usr/include/c++/5.2.0/cstdio" 3
- # 1 "/usr/include/stdio.h" 1 3 4
- # 29 "/usr/include/stdio.h" 3 4
- extern "C" {
- # 1 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 1 3 4
- # 34 "/usr/include/stdio.h" 2 3 4
- # 1 "/usr/include/x86_64-linux-gnu/bits/types.h" 1 3 4
- # 27 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4
- # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
- # 28 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4
- typedef unsigned char __u_char;
- typedef unsigned short int __u_short;
- typedef unsigned int __u_int;
- typedef unsigned long int __u_long;
- typedef signed char __int8_t;
- typedef unsigned char __uint8_t;
- typedef signed short int __int16_t;
- typedef unsigned short int __uint16_t;
- typedef signed int __int32_t;
- typedef unsigned int __uint32_t;
- typedef signed long int __int64_t;
- typedef unsigned long int __uint64_t;
- typedef long int __quad_t;
- typedef unsigned long int __u_quad_t;
- # 121 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4
- # 1 "/usr/include/x86_64-linux-gnu/bits/typesizes.h" 1 3 4
- # 122 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4
- typedef unsigned long int __dev_t;
- typedef unsigned int __uid_t;
- typedef unsigned int __gid_t;
- typedef unsigned long int __ino_t;
- typedef unsigned long int __ino64_t;
- typedef unsigned int __mode_t;
- typedef unsigned long int __nlink_t;
- typedef long int __off_t;
- typedef long int __off64_t;
- typedef int __pid_t;
- typedef struct { int __val[2]; } __fsid_t;
- typedef long int __clock_t;
- typedef unsigned long int __rlim_t;
- typedef unsigned long int __rlim64_t;
- typedef unsigned int __id_t;
- typedef long int __time_t;
- typedef unsigned int __useconds_t;
- typedef long int __suseconds_t;
- typedef int __daddr_t;
- typedef int __key_t;
- typedef int __clockid_t;
- typedef void * __timer_t;
- typedef long int __blksize_t;
- typedef long int __blkcnt_t;
- typedef long int __blkcnt64_t;
- typedef unsigned long int __fsblkcnt_t;
- typedef unsigned long int __fsblkcnt64_t;
- typedef unsigned long int __fsfilcnt_t;
- typedef unsigned long int __fsfilcnt64_t;
- typedef long int __fsword_t;
- typedef long int __ssize_t;
- typedef long int __syscall_slong_t;
- typedef unsigned long int __syscall_ulong_t;
- typedef __off64_t __loff_t;
- typedef __quad_t *__qaddr_t;
- typedef char *__caddr_t;
- typedef long int __intptr_t;
- typedef unsigned int __socklen_t;
- # 36 "/usr/include/stdio.h" 2 3 4
- struct _IO_FILE;
- typedef struct _IO_FILE FILE;
- # 64 "/usr/include/stdio.h" 3 4
- typedef struct _IO_FILE __FILE;
- # 74 "/usr/include/stdio.h" 3 4
- # 1 "/usr/include/libio.h" 1 3 4
- # 31 "/usr/include/libio.h" 3 4
- # 1 "/usr/include/_G_config.h" 1 3 4
- # 15 "/usr/include/_G_config.h" 3 4
- # 1 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 1 3 4
- # 16 "/usr/include/_G_config.h" 2 3 4
- # 1 "/usr/include/wchar.h" 1 3 4
- # 82 "/usr/include/wchar.h" 3 4
- typedef struct
- {
- int __count;
- union
- {
- unsigned int __wch;
- char __wchb[4];
- } __value;
- } __mbstate_t;
- # 21 "/usr/include/_G_config.h" 2 3 4
- typedef struct
- {
- __off_t __pos;
- __mbstate_t __state;
- } _G_fpos_t;
- typedef struct
- {
- __off64_t __pos;
- __mbstate_t __state;
- } _G_fpos64_t;
- # 32 "/usr/include/libio.h" 2 3 4
- # 49 "/usr/include/libio.h" 3 4
- # 1 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stdarg.h" 1 3 4
- # 30 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stdarg.h" 3 4
- typedef __builtin_va_list va_list;
- # 48 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stdarg.h" 3 4
- typedef __builtin_va_list __gnuc_va_list;
- # 50 "/usr/include/libio.h" 2 3 4
- # 144 "/usr/include/libio.h" 3 4
- struct _IO_jump_t; struct _IO_FILE;
- # 154 "/usr/include/libio.h" 3 4
- typedef void _IO_lock_t;
- struct _IO_marker {
- struct _IO_marker *_next;
- struct _IO_FILE *_sbuf;
- int _pos;
- # 177 "/usr/include/libio.h" 3 4
- };
- enum __codecvt_result
- {
- __codecvt_ok,
- __codecvt_partial,
- __codecvt_error,
- __codecvt_noconv
- };
- # 245 "/usr/include/libio.h" 3 4
- struct _IO_FILE {
- int _flags;
- char* _IO_read_ptr;
- char* _IO_read_end;
- char* _IO_read_base;
- char* _IO_write_base;
- char* _IO_write_ptr;
- char* _IO_write_end;
- char* _IO_buf_base;
- char* _IO_buf_end;
- char *_IO_save_base;
- char *_IO_backup_base;
- char *_IO_save_end;
- struct _IO_marker *_markers;
- struct _IO_FILE *_chain;
- int _fileno;
- int _flags2;
- __off_t _old_offset;
- unsigned short _cur_column;
- signed char _vtable_offset;
- char _shortbuf[1];
- _IO_lock_t *_lock;
- # 293 "/usr/include/libio.h" 3 4
- __off64_t _offset;
- # 302 "/usr/include/libio.h" 3 4
- void *__pad1;
- void *__pad2;
- void *__pad3;
- void *__pad4;
- size_t __pad5;
- int _mode;
- char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
- };
- struct _IO_FILE_plus;
- extern struct _IO_FILE_plus _IO_2_1_stdin_;
- extern struct _IO_FILE_plus _IO_2_1_stdout_;
- extern struct _IO_FILE_plus _IO_2_1_stderr_;
- # 338 "/usr/include/libio.h" 3 4
- typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
- typedef __ssize_t __io_write_fn (void *__cookie, const char *__buf,
- size_t __n);
- typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);
- typedef int __io_close_fn (void *__cookie);
- typedef __io_read_fn cookie_read_function_t;
- typedef __io_write_fn cookie_write_function_t;
- typedef __io_seek_fn cookie_seek_function_t;
- typedef __io_close_fn cookie_close_function_t;
- typedef struct
- {
- __io_read_fn *read;
- __io_write_fn *write;
- __io_seek_fn *seek;
- __io_close_fn *close;
- } _IO_cookie_io_functions_t;
- typedef _IO_cookie_io_functions_t cookie_io_functions_t;
- struct _IO_cookie_file;
- extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
- void *__cookie, _IO_cookie_io_functions_t __fns);
- extern "C" {
- extern int __underflow (_IO_FILE *);
- extern int __uflow (_IO_FILE *);
- extern int __overflow (_IO_FILE *, int);
- # 434 "/usr/include/libio.h" 3 4
- extern int _IO_getc (_IO_FILE *__fp);
- extern int _IO_putc (int __c, _IO_FILE *__fp);
- extern int _IO_feof (_IO_FILE *__fp) throw ();
- extern int _IO_ferror (_IO_FILE *__fp) throw ();
- extern int _IO_peekc_locked (_IO_FILE *__fp);
- extern void _IO_flockfile (_IO_FILE *) throw ();
- extern void _IO_funlockfile (_IO_FILE *) throw ();
- extern int _IO_ftrylockfile (_IO_FILE *) throw ();
- # 464 "/usr/include/libio.h" 3 4
- extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
- __gnuc_va_list, int *__restrict);
- extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
- __gnuc_va_list);
- extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t);
- extern size_t _IO_sgetn (_IO_FILE *, void *, size_t);
- extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int);
- extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int);
- extern void _IO_free_backup_area (_IO_FILE *) throw ();
- # 526 "/usr/include/libio.h" 3 4
- }
- # 75 "/usr/include/stdio.h" 2 3 4
- typedef __gnuc_va_list va_list;
- # 90 "/usr/include/stdio.h" 3 4
- typedef __off_t off_t;
- typedef __off64_t off64_t;
- typedef __ssize_t ssize_t;
- typedef _G_fpos_t fpos_t;
- typedef _G_fpos64_t fpos64_t;
- # 164 "/usr/include/stdio.h" 3 4
- # 1 "/usr/include/x86_64-linux-gnu/bits/stdio_lim.h" 1 3 4
- # 165 "/usr/include/stdio.h" 2 3 4
- extern struct _IO_FILE *stdin;
- extern struct _IO_FILE *stdout;
- extern struct _IO_FILE *stderr;
- extern int remove (const char *__filename) throw ();
- extern int rename (const char *__old, const char *__new) throw ();
- extern int renameat (int __oldfd, const char *__old, int __newfd,
- const char *__new) throw ();
- # 195 "/usr/include/stdio.h" 3 4
- extern FILE *tmpfile (void) ;
- # 205 "/usr/include/stdio.h" 3 4
- extern FILE *tmpfile64 (void) ;
- extern char *tmpnam (char *__s) throw () ;
- extern char *tmpnam_r (char *__s) throw () ;
- # 227 "/usr/include/stdio.h" 3 4
- extern char *tempnam (const char *__dir, const char *__pfx)
- throw () __attribute__ ((__malloc__)) ;
- # 237 "/usr/include/stdio.h" 3 4
- extern int fclose (FILE *__stream);
- extern int fflush (FILE *__stream);
- # 252 "/usr/include/stdio.h" 3 4
- extern int fflush_unlocked (FILE *__stream);
- # 262 "/usr/include/stdio.h" 3 4
- extern int fcloseall (void);
- # 272 "/usr/include/stdio.h" 3 4
- extern FILE *fopen (const char *__restrict __filename,
- const char *__restrict __modes) ;
- extern FILE *freopen (const char *__restrict __filename,
- const char *__restrict __modes,
- FILE *__restrict __stream) ;
- # 297 "/usr/include/stdio.h" 3 4
- extern FILE *fopen64 (const char *__restrict __filename,
- const char *__restrict __modes) ;
- extern FILE *freopen64 (const char *__restrict __filename,
- const char *__restrict __modes,
- FILE *__restrict __stream) ;
- extern FILE *fdopen (int __fd, const char *__modes) throw () ;
- extern FILE *fopencookie (void *__restrict __magic_cookie,
- const char *__restrict __modes,
- _IO_cookie_io_functions_t __io_funcs) throw () ;
- extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
- throw () ;
- extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) throw () ;
- extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw ();
- extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
- int __modes, size_t __n) throw ();
- extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
- size_t __size) throw ();
- extern void setlinebuf (FILE *__stream) throw ();
- # 356 "/usr/include/stdio.h" 3 4
- extern int fprintf (FILE *__restrict __stream,
- const char *__restrict __format, ...);
- extern int printf (const char *__restrict __format, ...);
- extern int sprintf (char *__restrict __s,
- const char *__restrict __format, ...) throw ();
- extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
- __gnuc_va_list __arg);
- extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);
- extern int vsprintf (char *__restrict __s, const char *__restrict __format,
- __gnuc_va_list __arg) throw ();
- extern int snprintf (char *__restrict __s, size_t __maxlen,
- const char *__restrict __format, ...)
- throw () __attribute__ ((__format__ (__printf__, 3, 4)));
- extern int vsnprintf (char *__restrict __s, size_t __maxlen,
- const char *__restrict __format, __gnuc_va_list __arg)
- throw () __attribute__ ((__format__ (__printf__, 3, 0)));
- extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,
- __gnuc_va_list __arg)
- throw () __attribute__ ((__format__ (__printf__, 2, 0))) ;
- extern int __asprintf (char **__restrict __ptr,
- const char *__restrict __fmt, ...)
- throw () __attribute__ ((__format__ (__printf__, 2, 3))) ;
- extern int asprintf (char **__restrict __ptr,
- const char *__restrict __fmt, ...)
- throw () __attribute__ ((__format__ (__printf__, 2, 3))) ;
- extern int vdprintf (int __fd, const char *__restrict __fmt,
- __gnuc_va_list __arg)
- __attribute__ ((__format__ (__printf__, 2, 0)));
- extern int dprintf (int __fd, const char *__restrict __fmt, ...)
- __attribute__ ((__format__ (__printf__, 2, 3)));
- # 425 "/usr/include/stdio.h" 3 4
- extern int fscanf (FILE *__restrict __stream,
- const char *__restrict __format, ...) ;
- extern int scanf (const char *__restrict __format, ...) ;
- extern int sscanf (const char *__restrict __s,
- const char *__restrict __format, ...) throw ();
- # 471 "/usr/include/stdio.h" 3 4
- extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
- __gnuc_va_list __arg)
- __attribute__ ((__format__ (__scanf__, 2, 0))) ;
- extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)
- __attribute__ ((__format__ (__scanf__, 1, 0))) ;
- extern int vsscanf (const char *__restrict __s,
- const char *__restrict __format, __gnuc_va_list __arg)
- throw () __attribute__ ((__format__ (__scanf__, 2, 0)));
- # 531 "/usr/include/stdio.h" 3 4
- extern int fgetc (FILE *__stream);
- extern int getc (FILE *__stream);
- extern int getchar (void);
- # 550 "/usr/include/stdio.h" 3 4
- extern int getc_unlocked (FILE *__stream);
- extern int getchar_unlocked (void);
- # 561 "/usr/include/stdio.h" 3 4
- extern int fgetc_unlocked (FILE *__stream);
- # 573 "/usr/include/stdio.h" 3 4
- extern int fputc (int __c, FILE *__stream);
- extern int putc (int __c, FILE *__stream);
- extern int putchar (int __c);
- # 594 "/usr/include/stdio.h" 3 4
- extern int fputc_unlocked (int __c, FILE *__stream);
- extern int putc_unlocked (int __c, FILE *__stream);
- extern int putchar_unlocked (int __c);
- extern int getw (FILE *__stream);
- extern int putw (int __w, FILE *__stream);
- # 622 "/usr/include/stdio.h" 3 4
- extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
- ;
- # 649 "/usr/include/stdio.h" 3 4
- extern char *fgets_unlocked (char *__restrict __s, int __n,
- FILE *__restrict __stream) ;
- # 665 "/usr/include/stdio.h" 3 4
- extern __ssize_t __getdelim (char **__restrict __lineptr,
- size_t *__restrict __n, int __delimiter,
- FILE *__restrict __stream) ;
- extern __ssize_t getdelim (char **__restrict __lineptr,
- size_t *__restrict __n, int __delimiter,
- FILE *__restrict __stream) ;
- extern __ssize_t getline (char **__restrict __lineptr,
- size_t *__restrict __n,
- FILE *__restrict __stream) ;
- # 689 "/usr/include/stdio.h" 3 4
- extern int fputs (const char *__restrict __s, FILE *__restrict __stream);
- extern int puts (const char *__s);
- extern int ungetc (int __c, FILE *__stream);
- extern size_t fread (void *__restrict __ptr, size_t __size,
- size_t __n, FILE *__restrict __stream) ;
- extern size_t fwrite (const void *__restrict __ptr, size_t __size,
- size_t __n, FILE *__restrict __s);
- # 726 "/usr/include/stdio.h" 3 4
- extern int fputs_unlocked (const char *__restrict __s,
- FILE *__restrict __stream);
- # 737 "/usr/include/stdio.h" 3 4
- extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
- size_t __n, FILE *__restrict __stream) ;
- extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
- size_t __n, FILE *__restrict __stream);
- # 749 "/usr/include/stdio.h" 3 4
- extern int fseek (FILE *__stream, long int __off, int __whence);
- extern long int ftell (FILE *__stream) ;
- extern void rewind (FILE *__stream);
- # 773 "/usr/include/stdio.h" 3 4
- extern int fseeko (FILE *__stream, __off_t __off, int __whence);
- extern __off_t ftello (FILE *__stream) ;
- # 798 "/usr/include/stdio.h" 3 4
- extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
- extern int fsetpos (FILE *__stream, const fpos_t *__pos);
- # 818 "/usr/include/stdio.h" 3 4
- extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
- extern __off64_t ftello64 (FILE *__stream) ;
- extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
- extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos);
- extern void clearerr (FILE *__stream) throw ();
- extern int feof (FILE *__stream) throw () ;
- extern int ferror (FILE *__stream) throw () ;
- extern void clearerr_unlocked (FILE *__stream) throw ();
- extern int feof_unlocked (FILE *__stream) throw () ;
- extern int ferror_unlocked (FILE *__stream) throw () ;
- # 846 "/usr/include/stdio.h" 3 4
- extern void perror (const char *__s);
- # 1 "/usr/include/x86_64-linux-gnu/bits/sys_errlist.h" 1 3 4
- # 26 "/usr/include/x86_64-linux-gnu/bits/sys_errlist.h" 3 4
- extern int sys_nerr;
- extern const char *const sys_errlist[];
- extern int _sys_nerr;
- extern const char *const _sys_errlist[];
- # 854 "/usr/include/stdio.h" 2 3 4
- extern int fileno (FILE *__stream) throw () ;
- extern int fileno_unlocked (FILE *__stream) throw () ;
- # 873 "/usr/include/stdio.h" 3 4
- extern FILE *popen (const char *__command, const char *__modes) ;
- extern int pclose (FILE *__stream);
- extern char *ctermid (char *__s) throw ();
- extern char *cuserid (char *__s);
- struct obstack;
- extern int obstack_printf (struct obstack *__restrict __obstack,
- const char *__restrict __format, ...)
- throw () __attribute__ ((__format__ (__printf__, 2, 3)));
- extern int obstack_vprintf (struct obstack *__restrict __obstack,
- const char *__restrict __format,
- __gnuc_va_list __args)
- throw () __attribute__ ((__format__ (__printf__, 2, 0)));
- extern void flockfile (FILE *__stream) throw ();
- extern int ftrylockfile (FILE *__stream) throw () ;
- extern void funlockfile (FILE *__stream) throw ();
- # 943 "/usr/include/stdio.h" 3 4
- }
- # 43 "/usr/include/c++/5.2.0/cstdio" 2 3
- # 96 "/usr/include/c++/5.2.0/cstdio" 3
- namespace std
- {
- using ::FILE;
- using ::fpos_t;
- using ::clearerr;
- using ::fclose;
- using ::feof;
- using ::ferror;
- using ::fflush;
- using ::fgetc;
- using ::fgetpos;
- using ::fgets;
- using ::fopen;
- using ::fprintf;
- using ::fputc;
- using ::fputs;
- using ::fread;
- using ::freopen;
- using ::fscanf;
- using ::fseek;
- using ::fsetpos;
- using ::ftell;
- using ::fwrite;
- using ::getc;
- using ::getchar;
- using ::perror;
- using ::printf;
- using ::putc;
- using ::putchar;
- using ::puts;
- using ::remove;
- using ::rename;
- using ::rewind;
- using ::scanf;
- using ::setbuf;
- using ::setvbuf;
- using ::sprintf;
- using ::sscanf;
- using ::tmpfile;
- using ::ungetc;
- using ::vfprintf;
- using ::vprintf;
- using ::vsprintf;
- }
- # 157 "/usr/include/c++/5.2.0/cstdio" 3
- namespace __gnu_cxx
- {
- # 175 "/usr/include/c++/5.2.0/cstdio" 3
- using ::snprintf;
- using ::vfscanf;
- using ::vscanf;
- using ::vsnprintf;
- using ::vsscanf;
- }
- namespace std
- {
- using ::__gnu_cxx::snprintf;
- using ::__gnu_cxx::vfscanf;
- using ::__gnu_cxx::vscanf;
- using ::__gnu_cxx::vsnprintf;
- using ::__gnu_cxx::vsscanf;
- }
- # 19 "/us/include/boost_1_64_0/boost/hana/assert.hpp" 2
- # 1 "/usr/include/c++/5.2.0/cstdlib" 1
- # 40 "/usr/include/c++/5.2.0/cstdlib" 3
- # 72 "/usr/include/c++/5.2.0/cstdlib" 3
- # 1 "/usr/include/stdlib.h" 1 3 4
- # 32 "/usr/include/stdlib.h" 3 4
- # 1 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 1 3 4
- # 33 "/usr/include/stdlib.h" 2 3 4
- extern "C" {
- # 1 "/usr/include/x86_64-linux-gnu/bits/waitflags.h" 1 3 4
- # 50 "/usr/include/x86_64-linux-gnu/bits/waitflags.h" 3 4
- typedef enum
- {
- P_ALL,
- P_PID,
- P_PGID
- } idtype_t;
- # 42 "/usr/include/stdlib.h" 2 3 4
- # 1 "/usr/include/x86_64-linux-gnu/bits/waitstatus.h" 1 3 4
- # 64 "/usr/include/x86_64-linux-gnu/bits/waitstatus.h" 3 4
- # 1 "/usr/include/endian.h" 1 3 4
- # 36 "/usr/include/endian.h" 3 4
- # 1 "/usr/include/x86_64-linux-gnu/bits/endian.h" 1 3 4
- # 37 "/usr/include/endian.h" 2 3 4
- # 60 "/usr/include/endian.h" 3 4
- # 1 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 1 3 4
- # 28 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 3 4
- # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
- # 29 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 2 3 4
- # 1 "/usr/include/x86_64-linux-gnu/bits/byteswap-16.h" 1 3 4
- # 36 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 2 3 4
- # 61 "/usr/include/endian.h" 2 3 4
- # 65 "/usr/include/x86_64-linux-gnu/bits/waitstatus.h" 2 3 4
- union wait
- {
- int w_status;
- struct
- {
- unsigned int __w_termsig:7;
- unsigned int __w_coredump:1;
- unsigned int __w_retcode:8;
- unsigned int:16;
- } __wait_terminated;
- struct
- {
- unsigned int __w_stopval:8;
- unsigned int __w_stopsig:8;
- unsigned int:16;
- } __wait_stopped;
- };
- # 43 "/usr/include/stdlib.h" 2 3 4
- # 97 "/usr/include/stdlib.h" 3 4
- typedef struct
- {
- int quot;
- int rem;
- } div_t;
- typedef struct
- {
- long int quot;
- long int rem;
- } ldiv_t;
- __extension__ typedef struct
- {
- long long int quot;
- long long int rem;
- } lldiv_t;
- # 139 "/usr/include/stdlib.h" 3 4
- extern size_t __ctype_get_mb_cur_max (void) throw () ;
- extern double atof (const char *__nptr)
- throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
- extern int atoi (const char *__nptr)
- throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
- extern long int atol (const char *__nptr)
- throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
- __extension__ extern long long int atoll (const char *__nptr)
- throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
- extern double strtod (const char *__restrict __nptr,
- char **__restrict __endptr)
- throw () __attribute__ ((__nonnull__ (1)));
- extern float strtof (const char *__restrict __nptr,
- char **__restrict __endptr) throw () __attribute__ ((__nonnull__ (1)));
- extern long double strtold (const char *__restrict __nptr,
- char **__restrict __endptr)
- throw () __attribute__ ((__nonnull__ (1)));
- extern long int strtol (const char *__restrict __nptr,
- char **__restrict __endptr, int __base)
- throw () __attribute__ ((__nonnull__ (1)));
- extern unsigned long int strtoul (const char *__restrict __nptr,
- char **__restrict __endptr, int __base)
- throw () __attribute__ ((__nonnull__ (1)));
- __extension__
- extern long long int strtoq (const char *__restrict __nptr,
- char **__restrict __endptr, int __base)
- throw () __attribute__ ((__nonnull__ (1)));
- __extension__
- extern unsigned long long int strtouq (const char *__restrict __nptr,
- char **__restrict __endptr, int __base)
- throw () __attribute__ ((__nonnull__ (1)));
- __extension__
- extern long long int strtoll (const char *__restrict __nptr,
- char **__restrict __endptr, int __base)
- throw () __attribute__ ((__nonnull__ (1)));
- __extension__
- extern unsigned long long int strtoull (const char *__restrict __nptr,
- char **__restrict __endptr, int __base)
- throw () __attribute__ ((__nonnull__ (1)));
- # 235 "/usr/include/stdlib.h" 3 4
- # 1 "/usr/include/xlocale.h" 1 3 4
- # 27 "/usr/include/xlocale.h" 3 4
- typedef struct __locale_struct
- {
- struct __locale_data *__locales[13];
- const unsigned short int *__ctype_b;
- const int *__ctype_tolower;
- const int *__ctype_toupper;
- const char *__names[13];
- } *__locale_t;
- typedef __locale_t locale_t;
- # 236 "/usr/include/stdlib.h" 2 3 4
- extern long int strtol_l (const char *__restrict __nptr,
- char **__restrict __endptr, int __base,
- __locale_t __loc) throw () __attribute__ ((__nonnull__ (1, 4)));
- extern unsigned long int strtoul_l (const char *__restrict __nptr,
- char **__restrict __endptr,
- int __base, __locale_t __loc)
- throw () __attribute__ ((__nonnull__ (1, 4)));
- __extension__
- extern long long int strtoll_l (const char *__restrict __nptr,
- char **__restrict __endptr, int __base,
- __locale_t __loc)
- throw () __attribute__ ((__nonnull__ (1, 4)));
- __extension__
- extern unsigned long long int strtoull_l (const char *__restrict __nptr,
- char **__restrict __endptr,
- int __base, __locale_t __loc)
- throw () __attribute__ ((__nonnull__ (1, 4)));
- extern double strtod_l (const char *__restrict __nptr,
- char **__restrict __endptr, __locale_t __loc)
- throw () __attribute__ ((__nonnull__ (1, 3)));
- extern float strtof_l (const char *__restrict __nptr,
- char **__restrict __endptr, __locale_t __loc)
- throw () __attribute__ ((__nonnull__ (1, 3)));
- extern long double strtold_l (const char *__restrict __nptr,
- char **__restrict __endptr,
- __locale_t __loc)
- throw () __attribute__ ((__nonnull__ (1, 3)));
- # 305 "/usr/include/stdlib.h" 3 4
- extern char *l64a (long int __n) throw () ;
- extern long int a64l (const char *__s)
- throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
- # 1 "/usr/include/x86_64-linux-gnu/sys/types.h" 1 3 4
- # 27 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
- extern "C" {
- typedef __u_char u_char;
- typedef __u_short u_short;
- typedef __u_int u_int;
- typedef __u_long u_long;
- typedef __quad_t quad_t;
- typedef __u_quad_t u_quad_t;
- typedef __fsid_t fsid_t;
- typedef __loff_t loff_t;
- typedef __ino_t ino_t;
- typedef __ino64_t ino64_t;
- typedef __dev_t dev_t;
- typedef __gid_t gid_t;
- typedef __mode_t mode_t;
- typedef __nlink_t nlink_t;
- typedef __uid_t uid_t;
- # 98 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
- typedef __pid_t pid_t;
- typedef __id_t id_t;
- # 115 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
- typedef __daddr_t daddr_t;
- typedef __caddr_t caddr_t;
- typedef __key_t key_t;
- # 132 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
- # 1 "/usr/include/time.h" 1 3 4
- # 59 "/usr/include/time.h" 3 4
- typedef __clock_t clock_t;
- # 75 "/usr/include/time.h" 3 4
- typedef __time_t time_t;
- # 91 "/usr/include/time.h" 3 4
- typedef __clockid_t clockid_t;
- # 103 "/usr/include/time.h" 3 4
- typedef __timer_t timer_t;
- # 133 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
- typedef __useconds_t useconds_t;
- typedef __suseconds_t suseconds_t;
- # 1 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 1 3 4
- # 147 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
- typedef unsigned long int ulong;
- typedef unsigned short int ushort;
- typedef unsigned int uint;
- # 194 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
- typedef int int8_t __attribute__ ((__mode__ (__QI__)));
- typedef int int16_t __attribute__ ((__mode__ (__HI__)));
- typedef int int32_t __attribute__ ((__mode__ (__SI__)));
- typedef int int64_t __attribute__ ((__mode__ (__DI__)));
- typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
- typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
- typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
- typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));
- typedef int register_t __attribute__ ((__mode__ (__word__)));
- # 219 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
- # 1 "/usr/include/x86_64-linux-gnu/sys/select.h" 1 3 4
- # 30 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
- # 1 "/usr/include/x86_64-linux-gnu/bits/select.h" 1 3 4
- # 22 "/usr/include/x86_64-linux-gnu/bits/select.h" 3 4
- # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
- # 23 "/usr/include/x86_64-linux-gnu/bits/select.h" 2 3 4
- # 31 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
- # 1 "/usr/include/x86_64-linux-gnu/bits/sigset.h" 1 3 4
- # 22 "/usr/include/x86_64-linux-gnu/bits/sigset.h" 3 4
- typedef int __sig_atomic_t;
- typedef struct
- {
- unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
- } __sigset_t;
- # 34 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
- typedef __sigset_t sigset_t;
- # 1 "/usr/include/time.h" 1 3 4
- # 120 "/usr/include/time.h" 3 4
- struct timespec
- {
- __time_t tv_sec;
- __syscall_slong_t tv_nsec;
- };
- # 44 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
- # 1 "/usr/include/x86_64-linux-gnu/bits/time.h" 1 3 4
- # 30 "/usr/include/x86_64-linux-gnu/bits/time.h" 3 4
- struct timeval
- {
- __time_t tv_sec;
- __suseconds_t tv_usec;
- };
- # 46 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
- typedef long int __fd_mask;
- # 64 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
- typedef struct
- {
- __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))];
- } fd_set;
- typedef __fd_mask fd_mask;
- # 96 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
- extern "C" {
- # 106 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
- extern int select (int __nfds, fd_set *__restrict __readfds,
- fd_set *__restrict __writefds,
- fd_set *__restrict __exceptfds,
- struct timeval *__restrict __timeout);
- # 118 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
- extern int pselect (int __nfds, fd_set *__restrict __readfds,
- fd_set *__restrict __writefds,
- fd_set *__restrict __exceptfds,
- const struct timespec *__restrict __timeout,
- const __sigset_t *__restrict __sigmask);
- # 131 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
- }
- # 220 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
- # 1 "/usr/include/x86_64-linux-gnu/sys/sysmacros.h" 1 3 4
- # 24 "/usr/include/x86_64-linux-gnu/sys/sysmacros.h" 3 4
- extern "C" {
- __extension__
- extern unsigned int gnu_dev_major (unsigned long long int __dev)
- throw () __attribute__ ((__const__));
- __extension__
- extern unsigned int gnu_dev_minor (unsigned long long int __dev)
- throw () __attribute__ ((__const__));
- __extension__
- extern unsigned long long int gnu_dev_makedev (unsigned int __major,
- unsigned int __minor)
- throw () __attribute__ ((__const__));
- # 58 "/usr/include/x86_64-linux-gnu/sys/sysmacros.h" 3 4
- }
- # 223 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
- typedef __blksize_t blksize_t;
- typedef __blkcnt_t blkcnt_t;
- typedef __fsblkcnt_t fsblkcnt_t;
- typedef __fsfilcnt_t fsfilcnt_t;
- # 262 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
- typedef __blkcnt64_t blkcnt64_t;
- typedef __fsblkcnt64_t fsblkcnt64_t;
- typedef __fsfilcnt64_t fsfilcnt64_t;
- # 1 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 1 3 4
- # 21 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
- # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
- # 22 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 2 3 4
- # 60 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
- typedef unsigned long int pthread_t;
- union pthread_attr_t
- {
- char __size[56];
- long int __align;
- };
- typedef union pthread_attr_t pthread_attr_t;
- typedef struct __pthread_internal_list
- {
- struct __pthread_internal_list *__prev;
- struct __pthread_internal_list *__next;
- } __pthread_list_t;
- # 90 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
- typedef union
- {
- struct __pthread_mutex_s
- {
- int __lock;
- unsigned int __count;
- int __owner;
- unsigned int __nusers;
- int __kind;
- short __spins;
- short __elision;
- __pthread_list_t __list;
- # 124 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
- } __data;
- char __size[40];
- long int __align;
- } pthread_mutex_t;
- typedef union
- {
- char __size[4];
- int __align;
- } pthread_mutexattr_t;
- typedef union
- {
- struct
- {
- int __lock;
- unsigned int __futex;
- __extension__ unsigned long long int __total_seq;
- __extension__ unsigned long long int __wakeup_seq;
- __extension__ unsigned long long int __woken_seq;
- void *__mutex;
- unsigned int __nwaiters;
- unsigned int __broadcast_seq;
- } __data;
- char __size[48];
- __extension__ long long int __align;
- } pthread_cond_t;
- typedef union
- {
- char __size[4];
- int __align;
- } pthread_condattr_t;
- typedef unsigned int pthread_key_t;
- typedef int pthread_once_t;
- typedef union
- {
- struct
- {
- int __lock;
- unsigned int __nr_readers;
- unsigned int __readers_wakeup;
- unsigned int __writer_wakeup;
- unsigned int __nr_readers_queued;
- unsigned int __nr_writers_queued;
- int __writer;
- int __shared;
- unsigned long int __pad1;
- unsigned long int __pad2;
- unsigned int __flags;
- } __data;
- # 211 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
- char __size[56];
- long int __align;
- } pthread_rwlock_t;
- typedef union
- {
- char __size[8];
- long int __align;
- } pthread_rwlockattr_t;
- typedef volatile int pthread_spinlock_t;
- typedef union
- {
- char __size[32];
- long int __align;
- } pthread_barrier_t;
- typedef union
- {
- char __size[4];
- int __align;
- } pthread_barrierattr_t;
- # 271 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
- }
- # 315 "/usr/include/stdlib.h" 2 3 4
- extern long int random (void) throw ();
- extern void srandom (unsigned int __seed) throw ();
- extern char *initstate (unsigned int __seed, char *__statebuf,
- size_t __statelen) throw () __attribute__ ((__nonnull__ (2)));
- extern char *setstate (char *__statebuf) throw () __attribute__ ((__nonnull__ (1)));
- struct random_data
- {
- int32_t *fptr;
- int32_t *rptr;
- int32_t *state;
- int rand_type;
- int rand_deg;
- int rand_sep;
- int32_t *end_ptr;
- };
- extern int random_r (struct random_data *__restrict __buf,
- int32_t *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
- extern int srandom_r (unsigned int __seed, struct random_data *__buf)
- throw () __attribute__ ((__nonnull__ (2)));
- extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
- size_t __statelen,
- struct random_data *__restrict __buf)
- throw () __attribute__ ((__nonnull__ (2, 4)));
- extern int setstate_r (char *__restrict __statebuf,
- struct random_data *__restrict __buf)
- throw () __attribute__ ((__nonnull__ (1, 2)));
- extern int rand (void) throw ();
- extern void srand (unsigned int __seed) throw ();
- extern int rand_r (unsigned int *__seed) throw ();
- extern double drand48 (void) throw ();
- extern double erand48 (unsigned short int __xsubi[3]) throw () __attribute__ ((__nonnull__ (1)));
- extern long int lrand48 (void) throw ();
- extern long int nrand48 (unsigned short int __xsubi[3])
- throw () __attribute__ ((__nonnull__ (1)));
- extern long int mrand48 (void) throw ();
- extern long int jrand48 (unsigned short int __xsubi[3])
- throw () __attribute__ ((__nonnull__ (1)));
- extern void srand48 (long int __seedval) throw ();
- extern unsigned short int *seed48 (unsigned short int __seed16v[3])
- throw () __attribute__ ((__nonnull__ (1)));
- extern void lcong48 (unsigned short int __param[7]) throw () __attribute__ ((__nonnull__ (1)));
- struct drand48_data
- {
- unsigned short int __x[3];
- unsigned short int __old_x[3];
- unsigned short int __c;
- unsigned short int __init;
- __extension__ unsigned long long int __a;
- };
- extern int drand48_r (struct drand48_data *__restrict __buffer,
- double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
- extern int erand48_r (unsigned short int __xsubi[3],
- struct drand48_data *__restrict __buffer,
- double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
- extern int lrand48_r (struct drand48_data *__restrict __buffer,
- long int *__restrict __result)
- throw () __attribute__ ((__nonnull__ (1, 2)));
- extern int nrand48_r (unsigned short int __xsubi[3],
- struct drand48_data *__restrict __buffer,
- long int *__restrict __result)
- throw () __attribute__ ((__nonnull__ (1, 2)));
- extern int mrand48_r (struct drand48_data *__restrict __buffer,
- long int *__restrict __result)
- throw () __attribute__ ((__nonnull__ (1, 2)));
- extern int jrand48_r (unsigned short int __xsubi[3],
- struct drand48_data *__restrict __buffer,
- long int *__restrict __result)
- throw () __attribute__ ((__nonnull__ (1, 2)));
- extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
- throw () __attribute__ ((__nonnull__ (2)));
- extern int seed48_r (unsigned short int __seed16v[3],
- struct drand48_data *__buffer) throw () __attribute__ ((__nonnull__ (1, 2)));
- extern int lcong48_r (unsigned short int __param[7],
- struct drand48_data *__buffer)
- throw () __attribute__ ((__nonnull__ (1, 2)));
- # 466 "/usr/include/stdlib.h" 3 4
- extern void *malloc (size_t __size) throw () __attribute__ ((__malloc__)) ;
- extern void *calloc (size_t __nmemb, size_t __size)
- throw () __attribute__ ((__malloc__)) ;
- # 480 "/usr/include/stdlib.h" 3 4
- extern void *realloc (void *__ptr, size_t __size)
- throw () __attribute__ ((__warn_unused_result__));
- extern void free (void *__ptr) throw ();
- extern void cfree (void *__ptr) throw ();
- # 1 "/usr/include/alloca.h" 1 3 4
- # 24 "/usr/include/alloca.h" 3 4
- # 1 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 1 3 4
- # 25 "/usr/include/alloca.h" 2 3 4
- extern "C" {
- extern void *alloca (size_t __size) throw ();
- }
- # 493 "/usr/include/stdlib.h" 2 3 4
- extern void *valloc (size_t __size) throw () __attribute__ ((__malloc__)) ;
- extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
- throw () __attribute__ ((__nonnull__ (1))) ;
- extern void *aligned_alloc (size_t __alignment, size_t __size)
- throw () __attribute__ ((__malloc__)) ;
- extern void abort (void) throw () __attribute__ ((__noreturn__));
- extern int atexit (void (*__func) (void)) throw () __attribute__ ((__nonnull__ (1)));
- extern "C++" int at_quick_exit (void (*__func) (void))
- throw () __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1)));
- # 535 "/usr/include/stdlib.h" 3 4
- extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
- throw () __attribute__ ((__nonnull__ (1)));
- extern void exit (int __status) throw () __attribute__ ((__noreturn__));
- extern void quick_exit (int __status) throw () __attribute__ ((__noreturn__));
- extern void _Exit (int __status) throw () __attribute__ ((__noreturn__));
- extern char *getenv (const char *__name) throw () __attribute__ ((__nonnull__ (1))) ;
- extern char *secure_getenv (const char *__name)
- throw () __attribute__ ((__nonnull__ (1))) ;
- extern int putenv (char *__string) throw () __attribute__ ((__nonnull__ (1)));
- extern int setenv (const char *__name, const char *__value, int __replace)
- throw () __attribute__ ((__nonnull__ (2)));
- extern int unsetenv (const char *__name) throw () __attribute__ ((__nonnull__ (1)));
- extern int clearenv (void) throw ();
- # 606 "/usr/include/stdlib.h" 3 4
- extern char *mktemp (char *__template) throw () __attribute__ ((__nonnull__ (1)));
- # 620 "/usr/include/stdlib.h" 3 4
- extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) ;
- # 630 "/usr/include/stdlib.h" 3 4
- extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) ;
- # 642 "/usr/include/stdlib.h" 3 4
- extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) ;
- # 652 "/usr/include/stdlib.h" 3 4
- extern int mkstemps64 (char *__template, int __suffixlen)
- __attribute__ ((__nonnull__ (1))) ;
- # 663 "/usr/include/stdlib.h" 3 4
- extern char *mkdtemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) ;
- # 674 "/usr/include/stdlib.h" 3 4
- extern int mkostemp (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ;
- # 684 "/usr/include/stdlib.h" 3 4
- extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ;
- # 694 "/usr/include/stdlib.h" 3 4
- extern int mkostemps (char *__template, int __suffixlen, int __flags)
- __attribute__ ((__nonnull__ (1))) ;
- # 706 "/usr/include/stdlib.h" 3 4
- extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
- __attribute__ ((__nonnull__ (1))) ;
- # 717 "/usr/include/stdlib.h" 3 4
- extern int system (const char *__command) ;
- extern char *canonicalize_file_name (const char *__name)
- throw () __attribute__ ((__nonnull__ (1))) ;
- # 734 "/usr/include/stdlib.h" 3 4
- extern char *realpath (const char *__restrict __name,
- char *__restrict __resolved) throw () ;
- typedef int (*__compar_fn_t) (const void *, const void *);
- typedef __compar_fn_t comparison_fn_t;
- typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
- extern void *bsearch (const void *__key, const void *__base,
- size_t __nmemb, size_t __size, __compar_fn_t __compar)
- __attribute__ ((__nonnull__ (1, 2, 5))) ;
- extern void qsort (void *__base, size_t __nmemb, size_t __size,
- __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
- extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
- __compar_d_fn_t __compar, void *__arg)
- __attribute__ ((__nonnull__ (1, 4)));
- extern int abs (int __x) throw () __attribute__ ((__const__)) ;
- extern long int labs (long int __x) throw () __attribute__ ((__const__)) ;
- __extension__ extern long long int llabs (long long int __x)
- throw () __attribute__ ((__const__)) ;
- extern div_t div (int __numer, int __denom)
- throw () __attribute__ ((__const__)) ;
- extern ldiv_t ldiv (long int __numer, long int __denom)
- throw () __attribute__ ((__const__)) ;
- __extension__ extern lldiv_t lldiv (long long int __numer,
- long long int __denom)
- throw () __attribute__ ((__const__)) ;
- # 812 "/usr/include/stdlib.h" 3 4
- extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
- int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ;
- extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
- int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ;
- extern char *gcvt (double __value, int __ndigit, char *__buf)
- throw () __attribute__ ((__nonnull__ (3))) ;
- extern char *qecvt (long double __value, int __ndigit,
- int *__restrict __decpt, int *__restrict __sign)
- throw () __attribute__ ((__nonnull__ (3, 4))) ;
- extern char *qfcvt (long double __value, int __ndigit,
- int *__restrict __decpt, int *__restrict __sign)
- throw () __attribute__ ((__nonnull__ (3, 4))) ;
- extern char *qgcvt (long double __value, int __ndigit, char *__buf)
- throw () __attribute__ ((__nonnull__ (3))) ;
- extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
- int *__restrict __sign, char *__restrict __buf,
- size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
- extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
- int *__restrict __sign, char *__restrict __buf,
- size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
- extern int qecvt_r (long double __value, int __ndigit,
- int *__restrict __decpt, int *__restrict __sign,
- char *__restrict __buf, size_t __len)
- throw () __attribute__ ((__nonnull__ (3, 4, 5)));
- extern int qfcvt_r (long double __value, int __ndigit,
- int *__restrict __decpt, int *__restrict __sign,
- char *__restrict __buf, size_t __len)
- throw () __attribute__ ((__nonnull__ (3, 4, 5)));
- extern int mblen (const char *__s, size_t __n) throw ();
- extern int mbtowc (wchar_t *__restrict __pwc,
- const char *__restrict __s, size_t __n) throw ();
- extern int wctomb (char *__s, wchar_t __wchar) throw ();
- extern size_t mbstowcs (wchar_t *__restrict __pwcs,
- const char *__restrict __s, size_t __n) throw ();
- extern size_t wcstombs (char *__restrict __s,
- const wchar_t *__restrict __pwcs, size_t __n)
- throw ();
- # 888 "/usr/include/stdlib.h" 3 4
- extern int rpmatch (const char *__response) throw () __attribute__ ((__nonnull__ (1))) ;
- # 899 "/usr/include/stdlib.h" 3 4
- extern int getsubopt (char **__restrict __optionp,
- char *const *__restrict __tokens,
- char **__restrict __valuep)
- throw () __attribute__ ((__nonnull__ (1, 2, 3))) ;
- extern void setkey (const char *__key) throw () __attribute__ ((__nonnull__ (1)));
- extern int posix_openpt (int __oflag) ;
- extern int grantpt (int __fd) throw ();
- extern int unlockpt (int __fd) throw ();
- extern char *ptsname (int __fd) throw () ;
- extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
- throw () __attribute__ ((__nonnull__ (2)));
- extern int getpt (void);
- extern int getloadavg (double __loadavg[], int __nelem)
- throw () __attribute__ ((__nonnull__ (1)));
- # 1 "/usr/include/x86_64-linux-gnu/bits/stdlib-float.h" 1 3 4
- # 956 "/usr/include/stdlib.h" 2 3 4
- # 968 "/usr/include/stdlib.h" 3 4
- }
- # 73 "/usr/include/c++/5.2.0/cstdlib" 2 3
- # 114 "/usr/include/c++/5.2.0/cstdlib" 3
- namespace std __attribute__ ((__visibility__ ("default")))
- {
- using ::div_t;
- using ::ldiv_t;
- using ::abort;
- using ::abs;
- using ::atexit;
- using ::at_quick_exit;
- using ::atof;
- using ::atoi;
- using ::atol;
- using ::bsearch;
- using ::calloc;
- using ::div;
- using ::exit;
- using ::free;
- using ::getenv;
- using ::labs;
- using ::ldiv;
- using ::malloc;
- using ::mblen;
- using ::mbstowcs;
- using ::mbtowc;
- using ::qsort;
- using ::quick_exit;
- using ::rand;
- using ::realloc;
- using ::srand;
- using ::strtod;
- using ::strtol;
- using ::strtoul;
- using ::system;
- using ::wcstombs;
- using ::wctomb;
- inline long
- abs(long __i) { return __builtin_labs(__i); }
- inline ldiv_t
- div(long __i, long __j) { return ldiv(__i, __j); }
- inline long long
- abs(long long __x) { return __builtin_llabs (__x); }
- # 196 "/usr/include/c++/5.2.0/cstdlib" 3
- }
- # 209 "/usr/include/c++/5.2.0/cstdlib" 3
- namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
- {
- using ::lldiv_t;
- using ::_Exit;
- using ::llabs;
- inline lldiv_t
- div(long long __n, long long __d)
- { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }
- using ::lldiv;
- # 241 "/usr/include/c++/5.2.0/cstdlib" 3
- using ::atoll;
- using ::strtoll;
- using ::strtoull;
- using ::strtof;
- using ::strtold;
- }
- namespace std
- {
- using ::__gnu_cxx::lldiv_t;
- using ::__gnu_cxx::_Exit;
- using ::__gnu_cxx::llabs;
- using ::__gnu_cxx::div;
- using ::__gnu_cxx::lldiv;
- using ::__gnu_cxx::atoll;
- using ::__gnu_cxx::strtof;
- using ::__gnu_cxx::strtoll;
- using ::__gnu_cxx::strtoull;
- using ::__gnu_cxx::strtold;
- }
- # 20 "/us/include/boost_1_64_0/boost/hana/assert.hpp" 2
- # 16 "test.cpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/equal.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/equal.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/all_of.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/all_of.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/all_of.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/all_of.hpp"
- namespace boost { namespace hana {
- # 42 "/us/include/boost_1_64_0/boost/hana/fwd/all_of.hpp"
- 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{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/all_of.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/any_of.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/any_of.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/any_of.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/any_of.hpp"
- namespace boost { namespace hana {
- # 41 "/us/include/boost_1_64_0/boost/hana/fwd/any_of.hpp"
- 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{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/any_of.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/searchable.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/searchable.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/searchable.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/searchable.hpp"
- namespace boost { namespace hana {
- # 139 "/us/include/boost_1_64_0/boost/hana/fwd/concept/searchable.hpp"
- template <typename S>
- struct Searchable;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/searchable.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/any_of.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/concept/searchable.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/find_if.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/find_if.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/find_if.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/find_if.hpp"
- namespace boost { namespace hana {
- # 45 "/us/include/boost_1_64_0/boost/hana/fwd/find_if.hpp"
- 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{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/find_if.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/searchable.hpp" 1
- # 19 "/us/include/boost_1_64_0/boost/hana/find_if.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/drop_while.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/drop_while.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/drop_while.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/drop_while.hpp"
- namespace boost { namespace hana {
- # 48 "/us/include/boost_1_64_0/boost/hana/fwd/drop_while.hpp"
- 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{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/drop_while.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/first_unsatisfied_index.hpp" 1
- # 20 "/us/include/boost_1_64_0/boost/hana/detail/first_unsatisfied_index.hpp"
- namespace boost { namespace hana { 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);
- };
- 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
- >;
- }
- };
- } }}
- # 19 "/us/include/boost_1_64_0/boost/hana/drop_while.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/front.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/front.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/front.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/front.hpp"
- namespace boost { namespace hana {
- # 36 "/us/include/boost_1_64_0/boost/hana/fwd/front.hpp"
- 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{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/front.hpp" 2
- namespace boost { namespace hana {
- template <typename Xs>
- constexpr decltype(auto) front_t::operator()(Xs&& xs) const {
- using It = typename hana::tag_of<Xs>::type;
- using Front = ::std::conditional_t< (hana::Iterable<It>::value), front_impl<It>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Iterable<It>::value,
- "hana::front(xs) requires 'xs' to be an Iterable");
- return Front::apply(static_cast<Xs&&>(xs));
- }
- 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)); }
- };
- }}
- # 22 "/us/include/boost_1_64_0/boost/hana/drop_while.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/lazy.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/lazy.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/lazy.hpp"
- namespace boost { namespace hana {
- # 85 "/us/include/boost_1_64_0/boost/hana/fwd/lazy.hpp"
- struct lazy_tag { };
- # 121 "/us/include/boost_1_64_0/boost/hana/fwd/lazy.hpp"
- constexpr auto make_lazy = make<lazy_tag>;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/operators/monad.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/monad.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/chain.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/chain.hpp"
- namespace boost { namespace hana {
- # 55 "/us/include/boost_1_64_0/boost/hana/fwd/chain.hpp"
- 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{};
- }}
- # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/monad.hpp" 2
- namespace boost { namespace hana { 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)); }
- }
- } }}
- # 20 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/functional/apply.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/functional/apply.hpp"
- namespace boost { namespace hana {
- # 44 "/us/include/boost_1_64_0/boost/hana/functional/apply.hpp"
- 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{};
- }}
- # 21 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/functional/compose.hpp" 1
- # 14 "/us/include/boost_1_64_0/boost/hana/functional/compose.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/create.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/detail/create.hpp"
- namespace boost { namespace hana { namespace detail {
- 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)...
- };
- }
- };
- } }}
- # 14 "/us/include/boost_1_64_0/boost/hana/functional/compose.hpp" 2
- namespace boost { namespace hana {
- # 64 "/us/include/boost_1_64_0/boost/hana/functional/compose.hpp"
- 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{};
- }}
- # 22 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/functional/on.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/functional/on.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/functional/infix.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/functional/infix.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/functional/reverse_partial.hpp" 1
- # 21 "/us/include/boost_1_64_0/boost/hana/functional/reverse_partial.hpp"
- namespace boost { namespace hana {
- # 48 "/us/include/boost_1_64_0/boost/hana/functional/reverse_partial.hpp"
- 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{};
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/functional/infix.hpp" 2
- namespace boost { namespace hana {
- # 83 "/us/include/boost_1_64_0/boost/hana/functional/infix.hpp"
- namespace infix_detail {
- 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;
- 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)
- )
- );
- }
- };
- 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));
- }
- };
- 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))
- );
- }
- };
- 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));
- }
- }
- constexpr infix_detail::make_infix<false, false> infix{};
- }}
- # 15 "/us/include/boost_1_64_0/boost/hana/functional/on.hpp" 2
- namespace boost { namespace hana {
- # 60 "/us/include/boost_1_64_0/boost/hana/functional/on.hpp"
- 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>{});
- }}
- # 23 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/ap.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/ap.hpp"
- namespace boost { namespace hana {
- # 67 "/us/include/boost_1_64_0/boost/hana/fwd/ap.hpp"
- 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{};
- }}
- # 24 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/duplicate.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/duplicate.hpp"
- namespace boost { namespace hana {
- # 45 "/us/include/boost_1_64_0/boost/hana/fwd/duplicate.hpp"
- 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{};
- }}
- # 25 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/extend.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/extend.hpp"
- namespace boost { namespace hana {
- # 50 "/us/include/boost_1_64_0/boost/hana/fwd/extend.hpp"
- 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{};
- }}
- # 27 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/extract.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/extract.hpp"
- namespace boost { namespace hana {
- # 46 "/us/include/boost_1_64_0/boost/hana/fwd/extract.hpp"
- 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{};
- }}
- # 28 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/flatten.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/flatten.hpp"
- namespace boost { namespace hana {
- # 51 "/us/include/boost_1_64_0/boost/hana/fwd/flatten.hpp"
- 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{};
- }}
- # 29 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/lift.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/lift.hpp"
- namespace boost { namespace hana {
- # 48 "/us/include/boost_1_64_0/boost/hana/fwd/lift.hpp"
- 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{};
- }}
- # 30 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
- namespace boost { namespace hana {
- 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;
- 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)...
- };
- }
- };
- 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)};
- }
- };
- namespace detail {
- template <>
- struct monad_operators<lazy_tag> { static constexpr bool value = true; };
- }
- template <>
- struct eval_impl<lazy_tag> {
- 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_))...
- );
- }
- 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_)); }
- };
- 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)
- );
- }
- };
- 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)
- );
- }
- };
- 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)
- );
- }
- };
- 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));
- }
- };
- }}
- # 24 "/us/include/boost_1_64_0/boost/hana/drop_while.hpp" 2
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Iterable<It>::value), drop_while_impl<It>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Iterable<It>::value,
- "hana::drop_while(xs, pred) requires 'xs' to be an Iterable");
- return DropWhile::apply(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred));
- }
- 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{});
- }
- };
- }}
- # 25 "/us/include/boost_1_64_0/boost/hana/find_if.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/optional.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/optional.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp" 1
- # 18 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
- namespace boost { namespace hana {
- # 275 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
- template <typename ...T>
- struct optional;
- struct optional_tag { };
- # 308 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
- constexpr auto make_optional = make<optional_tag>;
- # 322 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
- struct make_just_t {
- template <typename T>
- constexpr auto operator()(T&&) const;
- };
- constexpr make_just_t just{};
- # 340 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
- template <>
- struct optional<> : detail::operators::adl<optional<>> {
- constexpr optional() = default;
- constexpr optional(optional const&) = default;
- constexpr optional(optional&&) = default;
- constexpr optional& operator=(optional const&) = default;
- constexpr optional& operator=(optional&&) = default;
- 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{};
- # 401 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
- 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{};
- # 455 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
- struct sfinae_t {
- template <typename F>
- constexpr decltype(auto) operator()(F&& f) const;
- };
- constexpr sfinae_t sfinae{};
- # 478 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
- struct is_just_t {
- template <typename ...T>
- constexpr auto operator()(optional<T...> const&) const;
- };
- constexpr is_just_t is_just{};
- # 501 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
- struct is_nothing_t {
- template <typename ...T>
- constexpr auto operator()(optional<T...> const&) const;
- };
- constexpr is_nothing_t is_nothing{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/optional.hpp" 2
- # 27 "/us/include/boost_1_64_0/boost/hana/optional.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concat.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/concat.hpp"
- namespace boost { namespace hana {
- # 51 "/us/include/boost_1_64_0/boost/hana/fwd/concat.hpp"
- 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{};
- }}
- # 27 "/us/include/boost_1_64_0/boost/hana/optional.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/empty.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/empty.hpp"
- namespace boost { namespace hana {
- # 40 "/us/include/boost_1_64_0/boost/hana/fwd/empty.hpp"
- 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{};
- }}
- # 29 "/us/include/boost_1_64_0/boost/hana/optional.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
- namespace boost { namespace hana {
- template <typename T>
- struct basic_type;
- # 114 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
- template <typename T>
- struct type_impl;
- template <typename T>
- using type = typename type_impl<T>::_;
- struct type_tag { };
- template <typename T>
- constexpr type<T> type_c{};
- # 192 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
- struct decltype_t {
- template <typename T>
- constexpr auto operator()(T&&) const;
- };
- constexpr decltype_t decltype_{};
- # 235 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
- struct typeid_t {
- template <typename T>
- constexpr auto operator()(T&&) const;
- };
- constexpr typeid_t typeid_{};
- # 262 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
- constexpr auto make_type = hana::make<type_tag>;
- # 295 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
- struct sizeof_t {
- template <typename T>
- constexpr auto operator()(T&&) const;
- };
- constexpr sizeof_t sizeof_{};
- # 331 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
- struct alignof_t {
- template <typename T>
- constexpr auto operator()(T&&) const;
- };
- constexpr alignof_t alignof_{};
- # 375 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
- 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{};
- # 412 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
- template <template <typename ...> class F>
- struct template_t;
- template <template <typename ...> class F>
- constexpr template_t<F> template_{};
- # 439 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
- template <template <typename ...> class f>
- struct metafunction_t;
- template <template <typename ...> class f>
- constexpr metafunction_t<f> metafunction{};
- # 466 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
- template <typename F>
- struct metafunction_class_t
- : metafunction_t<F::template apply>
- { };
- template <typename F>
- constexpr metafunction_class_t<F> metafunction_class{};
- # 512 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
- 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{};
- # 531 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
- template <template <typename ...> class F>
- constexpr auto trait = hana::integral(hana::metafunction<F>);
- }}
- # 36 "/us/include/boost_1_64_0/boost/hana/optional.hpp" 2
- namespace boost { namespace hana {
- 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> {
- 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))
- { }
- constexpr optional& operator=(optional const&) = default;
- constexpr optional& operator=(optional&&) = default;
- 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_); }
- T value_;
- };
- 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));
- }
- template <typename ...T>
- struct tag_of<optional<T...>> {
- using type = 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; }
- };
- 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;
- };
- }
- 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>; }
- 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; }
- };
- }
- template <typename F>
- constexpr decltype(auto) sfinae_t::operator()(F&& f) const {
- return hana::partial(detail::sfinae_impl{}, int{},
- static_cast<F&&>(f));
- }
- 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 {}; }
- };
- 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_); }
- };
- 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_))); }
- };
- 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));
- }
- };
- 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_)); }
- };
- 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; }
- };
- 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)(); }
- };
- 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 {}; }
- };
- }}
- # 32 "/us/include/boost_1_64_0/boost/hana/find_if.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/transform.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/transform.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/functor.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/functor.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/functor.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/functor.hpp"
- namespace boost { namespace hana {
- # 135 "/us/include/boost_1_64_0/boost/hana/fwd/concept/functor.hpp"
- template <typename F>
- struct Functor;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/functor.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/adjust_if.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/adjust_if.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/adjust_if.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/adjust_if.hpp"
- namespace boost { namespace hana {
- # 57 "/us/include/boost_1_64_0/boost/hana/fwd/adjust_if.hpp"
- 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{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/adjust_if.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/functor.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/adjust_if.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/transform.hpp" 1
- # 20 "/us/include/boost_1_64_0/boost/hana/adjust_if.hpp" 2
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Functor<S>::value), adjust_if_impl<S>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Functor<S>::value,
- "hana::adjust_if(xs, pred, f) requires 'xs' to be a Functor");
- return AdjustIf::apply(static_cast<Xs&&>(xs), pred, f);
- }
- 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});
- }
- };
- }}
- # 15 "/us/include/boost_1_64_0/boost/hana/concept/functor.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/transform.hpp" 1
- # 20 "/us/include/boost_1_64_0/boost/hana/concept/functor.hpp" 2
- namespace boost { namespace hana {
- 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
- >
- { };
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/transform.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/functional/always.hpp" 1
- # 19 "/us/include/boost_1_64_0/boost/hana/functional/always.hpp"
- namespace boost { namespace hana {
- # 43 "/us/include/boost_1_64_0/boost/hana/functional/always.hpp"
- 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{};
- }}
- # 21 "/us/include/boost_1_64_0/boost/hana/transform.hpp" 2
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Functor<S>::value), transform_impl<S>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Functor<S>::value,
- "hana::transform(xs, f) requires 'xs' to be a Functor");
- return Transform::apply(static_cast<Xs&&>(xs), static_cast<F&&>(f));
- }
- 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>> {
- 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))...);
- }
- };
- template <typename Xs, typename F>
- static constexpr auto apply(Xs&& xs, F&& f) {
- return hana::unpack(static_cast<Xs&&>(xs),
- transformer<decltype(&f)>{&f});
- }
- };
- }}
- # 34 "/us/include/boost_1_64_0/boost/hana/find_if.hpp" 2
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Searchable<S>::value), find_if_impl<S>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Searchable<S>::value,
- "hana::find_if(xs, pred) requires 'xs' to be a Searchable");
- return FindIf::apply(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred));
- }
- 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, typename Pred, std::size_t i, std::size_t N, bool Done>
- struct advance_until;
- template <typename Xs, typename Pred, std::size_t i, std::size_t N>
- struct advance_until<Xs, Pred, i, N, false>
- : advance_until<Xs, Pred, i + 1, N, static_cast<bool>(detail::decay<decltype(
- std::declval<Pred>()(hana::at_c<i>(std::declval<Xs>()))
- )>::type::value)>
- { };
- template <typename Xs, typename Pred, std::size_t N>
- struct advance_until<Xs, Pred, N, N, false> {
- template <typename Ys>
- static constexpr auto apply(Ys&&) {
- return hana::nothing;
- }
- };
- template <typename Xs, typename Pred, std::size_t i, std::size_t N>
- struct advance_until<Xs, Pred, i, N, true> {
- template <typename Ys>
- static constexpr auto apply(Ys&& ys) {
- return hana::just(hana::at_c<i - 1>(static_cast<Ys&&>(ys)));
- }
- };
- }
- template <typename S>
- struct find_if_impl<S, when<Sequence<S>::value>> {
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&&) {
- constexpr std::size_t N = decltype(hana::length(xs))::value;
- return detail::advance_until<Xs&&, Pred&&, 0, N, false>::apply(
- static_cast<Xs&&>(xs)
- );
- }
- };
- template <typename It>
- struct find_if_impl<It, when<hana::Iterable<It>::value && !Sequence<It>::value>> {
- template <typename Xs, typename Pred>
- static constexpr auto find_if_helper(Xs&& xs, Pred&& pred, hana::true_) {
- return hana::just(hana::front(
- hana::drop_while(static_cast<Xs&&>(xs),
- hana::compose(hana::not_, static_cast<Pred&&>(pred)))
- ));
- }
- template <typename Xs, typename Pred>
- static constexpr auto find_if_helper(Xs&&, Pred&&, hana::false_) {
- return hana::nothing;
- }
- template <typename Xs, typename Pred>
- static constexpr auto apply(Xs&& xs, Pred&& pred) {
- constexpr bool found = !decltype(
- hana::is_empty(hana::drop_while(static_cast<Xs&&>(xs),
- hana::compose(hana::not_, static_cast<Pred&&>(pred))))
- )::value;
- return find_if_impl::find_if_helper(static_cast<Xs&&>(xs),
- static_cast<Pred&&>(pred),
- hana::bool_<found>{});
- }
- };
- 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)}
- );
- }
- };
- }}
- # 20 "/us/include/boost_1_64_0/boost/hana/concept/searchable.hpp" 2
- namespace boost { namespace hana {
- 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
- >
- { };
- }}
- # 18 "/us/include/boost_1_64_0/boost/hana/any_of.hpp" 2
- # 34 "/us/include/boost_1_64_0/boost/hana/any_of.hpp"
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Searchable<S>::value), any_of_impl<S>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Searchable<S>::value,
- "hana::any_of(xs, pred) requires 'xs' to be a Searchable");
- return AnyOf::apply(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred));
- }
- 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>> {
- 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));
- }
- };
- 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;
- }
- template <typename Xs, typename Pred>
- static constexpr auto
- any_of_helper(hana::true_, 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));
- }
- };
- }}
- # 15 "/us/include/boost_1_64_0/boost/hana/all_of.hpp" 2
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Searchable<S>::value), all_of_impl<S>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Searchable<S>::value,
- "hana::all_of(xs, pred) requires 'xs' to be a Searchable");
- return AllOf::apply(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred));
- }
- 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))));
- }
- };
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/equal.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/and.hpp" 1
- # 22 "/us/include/boost_1_64_0/boost/hana/and.hpp"
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Logical<Bool>::value), and_impl<Bool>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Logical<Bool>::value,
- "hana::and_(x, y) requires 'x' to be a Logical");
- 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)...
- );
- }
- 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);
- }
- };
- }}
- # 17 "/us/include/boost_1_64_0/boost/hana/equal.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/comparable.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/comparable.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/comparable.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/comparable.hpp"
- namespace boost { namespace hana {
- # 156 "/us/include/boost_1_64_0/boost/hana/fwd/concept/comparable.hpp"
- template <typename T>
- struct Comparable;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/comparable.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/equal.hpp" 1
- # 19 "/us/include/boost_1_64_0/boost/hana/concept/comparable.hpp" 2
- namespace boost { namespace hana {
- template <typename T>
- struct Comparable
- : hana::integral_constant<bool,
- !is_default<equal_impl<typename tag_of<T>::type,
- typename tag_of<T>::type>>::value
- >
- { };
- }}
- # 20 "/us/include/boost_1_64_0/boost/hana/equal.hpp" 2
- # 31 "/us/include/boost_1_64_0/boost/hana/equal.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/concepts.hpp" 1
- # 20 "/us/include/boost_1_64_0/boost/hana/detail/concepts.hpp"
- namespace boost { namespace hana { namespace detail {
- 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
- > { };
- 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
- >
- { };
- } }}
- # 31 "/us/include/boost_1_64_0/boost/hana/equal.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/has_common_embedding.hpp" 1
- # 21 "/us/include/boost_1_64_0/boost/hana/detail/has_common_embedding.hpp"
- namespace boost { namespace hana { 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
- >;
- };
- 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
- { };
- template <template <typename...> class Concept, typename T, typename U>
- using has_nontrivial_common_embedding =
- typename has_nontrivial_common_embedding_impl<Concept, T, U>::type;
- } }}
- # 32 "/us/include/boost_1_64_0/boost/hana/equal.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/nested_to.hpp" 1
- # 19 "/us/include/boost_1_64_0/boost/hana/detail/nested_to.hpp"
- namespace boost { namespace hana { namespace detail {
- 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)); }
- } }}
- # 33 "/us/include/boost_1_64_0/boost/hana/equal.hpp" 2
- # 43 "/us/include/boost_1_64_0/boost/hana/equal.hpp"
- namespace boost { namespace hana {
- 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));
- }
- 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&) {
- 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;
- }
- };
- 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)));
- }
- };
- 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); }
- };
- 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>{};
- }
- };
- 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))
- );
- }
- };
- 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});
- }
- };
- }}
- # 18 "test.cpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/less.hpp" 1
- # 18 "/us/include/boost_1_64_0/boost/hana/less.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/orderable.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/orderable.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/orderable.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/orderable.hpp"
- namespace boost { namespace hana {
- # 183 "/us/include/boost_1_64_0/boost/hana/fwd/concept/orderable.hpp"
- template <typename Ord>
- struct Orderable;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/orderable.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/less.hpp" 1
- # 19 "/us/include/boost_1_64_0/boost/hana/concept/orderable.hpp" 2
- namespace boost { namespace hana {
- template <typename Ord>
- struct Orderable
- : hana::integral_constant<bool,
- !is_default<less_impl<typename tag_of<Ord>::type,
- typename tag_of<Ord>::type>>::value
- >
- { };
- }}
- # 18 "/us/include/boost_1_64_0/boost/hana/less.hpp" 2
- # 27 "/us/include/boost_1_64_0/boost/hana/less.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/detail/nested_than.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/detail/nested_than.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/functional/flip.hpp" 1
- # 19 "/us/include/boost_1_64_0/boost/hana/functional/flip.hpp"
- namespace boost { namespace hana {
- # 37 "/us/include/boost_1_64_0/boost/hana/functional/flip.hpp"
- 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{};
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/detail/nested_than.hpp" 2
- namespace boost { namespace hana { namespace detail {
- 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)); }
- } }}
- # 27 "/us/include/boost_1_64_0/boost/hana/less.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/less_equal.hpp" 1
- # 22 "/us/include/boost_1_64_0/boost/hana/less_equal.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/less.hpp" 1
- # 22 "/us/include/boost_1_64_0/boost/hana/less_equal.hpp" 2
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Orderable<T>::value && hana::Orderable<U>::value), decltype(less_equal_impl<T, U>{}), ::boost::hana::deleted_implementation >;
- 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");
- return LessEqual::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- 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)));
- }
- };
- 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)));
- }
- };
- }}
- # 31 "/us/include/boost_1_64_0/boost/hana/less.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/lexicographical_compare.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/lexicographical_compare.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/lexicographical_compare.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/lexicographical_compare.hpp"
- namespace boost { namespace hana {
- # 78 "/us/include/boost_1_64_0/boost/hana/fwd/lexicographical_compare.hpp"
- 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{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/lexicographical_compare.hpp" 2
- # 23 "/us/include/boost_1_64_0/boost/hana/lexicographical_compare.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/less.hpp" 1
- # 23 "/us/include/boost_1_64_0/boost/hana/lexicographical_compare.hpp" 2
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Iterable<It1>::value && hana::Iterable<It2>::value), lexicographical_compare_impl<It1>, ::boost::hana::deleted_implementation >;
- 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");
- return LexicographicalCompare::apply(xs, ys, pred);
- }
- 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
- >);
- }
- };
- }}
- # 32 "/us/include/boost_1_64_0/boost/hana/less.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/or.hpp" 1
- # 22 "/us/include/boost_1_64_0/boost/hana/or.hpp"
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Logical<Bool>::value), or_impl<Bool>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Logical<Bool>::value,
- "hana::or_(x, y) requires 'x' to be a Logical");
- 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)...
- );
- }
- 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) {
- return hana::if_(x, x, static_cast<Y&&>(y));
- }
- };
- }}
- # 33 "/us/include/boost_1_64_0/boost/hana/less.hpp" 2
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Orderable<T>::value && hana::Orderable<U>::value && !is_default<less_impl<T, U>>::value), decltype(less_impl<T, U>{}), ::boost::hana::deleted_implementation >;
- 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");
- return Less::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- template <typename T, typename U, bool condition>
- struct less_impl<T, U, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
- 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)));
- }
- };
- 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); }
- };
- 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>;
- }
- };
- 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))
- )
- );
- }
- };
- 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); }
- };
- }}
- # 20 "test.cpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/minus.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/minus.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/group.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/group.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/group.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/group.hpp"
- namespace boost { namespace hana {
- # 107 "/us/include/boost_1_64_0/boost/hana/fwd/concept/group.hpp"
- template <typename G>
- struct Group;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/group.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/minus.hpp" 1
- # 19 "/us/include/boost_1_64_0/boost/hana/concept/group.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/negate.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/negate.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/group.hpp" 1
- # 15 "/us/include/boost_1_64_0/boost/hana/negate.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/zero.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/zero.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/zero.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/zero.hpp"
- namespace boost { namespace hana {
- # 34 "/us/include/boost_1_64_0/boost/hana/fwd/zero.hpp"
- 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{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/zero.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/monoid.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/monoid.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/monoid.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/monoid.hpp"
- namespace boost { namespace hana {
- # 97 "/us/include/boost_1_64_0/boost/hana/fwd/concept/monoid.hpp"
- template <typename M>
- struct Monoid;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/monoid.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/plus.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/plus.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/monoid.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/plus.hpp" 2
- # 27 "/us/include/boost_1_64_0/boost/hana/plus.hpp"
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Monoid<T>::value && hana::Monoid<U>::value && !is_default<plus_impl<T, U>>::value), decltype(plus_impl<T, U>{}), ::boost::hana::deleted_implementation >;
- 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");
- return Plus::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- template <typename T, typename U, bool condition>
- struct plus_impl<T, U, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
- 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)));
- }
- };
- 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); }
- };
- 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>{}); }
- };
- }}
- # 19 "/us/include/boost_1_64_0/boost/hana/concept/monoid.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/zero.hpp" 1
- # 20 "/us/include/boost_1_64_0/boost/hana/concept/monoid.hpp" 2
- namespace boost { namespace hana {
- 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
- >
- { };
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/zero.hpp" 2
- # 25 "/us/include/boost_1_64_0/boost/hana/zero.hpp"
- namespace boost { namespace hana {
- template <typename M>
- struct zero_t {
- static_assert(hana::Monoid<M>::value,
- "hana::zero<M>() requires 'M' to be a Monoid");
- constexpr decltype(auto) operator()() const {
- using Zero = ::std::conditional_t< (hana::Monoid<M>::value), zero_impl<M>, ::boost::hana::deleted_implementation >;
- return Zero::apply();
- }
- };
- template <typename M, bool condition>
- struct zero_impl<M, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
- 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); }
- };
- 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>{}); }
- };
- }}
- # 19 "/us/include/boost_1_64_0/boost/hana/negate.hpp" 2
- namespace boost { namespace hana {
- template <typename X>
- constexpr decltype(auto) negate_t::operator()(X&& x) const {
- using G = typename hana::tag_of<X>::type;
- using Negate = ::std::conditional_t< (hana::Group<G>::value), negate_impl<G>, ::boost::hana::deleted_implementation >;
- static_assert(hana::Group<G>::value,
- "hana::negate(x) requires 'x' to be in a Group");
- return Negate::apply(static_cast<X&&>(x));
- }
- 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)); }
- };
- 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); }
- };
- }}
- # 20 "/us/include/boost_1_64_0/boost/hana/concept/group.hpp" 2
- namespace boost { namespace hana {
- 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
- >
- { };
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/minus.hpp" 2
- # 30 "/us/include/boost_1_64_0/boost/hana/minus.hpp"
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Group<T>::value && hana::Group<U>::value), decltype(minus_impl<T, U>{}), ::boost::hana::deleted_implementation >;
- 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");
- return Minus::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- 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)));
- }
- };
- 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)));
- }
- };
- 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); }
- };
- 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>{}); }
- };
- }}
- # 21 "test.cpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/mult.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/mult.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/ring.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/ring.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/ring.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/ring.hpp"
- namespace boost { namespace hana {
- # 102 "/us/include/boost_1_64_0/boost/hana/fwd/concept/ring.hpp"
- template <typename R>
- struct Ring;
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/concept/ring.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/mult.hpp" 1
- # 19 "/us/include/boost_1_64_0/boost/hana/concept/ring.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/one.hpp" 1
- # 13 "/us/include/boost_1_64_0/boost/hana/one.hpp"
- # 1 "/us/include/boost_1_64_0/boost/hana/fwd/one.hpp" 1
- # 17 "/us/include/boost_1_64_0/boost/hana/fwd/one.hpp"
- namespace boost { namespace hana {
- # 34 "/us/include/boost_1_64_0/boost/hana/fwd/one.hpp"
- 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{};
- }}
- # 13 "/us/include/boost_1_64_0/boost/hana/one.hpp" 2
- # 1 "/us/include/boost_1_64_0/boost/hana/concept/ring.hpp" 1
- # 16 "/us/include/boost_1_64_0/boost/hana/one.hpp" 2
- # 25 "/us/include/boost_1_64_0/boost/hana/one.hpp"
- namespace boost { namespace hana {
- template <typename R>
- struct one_t {
- static_assert(hana::Ring<R>::value,
- "hana::one<R>() requires 'R' to be a Ring");
- constexpr decltype(auto) operator()() const {
- using One = ::std::conditional_t< (hana::Ring<R>::value), one_impl<R>, ::boost::hana::deleted_implementation >;
- return One::apply();
- }
- };
- template <typename R, bool condition>
- struct one_impl<R, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
- 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); }
- };
- 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>{}); }
- };
- }}
- # 20 "/us/include/boost_1_64_0/boost/hana/concept/ring.hpp" 2
- namespace boost { namespace hana {
- 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
- >
- { };
- }}
- # 16 "/us/include/boost_1_64_0/boost/hana/mult.hpp" 2
- # 27 "/us/include/boost_1_64_0/boost/hana/mult.hpp"
- namespace boost { namespace hana {
- 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 = ::std::conditional_t< (hana::Ring<T>::value && hana::Ring<U>::value && !is_default<mult_impl<T, U>>::value), decltype(mult_impl<T, U>{}), ::boost::hana::deleted_implementation >;
- 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");
- return Mult::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
- }
- template <typename T, typename U, bool condition>
- struct mult_impl<T, U, when<condition>> : default_ {
- template <typename ...Args>
- static constexpr auto apply(Args&& ...) = delete;
- };
- 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)));
- }
- };
- 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); }
- };
- 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>{}); }
- };
- }}
- # 22 "test.cpp" 2
- namespace hana = boost::hana;
- template <typename T, typename = std::enable_if_t<
- !hana::Constant<T>::value
- >>
- constexpr T sqrt(T x) {
- T inf = 0, sup = (x == 1 ? 1 : x/2);
- while (!((sup - inf) <= 1 || ((sup*sup <= x) && ((sup+1)*(sup+1) > x)))) {
- T mid = (inf + sup) / 2;
- bool take_inf = mid*mid > x ? 1 : 0;
- inf = take_inf ? inf : mid;
- sup = take_inf ? mid : sup;
- }
- return sup*sup <= x ? sup : inf;
- }
- template <typename T, typename = std::enable_if_t<
- hana::Constant<T>::value
- >>
- constexpr auto sqrt(T const&) {
- return hana::integral_c<typename T::value_type, sqrt(T::value)>;
- }
- # 92 "test.cpp"
- extern const int calculated_distance;
- namespace hana = boost::hana;
- using namespace hana::literals;
- // Most be in header
- extern const int calculated_distance;
- template <typename X, typename Y>
- struct _point {
- X x;
- Y y;
- };
- template <typename X, typename Y>
- constexpr _point<X, Y> point(X x, Y y) { return {x, y}; }
- template <typename P1, typename P2>
- constexpr auto distance(P1 p1, P2 p2) {
- auto xs = p1.x - p2.x;
- auto ys = p1.y - p2.y;
- return sqrt(xs*xs + ys*ys);
- }
- // This goes into .cc
- constexpr int calculated_distance = distance(point(3_c, 5_c), point(7_c, 2_c));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement