Advertisement
Guest User

Untitled

a guest
Aug 21st, 2017
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 357.30 KB | None | 0 0
  1. # 1 "test.cpp"
  2. # 1 "<built-in>" 1
  3. # 1 "<built-in>" 3
  4. # 354 "<built-in>" 3
  5. # 1 "<command line>" 1
  6. # 1 "<built-in>" 2
  7. # 1 "test.cpp" 2
  8. # 15 "test.cpp"
  9. # 1 "/us/include/boost_1_64_0/boost/hana/assert.hpp" 1
  10. # 13 "/us/include/boost_1_64_0/boost/hana/assert.hpp"
  11. # 1 "/us/include/boost_1_64_0/boost/hana/concept/constant.hpp" 1
  12. # 13 "/us/include/boost_1_64_0/boost/hana/concept/constant.hpp"
  13. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/constant.hpp" 1
  14. # 13 "/us/include/boost_1_64_0/boost/hana/fwd/concept/constant.hpp"
  15. # 1 "/us/include/boost_1_64_0/boost/hana/config.hpp" 1
  16. # 13 "/us/include/boost_1_64_0/boost/hana/config.hpp"
  17. # 1 "/us/include/boost_1_64_0/boost/hana/version.hpp" 1
  18. # 13 "/us/include/boost_1_64_0/boost/hana/config.hpp" 2
  19. # 87 "/us/include/boost_1_64_0/boost/hana/config.hpp"
  20. # 1 "/usr/include/c++/5.2.0/cstddef" 1
  21. # 43 "/usr/include/c++/5.2.0/cstddef" 3
  22.  
  23. # 1 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/c++config.h" 1 3
  24. # 184 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/c++config.h" 3
  25. namespace std
  26. {
  27.   typedef long unsigned int size_t;
  28.   typedef long int ptrdiff_t;
  29.  
  30.  
  31.   typedef decltype(nullptr) nullptr_t;
  32.  
  33. }
  34. # 426 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/c++config.h" 3
  35. # 1 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/os_defines.h" 1 3
  36. # 39 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/os_defines.h" 3
  37. # 1 "/usr/include/features.h" 1 3 4
  38. # 352 "/usr/include/features.h" 3 4
  39. # 1 "/usr/include/stdc-predef.h" 1 3 4
  40. # 353 "/usr/include/features.h" 2 3 4
  41. # 374 "/usr/include/features.h" 3 4
  42. # 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4
  43. # 385 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4
  44. # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
  45. # 386 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4
  46. # 375 "/usr/include/features.h" 2 3 4
  47. # 398 "/usr/include/features.h" 3 4
  48. # 1 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 1 3 4
  49. # 10 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 3 4
  50. # 1 "/usr/include/x86_64-linux-gnu/gnu/stubs-64.h" 1 3 4
  51. # 11 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 2 3 4
  52. # 399 "/usr/include/features.h" 2 3 4
  53. # 40 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/os_defines.h" 2 3
  54. # 427 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/c++config.h" 2 3
  55.  
  56.  
  57. # 1 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/cpu_defines.h" 1 3
  58. # 430 "/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8/bits/c++config.h" 2 3
  59. # 45 "/usr/include/c++/5.2.0/cstddef" 2 3
  60. # 1 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 1 3
  61. # 51 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 3
  62. typedef long int ptrdiff_t;
  63. # 62 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 3
  64. typedef long unsigned int size_t;
  65. # 118 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 3
  66. # 1 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/__stddef_max_align_t.h" 1 3
  67. # 35 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/__stddef_max_align_t.h" 3
  68. typedef struct {
  69.   long long __clang_max_align_nonce1
  70.       __attribute__((__aligned__(__alignof__(long long))));
  71.   long double __clang_max_align_nonce2
  72.       __attribute__((__aligned__(__alignof__(long double))));
  73. } max_align_t;
  74. # 119 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 2 3
  75. # 46 "/usr/include/c++/5.2.0/cstddef" 2 3
  76.  
  77.  
  78. namespace std
  79. {
  80.  
  81.   using ::max_align_t;
  82. }
  83. # 87 "/us/include/boost_1_64_0/boost/hana/config.hpp" 2
  84. # 13 "/us/include/boost_1_64_0/boost/hana/fwd/concept/constant.hpp" 2
  85.  
  86.  
  87.  
  88. namespace boost { namespace hana {
  89. # 206 "/us/include/boost_1_64_0/boost/hana/fwd/concept/constant.hpp"
  90.     template <typename C>
  91.     struct Constant;
  92. }}
  93. # 13 "/us/include/boost_1_64_0/boost/hana/concept/constant.hpp" 2
  94.  
  95.  
  96.  
  97. # 1 "/us/include/boost_1_64_0/boost/hana/core/default.hpp" 1
  98. # 13 "/us/include/boost_1_64_0/boost/hana/core/default.hpp"
  99. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/core/default.hpp" 1
  100. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/core/default.hpp"
  101. namespace boost { namespace hana {
  102. # 30 "/us/include/boost_1_64_0/boost/hana/fwd/core/default.hpp"
  103.     struct default_ { };
  104. # 51 "/us/include/boost_1_64_0/boost/hana/fwd/core/default.hpp"
  105.     template <typename T, typename = void>
  106.     struct is_default;
  107.  
  108. }}
  109. # 13 "/us/include/boost_1_64_0/boost/hana/core/default.hpp" 2
  110.  
  111.  
  112.  
  113.  
  114. # 1 "/usr/include/c++/5.2.0/type_traits" 1
  115. # 33 "/usr/include/c++/5.2.0/type_traits" 3
  116. # 42 "/usr/include/c++/5.2.0/type_traits" 3
  117. namespace std
  118. {
  119.   typedef unsigned short uint_least16_t;
  120.   typedef unsigned int uint_least32_t;
  121. }
  122.  
  123.  
  124.  
  125.  
  126.  
  127. namespace std __attribute__ ((__visibility__ ("default")))
  128. {
  129. # 68 "/usr/include/c++/5.2.0/type_traits" 3
  130.   template<typename _Tp, _Tp __v>
  131.     struct integral_constant
  132.     {
  133.       static constexpr _Tp value = __v;
  134.       typedef _Tp value_type;
  135.       typedef integral_constant<_Tp, __v> type;
  136.       constexpr operator value_type() const { return value; }
  137.  
  138.  
  139.  
  140.  
  141.       constexpr value_type operator()() const { return value; }
  142.  
  143.     };
  144.  
  145.   template<typename _Tp, _Tp __v>
  146.     constexpr _Tp integral_constant<_Tp, __v>::value;
  147.  
  148.  
  149.   typedef integral_constant<bool, true> true_type;
  150.  
  151.  
  152.   typedef integral_constant<bool, false> false_type;
  153.  
  154.   template<bool __v>
  155.     using __bool_constant = integral_constant<bool, __v>;
  156.  
  157.  
  158.  
  159.   template<bool, typename, typename>
  160.     struct conditional;
  161.  
  162.   template<typename...>
  163.     struct __or_;
  164.  
  165.   template<>
  166.     struct __or_<>
  167.     : public false_type
  168.     { };
  169.  
  170.   template<typename _B1>
  171.     struct __or_<_B1>
  172.     : public _B1
  173.     { };
  174.  
  175.   template<typename _B1, typename _B2>
  176.     struct __or_<_B1, _B2>
  177.     : public conditional<_B1::value, _B1, _B2>::type
  178.     { };
  179.  
  180.   template<typename _B1, typename _B2, typename _B3, typename... _Bn>
  181.     struct __or_<_B1, _B2, _B3, _Bn...>
  182.     : public conditional<_B1::value, _B1, __or_<_B2, _B3, _Bn...>>::type
  183.     { };
  184.  
  185.   template<typename...>
  186.     struct __and_;
  187.  
  188.   template<>
  189.     struct __and_<>
  190.     : public true_type
  191.     { };
  192.  
  193.   template<typename _B1>
  194.     struct __and_<_B1>
  195.     : public _B1
  196.     { };
  197.  
  198.   template<typename _B1, typename _B2>
  199.     struct __and_<_B1, _B2>
  200.     : public conditional<_B1::value, _B2, _B1>::type
  201.     { };
  202.  
  203.   template<typename _B1, typename _B2, typename _B3, typename... _Bn>
  204.     struct __and_<_B1, _B2, _B3, _Bn...>
  205.     : public conditional<_B1::value, __and_<_B2, _B3, _Bn...>, _B1>::type
  206.     { };
  207.  
  208.   template<typename _Pp>
  209.     struct __not_
  210.     : public integral_constant<bool, !_Pp::value>
  211.     { };
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.   template<typename _Tp>
  219.     struct __success_type
  220.     { typedef _Tp type; };
  221.  
  222.   struct __failure_type
  223.   { };
  224.  
  225.  
  226.  
  227.   template<typename>
  228.     struct remove_cv;
  229.  
  230.   template<typename>
  231.     struct __is_void_helper
  232.     : public false_type { };
  233.  
  234.   template<>
  235.     struct __is_void_helper<void>
  236.     : public true_type { };
  237.  
  238.  
  239.   template<typename _Tp>
  240.     struct is_void
  241.     : public __is_void_helper<typename remove_cv<_Tp>::type>::type
  242.     { };
  243.  
  244.   template<typename>
  245.     struct __is_integral_helper
  246.     : public false_type { };
  247.  
  248.   template<>
  249.     struct __is_integral_helper<bool>
  250.     : public true_type { };
  251.  
  252.   template<>
  253.     struct __is_integral_helper<char>
  254.     : public true_type { };
  255.  
  256.   template<>
  257.     struct __is_integral_helper<signed char>
  258.     : public true_type { };
  259.  
  260.   template<>
  261.     struct __is_integral_helper<unsigned char>
  262.     : public true_type { };
  263.  
  264.  
  265.   template<>
  266.     struct __is_integral_helper<wchar_t>
  267.     : public true_type { };
  268.  
  269.  
  270.   template<>
  271.     struct __is_integral_helper<char16_t>
  272.     : public true_type { };
  273.  
  274.   template<>
  275.     struct __is_integral_helper<char32_t>
  276.     : public true_type { };
  277.  
  278.   template<>
  279.     struct __is_integral_helper<short>
  280.     : public true_type { };
  281.  
  282.   template<>
  283.     struct __is_integral_helper<unsigned short>
  284.     : public true_type { };
  285.  
  286.   template<>
  287.     struct __is_integral_helper<int>
  288.     : public true_type { };
  289.  
  290.   template<>
  291.     struct __is_integral_helper<unsigned int>
  292.     : public true_type { };
  293.  
  294.   template<>
  295.     struct __is_integral_helper<long>
  296.     : public true_type { };
  297.  
  298.   template<>
  299.     struct __is_integral_helper<unsigned long>
  300.     : public true_type { };
  301.  
  302.   template<>
  303.     struct __is_integral_helper<long long>
  304.     : public true_type { };
  305.  
  306.   template<>
  307.     struct __is_integral_helper<unsigned long long>
  308.     : public true_type { };
  309. # 288 "/usr/include/c++/5.2.0/type_traits" 3
  310.   template<typename _Tp>
  311.     struct is_integral
  312.     : public __is_integral_helper<typename remove_cv<_Tp>::type>::type
  313.     { };
  314.  
  315.   template<typename>
  316.     struct __is_floating_point_helper
  317.     : public false_type { };
  318.  
  319.   template<>
  320.     struct __is_floating_point_helper<float>
  321.     : public true_type { };
  322.  
  323.   template<>
  324.     struct __is_floating_point_helper<double>
  325.     : public true_type { };
  326.  
  327.   template<>
  328.     struct __is_floating_point_helper<long double>
  329.     : public true_type { };
  330. # 316 "/usr/include/c++/5.2.0/type_traits" 3
  331.   template<typename _Tp>
  332.     struct is_floating_point
  333.     : public __is_floating_point_helper<typename remove_cv<_Tp>::type>::type
  334.     { };
  335.  
  336.  
  337.   template<typename>
  338.     struct is_array
  339.     : public false_type { };
  340.  
  341.   template<typename _Tp, std::size_t _Size>
  342.     struct is_array<_Tp[_Size]>
  343.     : public true_type { };
  344.  
  345.   template<typename _Tp>
  346.     struct is_array<_Tp[]>
  347.     : public true_type { };
  348.  
  349.   template<typename>
  350.     struct __is_pointer_helper
  351.     : public false_type { };
  352.  
  353.   template<typename _Tp>
  354.     struct __is_pointer_helper<_Tp*>
  355.     : public true_type { };
  356.  
  357.  
  358.   template<typename _Tp>
  359.     struct is_pointer
  360.     : public __is_pointer_helper<typename remove_cv<_Tp>::type>::type
  361.     { };
  362.  
  363.  
  364.   template<typename>
  365.     struct is_lvalue_reference
  366.     : public false_type { };
  367.  
  368.   template<typename _Tp>
  369.     struct is_lvalue_reference<_Tp&>
  370.     : public true_type { };
  371.  
  372.  
  373.   template<typename>
  374.     struct is_rvalue_reference
  375.     : public false_type { };
  376.  
  377.   template<typename _Tp>
  378.     struct is_rvalue_reference<_Tp&&>
  379.     : public true_type { };
  380.  
  381.   template<typename>
  382.     struct is_function;
  383.  
  384.   template<typename>
  385.     struct __is_member_object_pointer_helper
  386.     : public false_type { };
  387.  
  388.   template<typename _Tp, typename _Cp>
  389.     struct __is_member_object_pointer_helper<_Tp _Cp::*>
  390.     : public integral_constant<bool, !is_function<_Tp>::value> { };
  391.  
  392.  
  393.   template<typename _Tp>
  394.     struct is_member_object_pointer
  395.     : public __is_member_object_pointer_helper<
  396.     typename remove_cv<_Tp>::type>::type
  397.     { };
  398.  
  399.   template<typename>
  400.     struct __is_member_function_pointer_helper
  401.     : public false_type { };
  402.  
  403.   template<typename _Tp, typename _Cp>
  404.     struct __is_member_function_pointer_helper<_Tp _Cp::*>
  405.     : public integral_constant<bool, is_function<_Tp>::value> { };
  406.  
  407.  
  408.   template<typename _Tp>
  409.     struct is_member_function_pointer
  410.     : public __is_member_function_pointer_helper<
  411.     typename remove_cv<_Tp>::type>::type
  412.     { };
  413.  
  414.  
  415.   template<typename _Tp>
  416.     struct is_enum
  417.     : public integral_constant<bool, __is_enum(_Tp)>
  418.     { };
  419.  
  420.  
  421.   template<typename _Tp>
  422.     struct is_union
  423.     : public integral_constant<bool, __is_union(_Tp)>
  424.     { };
  425.  
  426.  
  427.   template<typename _Tp>
  428.     struct is_class
  429.     : public integral_constant<bool, __is_class(_Tp)>
  430.     { };
  431.  
  432.  
  433.   template<typename>
  434.     struct is_function
  435.     : public false_type { };
  436.  
  437.   template<typename _Res, typename... _ArgTypes>
  438.     struct is_function<_Res(_ArgTypes...)>
  439.     : public true_type { };
  440.  
  441.   template<typename _Res, typename... _ArgTypes>
  442.     struct is_function<_Res(_ArgTypes...) &>
  443.     : public true_type { };
  444.  
  445.   template<typename _Res, typename... _ArgTypes>
  446.     struct is_function<_Res(_ArgTypes...) &&>
  447.     : public true_type { };
  448.  
  449.   template<typename _Res, typename... _ArgTypes>
  450.     struct is_function<_Res(_ArgTypes......)>
  451.     : public true_type { };
  452.  
  453.   template<typename _Res, typename... _ArgTypes>
  454.     struct is_function<_Res(_ArgTypes......) &>
  455.     : public true_type { };
  456.  
  457.   template<typename _Res, typename... _ArgTypes>
  458.     struct is_function<_Res(_ArgTypes......) &&>
  459.     : public true_type { };
  460.  
  461.   template<typename _Res, typename... _ArgTypes>
  462.     struct is_function<_Res(_ArgTypes...) const>
  463.     : public true_type { };
  464.  
  465.   template<typename _Res, typename... _ArgTypes>
  466.     struct is_function<_Res(_ArgTypes...) const &>
  467.     : public true_type { };
  468.  
  469.   template<typename _Res, typename... _ArgTypes>
  470.     struct is_function<_Res(_ArgTypes...) const &&>
  471.     : public true_type { };
  472.  
  473.   template<typename _Res, typename... _ArgTypes>
  474.     struct is_function<_Res(_ArgTypes......) const>
  475.     : public true_type { };
  476.  
  477.   template<typename _Res, typename... _ArgTypes>
  478.     struct is_function<_Res(_ArgTypes......) const &>
  479.     : public true_type { };
  480.  
  481.   template<typename _Res, typename... _ArgTypes>
  482.     struct is_function<_Res(_ArgTypes......) const &&>
  483.     : public true_type { };
  484.  
  485.   template<typename _Res, typename... _ArgTypes>
  486.     struct is_function<_Res(_ArgTypes...) volatile>
  487.     : public true_type { };
  488.  
  489.   template<typename _Res, typename... _ArgTypes>
  490.     struct is_function<_Res(_ArgTypes...) volatile &>
  491.     : public true_type { };
  492.  
  493.   template<typename _Res, typename... _ArgTypes>
  494.     struct is_function<_Res(_ArgTypes...) volatile &&>
  495.     : public true_type { };
  496.  
  497.   template<typename _Res, typename... _ArgTypes>
  498.     struct is_function<_Res(_ArgTypes......) volatile>
  499.     : public true_type { };
  500.  
  501.   template<typename _Res, typename... _ArgTypes>
  502.     struct is_function<_Res(_ArgTypes......) volatile &>
  503.     : public true_type { };
  504.  
  505.   template<typename _Res, typename... _ArgTypes>
  506.     struct is_function<_Res(_ArgTypes......) volatile &&>
  507.     : public true_type { };
  508.  
  509.   template<typename _Res, typename... _ArgTypes>
  510.     struct is_function<_Res(_ArgTypes...) const volatile>
  511.     : public true_type { };
  512.  
  513.   template<typename _Res, typename... _ArgTypes>
  514.     struct is_function<_Res(_ArgTypes...) const volatile &>
  515.     : public true_type { };
  516.  
  517.   template<typename _Res, typename... _ArgTypes>
  518.     struct is_function<_Res(_ArgTypes...) const volatile &&>
  519.     : public true_type { };
  520.  
  521.   template<typename _Res, typename... _ArgTypes>
  522.     struct is_function<_Res(_ArgTypes......) const volatile>
  523.     : public true_type { };
  524.  
  525.   template<typename _Res, typename... _ArgTypes>
  526.     struct is_function<_Res(_ArgTypes......) const volatile &>
  527.     : public true_type { };
  528.  
  529.   template<typename _Res, typename... _ArgTypes>
  530.     struct is_function<_Res(_ArgTypes......) const volatile &&>
  531.     : public true_type { };
  532.  
  533.  
  534.  
  535.   template<typename>
  536.     struct __is_null_pointer_helper
  537.     : public false_type { };
  538.  
  539.   template<>
  540.     struct __is_null_pointer_helper<std::nullptr_t>
  541.     : public true_type { };
  542.  
  543.  
  544.   template<typename _Tp>
  545.     struct is_null_pointer
  546.     : public __is_null_pointer_helper<typename remove_cv<_Tp>::type>::type
  547.     { };
  548.  
  549.  
  550.   template<typename _Tp>
  551.     struct __is_nullptr_t
  552.     : public is_null_pointer<_Tp>
  553.     { };
  554.  
  555.  
  556.  
  557.  
  558.   template<typename _Tp>
  559.     struct is_reference
  560.     : public __or_<is_lvalue_reference<_Tp>,
  561.                    is_rvalue_reference<_Tp>>::type
  562.     { };
  563.  
  564.  
  565.   template<typename _Tp>
  566.     struct is_arithmetic
  567.     : public __or_<is_integral<_Tp>, is_floating_point<_Tp>>::type
  568.     { };
  569.  
  570.  
  571.   template<typename _Tp>
  572.     struct is_fundamental
  573.     : public __or_<is_arithmetic<_Tp>, is_void<_Tp>,
  574.      is_null_pointer<_Tp>>::type
  575.     { };
  576.  
  577.  
  578.   template<typename _Tp>
  579.     struct is_object
  580.     : public __not_<__or_<is_function<_Tp>, is_reference<_Tp>,
  581.                           is_void<_Tp>>>::type
  582.     { };
  583.  
  584.   template<typename>
  585.     struct is_member_pointer;
  586.  
  587.  
  588.   template<typename _Tp>
  589.     struct is_scalar
  590.     : public __or_<is_arithmetic<_Tp>, is_enum<_Tp>, is_pointer<_Tp>,
  591.                    is_member_pointer<_Tp>, is_null_pointer<_Tp>>::type
  592.     { };
  593.  
  594.  
  595.   template<typename _Tp>
  596.     struct is_compound
  597.     : public integral_constant<bool, !is_fundamental<_Tp>::value> { };
  598.  
  599.   template<typename _Tp>
  600.     struct __is_member_pointer_helper
  601.     : public false_type { };
  602.  
  603.   template<typename _Tp, typename _Cp>
  604.     struct __is_member_pointer_helper<_Tp _Cp::*>
  605.     : public true_type { };
  606.  
  607.  
  608.   template<typename _Tp>
  609.     struct is_member_pointer
  610.     : public __is_member_pointer_helper<typename remove_cv<_Tp>::type>::type
  611.     { };
  612.  
  613.  
  614.  
  615.   template<typename _Tp>
  616.     struct __is_referenceable
  617.     : public __or_<is_object<_Tp>, is_reference<_Tp>>::type
  618.     { };
  619.  
  620.   template<typename _Res, typename... _Args>
  621.     struct __is_referenceable<_Res(_Args...)>
  622.     : public true_type
  623.     { };
  624.  
  625.   template<typename _Res, typename... _Args>
  626.     struct __is_referenceable<_Res(_Args......)>
  627.     : public true_type
  628.     { };
  629.  
  630.  
  631.  
  632.  
  633.   template<typename>
  634.     struct is_const
  635.     : public false_type { };
  636.  
  637.   template<typename _Tp>
  638.     struct is_const<_Tp const>
  639.     : public true_type { };
  640.  
  641.  
  642.   template<typename>
  643.     struct is_volatile
  644.     : public false_type { };
  645.  
  646.   template<typename _Tp>
  647.     struct is_volatile<_Tp volatile>
  648.     : public true_type { };
  649.  
  650.  
  651.   template<typename _Tp>
  652.     struct is_trivial
  653.     : public integral_constant<bool, __is_trivial(_Tp)>
  654.     { };
  655.  
  656.  
  657.   template<typename _Tp>
  658.     struct is_trivially_copyable
  659.     : public integral_constant<bool, __is_trivially_copyable(_Tp)>
  660.     { };
  661.  
  662.  
  663.   template<typename _Tp>
  664.     struct is_standard_layout
  665.     : public integral_constant<bool, __is_standard_layout(_Tp)>
  666.     { };
  667.  
  668.  
  669.  
  670.   template<typename _Tp>
  671.     struct is_pod
  672.     : public integral_constant<bool, __is_pod(_Tp)>
  673.     { };
  674.  
  675.  
  676.   template<typename _Tp>
  677.     struct is_literal_type
  678.     : public integral_constant<bool, __is_literal_type(_Tp)>
  679.     { };
  680.  
  681.  
  682.   template<typename _Tp>
  683.     struct is_empty
  684.     : public integral_constant<bool, __is_empty(_Tp)>
  685.     { };
  686.  
  687.  
  688.   template<typename _Tp>
  689.     struct is_polymorphic
  690.     : public integral_constant<bool, __is_polymorphic(_Tp)>
  691.     { };
  692.  
  693.  
  694.  
  695.  
  696.   template<typename _Tp>
  697.     struct is_final
  698.     : public integral_constant<bool, __is_final(_Tp)>
  699.     { };
  700.  
  701.  
  702.  
  703.   template<typename _Tp>
  704.     struct is_abstract
  705.     : public integral_constant<bool, __is_abstract(_Tp)>
  706.     { };
  707.  
  708.   template<typename _Tp,
  709.     bool = is_arithmetic<_Tp>::value>
  710.     struct __is_signed_helper
  711.     : public false_type { };
  712.  
  713.   template<typename _Tp>
  714.     struct __is_signed_helper<_Tp, true>
  715.     : public integral_constant<bool, _Tp(-1) < _Tp(0)>
  716.     { };
  717.  
  718.  
  719.   template<typename _Tp>
  720.     struct is_signed
  721.     : public __is_signed_helper<_Tp>::type
  722.     { };
  723.  
  724.  
  725.   template<typename _Tp>
  726.     struct is_unsigned
  727.     : public __and_<is_arithmetic<_Tp>, __not_<is_signed<_Tp>>>::type
  728.     { };
  729.  
  730.  
  731.  
  732.  
  733.   template<typename>
  734.     struct add_rvalue_reference;
  735.  
  736.  
  737.  
  738.  
  739.  
  740.   template<typename _Tp>
  741.     typename add_rvalue_reference<_Tp>::type declval() noexcept;
  742.  
  743.   template<typename, unsigned = 0>
  744.     struct extent;
  745.  
  746.   template<typename>
  747.     struct remove_all_extents;
  748.  
  749.   template<typename _Tp>
  750.     struct __is_array_known_bounds
  751.     : public integral_constant<bool, (extent<_Tp>::value > 0)>
  752.     { };
  753.  
  754.   template<typename _Tp>
  755.     struct __is_array_unknown_bounds
  756.     : public __and_<is_array<_Tp>, __not_<extent<_Tp>>>::type
  757.     { };
  758.  
  759.  
  760.  
  761.  
  762.  
  763.  
  764.   struct __do_is_destructible_impl
  765.   {
  766.     template<typename _Tp, typename = decltype(declval<_Tp&>().~_Tp())>
  767.       static true_type __test(int);
  768.  
  769.     template<typename>
  770.       static false_type __test(...);
  771.   };
  772.  
  773.   template<typename _Tp>
  774.     struct __is_destructible_impl
  775.     : public __do_is_destructible_impl
  776.     {
  777.       typedef decltype(__test<_Tp>(0)) type;
  778.     };
  779.  
  780.   template<typename _Tp,
  781.            bool = __or_<is_void<_Tp>,
  782.                         __is_array_unknown_bounds<_Tp>,
  783.                         is_function<_Tp>>::value,
  784.            bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
  785.     struct __is_destructible_safe;
  786.  
  787.   template<typename _Tp>
  788.     struct __is_destructible_safe<_Tp, false, false>
  789.     : public __is_destructible_impl<typename
  790.                remove_all_extents<_Tp>::type>::type
  791.     { };
  792.  
  793.   template<typename _Tp>
  794.     struct __is_destructible_safe<_Tp, true, false>
  795.     : public false_type { };
  796.  
  797.   template<typename _Tp>
  798.     struct __is_destructible_safe<_Tp, false, true>
  799.     : public true_type { };
  800.  
  801.  
  802.   template<typename _Tp>
  803.     struct is_destructible
  804.     : public __is_destructible_safe<_Tp>::type
  805.     { };
  806.  
  807.  
  808.  
  809.  
  810.  
  811.   struct __do_is_nt_destructible_impl
  812.   {
  813.     template<typename _Tp>
  814.       static integral_constant<bool, noexcept(declval<_Tp&>().~_Tp())>
  815.         __test(int);
  816.  
  817.     template<typename>
  818.       static false_type __test(...);
  819.   };
  820.  
  821.   template<typename _Tp>
  822.     struct __is_nt_destructible_impl
  823.     : public __do_is_nt_destructible_impl
  824.     {
  825.       typedef decltype(__test<_Tp>(0)) type;
  826.     };
  827.  
  828.   template<typename _Tp,
  829.            bool = __or_<is_void<_Tp>,
  830.                         __is_array_unknown_bounds<_Tp>,
  831.                         is_function<_Tp>>::value,
  832.            bool = __or_<is_reference<_Tp>, is_scalar<_Tp>>::value>
  833.     struct __is_nt_destructible_safe;
  834.  
  835.   template<typename _Tp>
  836.     struct __is_nt_destructible_safe<_Tp, false, false>
  837.     : public __is_nt_destructible_impl<typename
  838.                remove_all_extents<_Tp>::type>::type
  839.     { };
  840.  
  841.   template<typename _Tp>
  842.     struct __is_nt_destructible_safe<_Tp, true, false>
  843.     : public false_type { };
  844.  
  845.   template<typename _Tp>
  846.     struct __is_nt_destructible_safe<_Tp, false, true>
  847.     : public true_type { };
  848.  
  849.  
  850.   template<typename _Tp>
  851.     struct is_nothrow_destructible
  852.     : public __is_nt_destructible_safe<_Tp>::type
  853.     { };
  854.  
  855.   struct __do_is_default_constructible_impl
  856.   {
  857.     template<typename _Tp, typename = decltype(_Tp())>
  858.       static true_type __test(int);
  859.  
  860.     template<typename>
  861.       static false_type __test(...);
  862.   };
  863.  
  864.   template<typename _Tp>
  865.     struct __is_default_constructible_impl
  866.     : public __do_is_default_constructible_impl
  867.     {
  868.       typedef decltype(__test<_Tp>(0)) type;
  869.     };
  870.  
  871.   template<typename _Tp>
  872.     struct __is_default_constructible_atom
  873.     : public __and_<__not_<is_void<_Tp>>,
  874.                     __is_default_constructible_impl<_Tp>>::type
  875.     { };
  876.  
  877.   template<typename _Tp, bool = is_array<_Tp>::value>
  878.     struct __is_default_constructible_safe;
  879.  
  880.  
  881.  
  882.  
  883.  
  884.  
  885.   template<typename _Tp>
  886.     struct __is_default_constructible_safe<_Tp, true>
  887.     : public __and_<__is_array_known_bounds<_Tp>,
  888.       __is_default_constructible_atom<typename
  889.                       remove_all_extents<_Tp>::type>>::type
  890.     { };
  891.  
  892.   template<typename _Tp>
  893.     struct __is_default_constructible_safe<_Tp, false>
  894.     : public __is_default_constructible_atom<_Tp>::type
  895.     { };
  896.  
  897.  
  898.   template<typename _Tp>
  899.     struct is_default_constructible
  900.     : public __is_default_constructible_safe<_Tp>::type
  901.     { };
  902. # 900 "/usr/include/c++/5.2.0/type_traits" 3
  903.   struct __do_is_static_castable_impl
  904.   {
  905.     template<typename _From, typename _To, typename
  906.              = decltype(static_cast<_To>(declval<_From>()))>
  907.       static true_type __test(int);
  908.  
  909.     template<typename, typename>
  910.       static false_type __test(...);
  911.   };
  912.  
  913.   template<typename _From, typename _To>
  914.     struct __is_static_castable_impl
  915.     : public __do_is_static_castable_impl
  916.     {
  917.       typedef decltype(__test<_From, _To>(0)) type;
  918.     };
  919.  
  920.   template<typename _From, typename _To>
  921.     struct __is_static_castable_safe
  922.     : public __is_static_castable_impl<_From, _To>::type
  923.     { };
  924.  
  925.  
  926.   template<typename _From, typename _To>
  927.     struct __is_static_castable
  928.     : public integral_constant<bool, (__is_static_castable_safe<
  929.           _From, _To>::value)>
  930.     { };
  931.  
  932.  
  933.  
  934.  
  935.  
  936.  
  937.   struct __do_is_direct_constructible_impl
  938.   {
  939.     template<typename _Tp, typename _Arg, typename
  940.       = decltype(::new _Tp(declval<_Arg>()))>
  941.       static true_type __test(int);
  942.  
  943.     template<typename, typename>
  944.       static false_type __test(...);
  945.   };
  946.  
  947.   template<typename _Tp, typename _Arg>
  948.     struct __is_direct_constructible_impl
  949.     : public __do_is_direct_constructible_impl
  950.     {
  951.       typedef decltype(__test<_Tp, _Arg>(0)) type;
  952.     };
  953.  
  954.   template<typename _Tp, typename _Arg>
  955.     struct __is_direct_constructible_new_safe
  956.     : public __and_<is_destructible<_Tp>,
  957.                     __is_direct_constructible_impl<_Tp, _Arg>>::type
  958.     { };
  959.  
  960.   template<typename, typename>
  961.     struct is_same;
  962.  
  963.   template<typename, typename>
  964.     struct is_base_of;
  965.  
  966.   template<typename>
  967.     struct remove_reference;
  968.  
  969.   template<typename _From, typename _To, bool
  970.            = __not_<__or_<is_void<_From>,
  971.                           is_function<_From>>>::value>
  972.     struct __is_base_to_derived_ref;
  973.  
  974.  
  975.  
  976.   template<typename _From, typename _To>
  977.     struct __is_base_to_derived_ref<_From, _To, true>
  978.     {
  979.       typedef typename remove_cv<typename remove_reference<_From
  980.         >::type>::type __src_t;
  981.       typedef typename remove_cv<typename remove_reference<_To
  982.         >::type>::type __dst_t;
  983.       typedef __and_<__not_<is_same<__src_t, __dst_t>>,
  984.        is_base_of<__src_t, __dst_t>> type;
  985.       static constexpr bool value = type::value;
  986.     };
  987.  
  988.   template<typename _From, typename _To>
  989.     struct __is_base_to_derived_ref<_From, _To, false>
  990.     : public false_type
  991.     { };
  992.  
  993.   template<typename _From, typename _To, bool
  994.            = __and_<is_lvalue_reference<_From>,
  995.                     is_rvalue_reference<_To>>::value>
  996.     struct __is_lvalue_to_rvalue_ref;
  997.  
  998.  
  999.  
  1000.   template<typename _From, typename _To>
  1001.     struct __is_lvalue_to_rvalue_ref<_From, _To, true>
  1002.     {
  1003.       typedef typename remove_cv<typename remove_reference<
  1004.         _From>::type>::type __src_t;
  1005.       typedef typename remove_cv<typename remove_reference<
  1006.         _To>::type>::type __dst_t;
  1007.       typedef __and_<__not_<is_function<__src_t>>,
  1008.         __or_<is_same<__src_t, __dst_t>,
  1009.       is_base_of<__dst_t, __src_t>>> type;
  1010.       static constexpr bool value = type::value;
  1011.     };
  1012.  
  1013.   template<typename _From, typename _To>
  1014.     struct __is_lvalue_to_rvalue_ref<_From, _To, false>
  1015.     : public false_type
  1016.     { };
  1017.  
  1018.  
  1019.  
  1020.  
  1021.  
  1022.  
  1023.  
  1024.   template<typename _Tp, typename _Arg>
  1025.     struct __is_direct_constructible_ref_cast
  1026.     : public __and_<__is_static_castable<_Arg, _Tp>,
  1027.                     __not_<__or_<__is_base_to_derived_ref<_Arg, _Tp>,
  1028.                                  __is_lvalue_to_rvalue_ref<_Arg, _Tp>
  1029.                    >>>::type
  1030.     { };
  1031.  
  1032.   template<typename _Tp, typename _Arg>
  1033.     struct __is_direct_constructible_new
  1034.     : public conditional<is_reference<_Tp>::value,
  1035.     __is_direct_constructible_ref_cast<_Tp, _Arg>,
  1036.     __is_direct_constructible_new_safe<_Tp, _Arg>
  1037.     >::type
  1038.     { };
  1039.  
  1040.   template<typename _Tp, typename _Arg>
  1041.     struct __is_direct_constructible
  1042.     : public __is_direct_constructible_new<_Tp, _Arg>::type
  1043.     { };
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.   struct __do_is_nary_constructible_impl
  1051.   {
  1052.     template<typename _Tp, typename... _Args, typename
  1053.              = decltype(_Tp(declval<_Args>()...))>
  1054.       static true_type __test(int);
  1055.  
  1056.     template<typename, typename...>
  1057.       static false_type __test(...);
  1058.   };
  1059.  
  1060.   template<typename _Tp, typename... _Args>
  1061.     struct __is_nary_constructible_impl
  1062.     : public __do_is_nary_constructible_impl
  1063.     {
  1064.       typedef decltype(__test<_Tp, _Args...>(0)) type;
  1065.     };
  1066.  
  1067.   template<typename _Tp, typename... _Args>
  1068.     struct __is_nary_constructible
  1069.     : public __is_nary_constructible_impl<_Tp, _Args...>::type
  1070.     {
  1071.       static_assert(sizeof...(_Args) > 1,
  1072.                     "Only useful for > 1 arguments");
  1073.     };
  1074.  
  1075.   template<typename _Tp, typename... _Args>
  1076.     struct __is_constructible_impl
  1077.     : public __is_nary_constructible<_Tp, _Args...>
  1078.     { };
  1079.  
  1080.   template<typename _Tp, typename _Arg>
  1081.     struct __is_constructible_impl<_Tp, _Arg>
  1082.     : public __is_direct_constructible<_Tp, _Arg>
  1083.     { };
  1084.  
  1085.   template<typename _Tp>
  1086.     struct __is_constructible_impl<_Tp>
  1087.     : public is_default_constructible<_Tp>
  1088.     { };
  1089.  
  1090.  
  1091.   template<typename _Tp, typename... _Args>
  1092.     struct is_constructible
  1093.     : public __is_constructible_impl<_Tp, _Args...>::type
  1094.     { };
  1095.  
  1096.   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
  1097.     struct __is_copy_constructible_impl;
  1098.  
  1099.   template<typename _Tp>
  1100.     struct __is_copy_constructible_impl<_Tp, false>
  1101.     : public false_type { };
  1102.  
  1103.   template<typename _Tp>
  1104.     struct __is_copy_constructible_impl<_Tp, true>
  1105.     : public is_constructible<_Tp, const _Tp&>
  1106.     { };
  1107.  
  1108.  
  1109.   template<typename _Tp>
  1110.     struct is_copy_constructible
  1111.     : public __is_copy_constructible_impl<_Tp>
  1112.     { };
  1113.  
  1114.   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
  1115.     struct __is_move_constructible_impl;
  1116.  
  1117.   template<typename _Tp>
  1118.     struct __is_move_constructible_impl<_Tp, false>
  1119.     : public false_type { };
  1120.  
  1121.   template<typename _Tp>
  1122.     struct __is_move_constructible_impl<_Tp, true>
  1123.     : public is_constructible<_Tp, _Tp&&>
  1124.     { };
  1125.  
  1126.  
  1127.   template<typename _Tp>
  1128.     struct is_move_constructible
  1129.     : public __is_move_constructible_impl<_Tp>
  1130.     { };
  1131.  
  1132.   template<typename _Tp>
  1133.     struct __is_nt_default_constructible_atom
  1134.     : public integral_constant<bool, noexcept(_Tp())>
  1135.     { };
  1136.  
  1137.   template<typename _Tp, bool = is_array<_Tp>::value>
  1138.     struct __is_nt_default_constructible_impl;
  1139.  
  1140.   template<typename _Tp>
  1141.     struct __is_nt_default_constructible_impl<_Tp, true>
  1142.     : public __and_<__is_array_known_bounds<_Tp>,
  1143.       __is_nt_default_constructible_atom<typename
  1144.                       remove_all_extents<_Tp>::type>>::type
  1145.     { };
  1146.  
  1147.   template<typename _Tp>
  1148.     struct __is_nt_default_constructible_impl<_Tp, false>
  1149.     : public __is_nt_default_constructible_atom<_Tp>
  1150.     { };
  1151.  
  1152.  
  1153.   template<typename _Tp>
  1154.     struct is_nothrow_default_constructible
  1155.     : public __and_<is_default_constructible<_Tp>,
  1156.                     __is_nt_default_constructible_impl<_Tp>>::type
  1157.     { };
  1158.  
  1159.   template<typename _Tp, typename... _Args>
  1160.     struct __is_nt_constructible_impl
  1161.     : public integral_constant<bool, noexcept(_Tp(declval<_Args>()...))>
  1162.     { };
  1163.  
  1164.   template<typename _Tp, typename _Arg>
  1165.     struct __is_nt_constructible_impl<_Tp, _Arg>
  1166.     : public integral_constant<bool,
  1167.                                noexcept(static_cast<_Tp>(declval<_Arg>()))>
  1168.     { };
  1169.  
  1170.   template<typename _Tp>
  1171.     struct __is_nt_constructible_impl<_Tp>
  1172.     : public is_nothrow_default_constructible<_Tp>
  1173.     { };
  1174.  
  1175.  
  1176.   template<typename _Tp, typename... _Args>
  1177.     struct is_nothrow_constructible
  1178.     : public __and_<is_constructible<_Tp, _Args...>,
  1179.       __is_nt_constructible_impl<_Tp, _Args...>>::type
  1180.     { };
  1181.  
  1182.   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
  1183.     struct __is_nothrow_copy_constructible_impl;
  1184.  
  1185.   template<typename _Tp>
  1186.     struct __is_nothrow_copy_constructible_impl<_Tp, false>
  1187.     : public false_type { };
  1188.  
  1189.   template<typename _Tp>
  1190.     struct __is_nothrow_copy_constructible_impl<_Tp, true>
  1191.     : public is_nothrow_constructible<_Tp, const _Tp&>
  1192.     { };
  1193.  
  1194.  
  1195.   template<typename _Tp>
  1196.     struct is_nothrow_copy_constructible
  1197.     : public __is_nothrow_copy_constructible_impl<_Tp>
  1198.     { };
  1199.  
  1200.   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
  1201.     struct __is_nothrow_move_constructible_impl;
  1202.  
  1203.   template<typename _Tp>
  1204.     struct __is_nothrow_move_constructible_impl<_Tp, false>
  1205.     : public false_type { };
  1206.  
  1207.   template<typename _Tp>
  1208.     struct __is_nothrow_move_constructible_impl<_Tp, true>
  1209.     : public is_nothrow_constructible<_Tp, _Tp&&>
  1210.     { };
  1211.  
  1212.  
  1213.   template<typename _Tp>
  1214.     struct is_nothrow_move_constructible
  1215.     : public __is_nothrow_move_constructible_impl<_Tp>
  1216.     { };
  1217.  
  1218.   template<typename _Tp, typename _Up>
  1219.     class __is_assignable_helper
  1220.     {
  1221.       template<typename _Tp1, typename _Up1,
  1222.         typename = decltype(declval<_Tp1>() = declval<_Up1>())>
  1223.  static true_type
  1224.  __test(int);
  1225.  
  1226.       template<typename, typename>
  1227.  static false_type
  1228.  __test(...);
  1229.  
  1230.     public:
  1231.       typedef decltype(__test<_Tp, _Up>(0)) type;
  1232.     };
  1233.  
  1234.  
  1235.   template<typename _Tp, typename _Up>
  1236.     struct is_assignable
  1237.       : public __is_assignable_helper<_Tp, _Up>::type
  1238.     { };
  1239.  
  1240.   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
  1241.     struct __is_copy_assignable_impl;
  1242.  
  1243.   template<typename _Tp>
  1244.     struct __is_copy_assignable_impl<_Tp, false>
  1245.     : public false_type { };
  1246.  
  1247.   template<typename _Tp>
  1248.     struct __is_copy_assignable_impl<_Tp, true>
  1249.     : public is_assignable<_Tp&, const _Tp&>
  1250.     { };
  1251.  
  1252.  
  1253.   template<typename _Tp>
  1254.     struct is_copy_assignable
  1255.     : public __is_copy_assignable_impl<_Tp>
  1256.     { };
  1257.  
  1258.   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
  1259.     struct __is_move_assignable_impl;
  1260.  
  1261.   template<typename _Tp>
  1262.     struct __is_move_assignable_impl<_Tp, false>
  1263.     : public false_type { };
  1264.  
  1265.   template<typename _Tp>
  1266.     struct __is_move_assignable_impl<_Tp, true>
  1267.     : public is_assignable<_Tp&, _Tp&&>
  1268.     { };
  1269.  
  1270.  
  1271.   template<typename _Tp>
  1272.     struct is_move_assignable
  1273.     : public __is_move_assignable_impl<_Tp>
  1274.     { };
  1275.  
  1276.   template<typename _Tp, typename _Up>
  1277.     struct __is_nt_assignable_impl
  1278.     : public integral_constant<bool, noexcept(declval<_Tp>() = declval<_Up>())>
  1279.     { };
  1280.  
  1281.  
  1282.   template<typename _Tp, typename _Up>
  1283.     struct is_nothrow_assignable
  1284.     : public __and_<is_assignable<_Tp, _Up>,
  1285.       __is_nt_assignable_impl<_Tp, _Up>>::type
  1286.     { };
  1287.  
  1288.   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
  1289.     struct __is_nt_copy_assignable_impl;
  1290.  
  1291.   template<typename _Tp>
  1292.     struct __is_nt_copy_assignable_impl<_Tp, false>
  1293.     : public false_type { };
  1294.  
  1295.   template<typename _Tp>
  1296.     struct __is_nt_copy_assignable_impl<_Tp, true>
  1297.     : public is_nothrow_assignable<_Tp&, const _Tp&>
  1298.     { };
  1299.  
  1300.  
  1301.   template<typename _Tp>
  1302.     struct is_nothrow_copy_assignable
  1303.     : public __is_nt_copy_assignable_impl<_Tp>
  1304.     { };
  1305.  
  1306.   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
  1307.     struct __is_nt_move_assignable_impl;
  1308.  
  1309.   template<typename _Tp>
  1310.     struct __is_nt_move_assignable_impl<_Tp, false>
  1311.     : public false_type { };
  1312.  
  1313.   template<typename _Tp>
  1314.     struct __is_nt_move_assignable_impl<_Tp, true>
  1315.     : public is_nothrow_assignable<_Tp&, _Tp&&>
  1316.     { };
  1317.  
  1318.  
  1319.   template<typename _Tp>
  1320.     struct is_nothrow_move_assignable
  1321.     : public __is_nt_move_assignable_impl<_Tp>
  1322.     { };
  1323.  
  1324.  
  1325.   template<typename _Tp, typename... _Args>
  1326.     struct is_trivially_constructible
  1327.     : public __and_<is_constructible<_Tp, _Args...>, integral_constant<bool,
  1328.    __is_trivially_constructible(_Tp, _Args...)>>::type
  1329.     { };
  1330.  
  1331.  
  1332.   template<typename _Tp>
  1333.     struct is_trivially_default_constructible
  1334.     : public is_trivially_constructible<_Tp>::type
  1335.     { };
  1336.  
  1337.  
  1338.   template<typename _Tp>
  1339.     struct is_trivially_copy_constructible
  1340.     : public __and_<is_copy_constructible<_Tp>,
  1341.       integral_constant<bool,
  1342.    __is_trivially_constructible(_Tp, const _Tp&)>>::type
  1343.     { };
  1344.  
  1345.  
  1346.   template<typename _Tp>
  1347.     struct is_trivially_move_constructible
  1348.     : public __and_<is_move_constructible<_Tp>,
  1349.       integral_constant<bool,
  1350.    __is_trivially_constructible(_Tp, _Tp&&)>>::type
  1351.     { };
  1352.  
  1353.  
  1354.   template<typename _Tp, typename _Up>
  1355.     struct is_trivially_assignable
  1356.     : public __and_<is_assignable<_Tp, _Up>,
  1357.       integral_constant<bool,
  1358.    __is_trivially_assignable(_Tp, _Up)>>::type
  1359.     { };
  1360.  
  1361.  
  1362.   template<typename _Tp>
  1363.     struct is_trivially_copy_assignable
  1364.     : public __and_<is_copy_assignable<_Tp>,
  1365.       integral_constant<bool,
  1366.    __is_trivially_assignable(_Tp&, const _Tp&)>>::type
  1367.     { };
  1368.  
  1369.  
  1370.   template<typename _Tp>
  1371.     struct is_trivially_move_assignable
  1372.     : public __and_<is_move_assignable<_Tp>,
  1373.       integral_constant<bool,
  1374.    __is_trivially_assignable(_Tp&, _Tp&&)>>::type
  1375.     { };
  1376.  
  1377.  
  1378.   template<typename _Tp>
  1379.     struct is_trivially_destructible
  1380.     : public __and_<is_destructible<_Tp>, integral_constant<bool,
  1381.          __has_trivial_destructor(_Tp)>>::type
  1382.     { };
  1383.  
  1384.  
  1385.   template<typename _Tp>
  1386.     struct has_trivial_default_constructor
  1387.     : public integral_constant<bool, __has_trivial_constructor(_Tp)>
  1388.     { } __attribute__ ((__deprecated__));
  1389.  
  1390.  
  1391.   template<typename _Tp>
  1392.     struct has_trivial_copy_constructor
  1393.     : public integral_constant<bool, __has_trivial_copy(_Tp)>
  1394.     { } __attribute__ ((__deprecated__));
  1395.  
  1396.  
  1397.   template<typename _Tp>
  1398.     struct has_trivial_copy_assign
  1399.     : public integral_constant<bool, __has_trivial_assign(_Tp)>
  1400.     { } __attribute__ ((__deprecated__));
  1401.  
  1402.  
  1403.   template<typename _Tp>
  1404.     struct has_virtual_destructor
  1405.     : public integral_constant<bool, __has_virtual_destructor(_Tp)>
  1406.     { };
  1407.  
  1408.  
  1409.  
  1410.  
  1411.  
  1412.   template<typename _Tp>
  1413.     struct alignment_of
  1414.     : public integral_constant<std::size_t, __alignof__(_Tp)> { };
  1415.  
  1416.  
  1417.   template<typename>
  1418.     struct rank
  1419.     : public integral_constant<std::size_t, 0> { };
  1420.  
  1421.   template<typename _Tp, std::size_t _Size>
  1422.     struct rank<_Tp[_Size]>
  1423.     : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
  1424.  
  1425.   template<typename _Tp>
  1426.     struct rank<_Tp[]>
  1427.     : public integral_constant<std::size_t, 1 + rank<_Tp>::value> { };
  1428.  
  1429.  
  1430.   template<typename, unsigned _Uint>
  1431.     struct extent
  1432.     : public integral_constant<std::size_t, 0> { };
  1433.  
  1434.   template<typename _Tp, unsigned _Uint, std::size_t _Size>
  1435.     struct extent<_Tp[_Size], _Uint>
  1436.     : public integral_constant<std::size_t,
  1437.           _Uint == 0 ? _Size : extent<_Tp,
  1438.           _Uint - 1>::value>
  1439.     { };
  1440.  
  1441.   template<typename _Tp, unsigned _Uint>
  1442.     struct extent<_Tp[], _Uint>
  1443.     : public integral_constant<std::size_t,
  1444.           _Uint == 0 ? 0 : extent<_Tp,
  1445.              _Uint - 1>::value>
  1446.     { };
  1447.  
  1448.  
  1449.  
  1450.  
  1451.  
  1452.   template<typename, typename>
  1453.     struct is_same
  1454.     : public false_type { };
  1455.  
  1456.   template<typename _Tp>
  1457.     struct is_same<_Tp, _Tp>
  1458.     : public true_type { };
  1459.  
  1460.  
  1461.   template<typename _Base, typename _Derived>
  1462.     struct is_base_of
  1463.     : public integral_constant<bool, __is_base_of(_Base, _Derived)>
  1464.     { };
  1465.  
  1466.   template<typename _From, typename _To,
  1467.            bool = __or_<is_void<_From>, is_function<_To>,
  1468.                         is_array<_To>>::value>
  1469.     struct __is_convertible_helper
  1470.     { typedef typename is_void<_To>::type type; };
  1471.  
  1472.   template<typename _From, typename _To>
  1473.     class __is_convertible_helper<_From, _To, false>
  1474.     {
  1475.        template<typename _To1>
  1476.  static void __test_aux(_To1);
  1477.  
  1478.       template<typename _From1, typename _To1,
  1479.         typename = decltype(__test_aux<_To1>(std::declval<_From1>()))>
  1480.  static true_type
  1481.  __test(int);
  1482.  
  1483.       template<typename, typename>
  1484.  static false_type
  1485.  __test(...);
  1486.  
  1487.     public:
  1488.       typedef decltype(__test<_From, _To>(0)) type;
  1489.     };
  1490.  
  1491.  
  1492.  
  1493.   template<typename _From, typename _To>
  1494.     struct is_convertible
  1495.     : public __is_convertible_helper<_From, _To>::type
  1496.     { };
  1497.  
  1498.  
  1499.  
  1500.  
  1501.  
  1502.   template<typename _Tp>
  1503.     struct remove_const
  1504.     { typedef _Tp type; };
  1505.  
  1506.   template<typename _Tp>
  1507.     struct remove_const<_Tp const>
  1508.     { typedef _Tp type; };
  1509.  
  1510.  
  1511.   template<typename _Tp>
  1512.     struct remove_volatile
  1513.     { typedef _Tp type; };
  1514.  
  1515.   template<typename _Tp>
  1516.     struct remove_volatile<_Tp volatile>
  1517.     { typedef _Tp type; };
  1518.  
  1519.  
  1520.   template<typename _Tp>
  1521.     struct remove_cv
  1522.     {
  1523.       typedef typename
  1524.       remove_const<typename remove_volatile<_Tp>::type>::type type;
  1525.     };
  1526.  
  1527.  
  1528.   template<typename _Tp>
  1529.     struct add_const
  1530.     { typedef _Tp const type; };
  1531.  
  1532.  
  1533.   template<typename _Tp>
  1534.     struct add_volatile
  1535.     { typedef _Tp volatile type; };
  1536.  
  1537.  
  1538.   template<typename _Tp>
  1539.     struct add_cv
  1540.     {
  1541.       typedef typename
  1542.       add_const<typename add_volatile<_Tp>::type>::type type;
  1543.     };
  1544.  
  1545.  
  1546.  
  1547.  
  1548.  
  1549.  
  1550.   template<typename _Tp>
  1551.     using remove_const_t = typename remove_const<_Tp>::type;
  1552.  
  1553.  
  1554.   template<typename _Tp>
  1555.     using remove_volatile_t = typename remove_volatile<_Tp>::type;
  1556.  
  1557.  
  1558.   template<typename _Tp>
  1559.     using remove_cv_t = typename remove_cv<_Tp>::type;
  1560.  
  1561.  
  1562.   template<typename _Tp>
  1563.     using add_const_t = typename add_const<_Tp>::type;
  1564.  
  1565.  
  1566.   template<typename _Tp>
  1567.     using add_volatile_t = typename add_volatile<_Tp>::type;
  1568.  
  1569.  
  1570.   template<typename _Tp>
  1571.     using add_cv_t = typename add_cv<_Tp>::type;
  1572.  
  1573.  
  1574.  
  1575.  
  1576.  
  1577.   template<typename _Tp>
  1578.     struct remove_reference
  1579.     { typedef _Tp type; };
  1580.  
  1581.   template<typename _Tp>
  1582.     struct remove_reference<_Tp&>
  1583.     { typedef _Tp type; };
  1584.  
  1585.   template<typename _Tp>
  1586.     struct remove_reference<_Tp&&>
  1587.     { typedef _Tp type; };
  1588.  
  1589.   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
  1590.     struct __add_lvalue_reference_helper
  1591.     { typedef _Tp type; };
  1592.  
  1593.   template<typename _Tp>
  1594.     struct __add_lvalue_reference_helper<_Tp, true>
  1595.     { typedef _Tp& type; };
  1596.  
  1597.  
  1598.   template<typename _Tp>
  1599.     struct add_lvalue_reference
  1600.     : public __add_lvalue_reference_helper<_Tp>
  1601.     { };
  1602.  
  1603.   template<typename _Tp, bool = __is_referenceable<_Tp>::value>
  1604.     struct __add_rvalue_reference_helper
  1605.     { typedef _Tp type; };
  1606.  
  1607.   template<typename _Tp>
  1608.     struct __add_rvalue_reference_helper<_Tp, true>
  1609.     { typedef _Tp&& type; };
  1610.  
  1611.  
  1612.   template<typename _Tp>
  1613.     struct add_rvalue_reference
  1614.     : public __add_rvalue_reference_helper<_Tp>
  1615.     { };
  1616.  
  1617.  
  1618.  
  1619.   template<typename _Tp>
  1620.     using remove_reference_t = typename remove_reference<_Tp>::type;
  1621.  
  1622.  
  1623.   template<typename _Tp>
  1624.     using add_lvalue_reference_t = typename add_lvalue_reference<_Tp>::type;
  1625.  
  1626.  
  1627.   template<typename _Tp>
  1628.     using add_rvalue_reference_t = typename add_rvalue_reference<_Tp>::type;
  1629.  
  1630.  
  1631.  
  1632.  
  1633.  
  1634.   template<typename _Unqualified, bool _IsConst, bool _IsVol>
  1635.     struct __cv_selector;
  1636.  
  1637.   template<typename _Unqualified>
  1638.     struct __cv_selector<_Unqualified, false, false>
  1639.     { typedef _Unqualified __type; };
  1640.  
  1641.   template<typename _Unqualified>
  1642.     struct __cv_selector<_Unqualified, false, true>
  1643.     { typedef volatile _Unqualified __type; };
  1644.  
  1645.   template<typename _Unqualified>
  1646.     struct __cv_selector<_Unqualified, true, false>
  1647.     { typedef const _Unqualified __type; };
  1648.  
  1649.   template<typename _Unqualified>
  1650.     struct __cv_selector<_Unqualified, true, true>
  1651.     { typedef const volatile _Unqualified __type; };
  1652.  
  1653.   template<typename _Qualified, typename _Unqualified,
  1654.     bool _IsConst = is_const<_Qualified>::value,
  1655.     bool _IsVol = is_volatile<_Qualified>::value>
  1656.     class __match_cv_qualifiers
  1657.     {
  1658.       typedef __cv_selector<_Unqualified, _IsConst, _IsVol> __match;
  1659.  
  1660.     public:
  1661.       typedef typename __match::__type __type;
  1662.     };
  1663.  
  1664.  
  1665.   template<typename _Tp>
  1666.     struct __make_unsigned
  1667.     { typedef _Tp __type; };
  1668.  
  1669.   template<>
  1670.     struct __make_unsigned<char>
  1671.     { typedef unsigned char __type; };
  1672.  
  1673.   template<>
  1674.     struct __make_unsigned<signed char>
  1675.     { typedef unsigned char __type; };
  1676.  
  1677.   template<>
  1678.     struct __make_unsigned<short>
  1679.     { typedef unsigned short __type; };
  1680.  
  1681.   template<>
  1682.     struct __make_unsigned<int>
  1683.     { typedef unsigned int __type; };
  1684.  
  1685.   template<>
  1686.     struct __make_unsigned<long>
  1687.     { typedef unsigned long __type; };
  1688.  
  1689.   template<>
  1690.     struct __make_unsigned<long long>
  1691.     { typedef unsigned long long __type; };
  1692.  
  1693.  
  1694.   template<>
  1695.     struct __make_unsigned<wchar_t> : __make_unsigned<int>
  1696.     { };
  1697. # 1718 "/usr/include/c++/5.2.0/type_traits" 3
  1698.   template<typename _Tp,
  1699.     bool _IsInt = is_integral<_Tp>::value,
  1700.     bool _IsEnum = is_enum<_Tp>::value>
  1701.     class __make_unsigned_selector;
  1702.  
  1703.   template<typename _Tp>
  1704.     class __make_unsigned_selector<_Tp, true, false>
  1705.     {
  1706.       typedef __make_unsigned<typename remove_cv<_Tp>::type> __unsignedt;
  1707.       typedef typename __unsignedt::__type __unsigned_type;
  1708.       typedef __match_cv_qualifiers<_Tp, __unsigned_type> __cv_unsigned;
  1709.  
  1710.     public:
  1711.       typedef typename __cv_unsigned::__type __type;
  1712.     };
  1713.  
  1714.   template<typename _Tp>
  1715.     class __make_unsigned_selector<_Tp, false, true>
  1716.     {
  1717.  
  1718.       typedef unsigned char __smallest;
  1719.       static const bool __b0 = sizeof(_Tp) <= sizeof(__smallest);
  1720.       static const bool __b1 = sizeof(_Tp) <= sizeof(unsigned short);
  1721.       static const bool __b2 = sizeof(_Tp) <= sizeof(unsigned int);
  1722.       typedef conditional<__b2, unsigned int, unsigned long> __cond2;
  1723.       typedef typename __cond2::type __cond2_type;
  1724.       typedef conditional<__b1, unsigned short, __cond2_type> __cond1;
  1725.       typedef typename __cond1::type __cond1_type;
  1726.  
  1727.     public:
  1728.       typedef typename conditional<__b0, __smallest, __cond1_type>::type __type;
  1729.     };
  1730.  
  1731.  
  1732.  
  1733.  
  1734.  
  1735.   template<typename _Tp>
  1736.     struct make_unsigned
  1737.     { typedef typename __make_unsigned_selector<_Tp>::__type type; };
  1738.  
  1739.  
  1740.   template<>
  1741.     struct make_unsigned<bool>;
  1742.  
  1743.  
  1744.  
  1745.   template<typename _Tp>
  1746.     struct __make_signed
  1747.     { typedef _Tp __type; };
  1748.  
  1749.   template<>
  1750.     struct __make_signed<char>
  1751.     { typedef signed char __type; };
  1752.  
  1753.   template<>
  1754.     struct __make_signed<unsigned char>
  1755.     { typedef signed char __type; };
  1756.  
  1757.   template<>
  1758.     struct __make_signed<unsigned short>
  1759.     { typedef signed short __type; };
  1760.  
  1761.   template<>
  1762.     struct __make_signed<unsigned int>
  1763.     { typedef signed int __type; };
  1764.  
  1765.   template<>
  1766.     struct __make_signed<unsigned long>
  1767.     { typedef signed long __type; };
  1768.  
  1769.   template<>
  1770.     struct __make_signed<unsigned long long>
  1771.     { typedef signed long long __type; };
  1772. # 1800 "/usr/include/c++/5.2.0/type_traits" 3
  1773.   template<>
  1774.     struct __make_signed<char16_t> : __make_signed<uint_least16_t>
  1775.     { };
  1776.   template<>
  1777.     struct __make_signed<char32_t> : __make_signed<uint_least32_t>
  1778.     { };
  1779. # 1830 "/usr/include/c++/5.2.0/type_traits" 3
  1780.   template<typename _Tp,
  1781.     bool _IsInt = is_integral<_Tp>::value,
  1782.     bool _IsEnum = is_enum<_Tp>::value>
  1783.     class __make_signed_selector;
  1784.  
  1785.   template<typename _Tp>
  1786.     class __make_signed_selector<_Tp, true, false>
  1787.     {
  1788.       typedef __make_signed<typename remove_cv<_Tp>::type> __signedt;
  1789.       typedef typename __signedt::__type __signed_type;
  1790.       typedef __match_cv_qualifiers<_Tp, __signed_type> __cv_signed;
  1791.  
  1792.     public:
  1793.       typedef typename __cv_signed::__type __type;
  1794.     };
  1795.  
  1796.   template<typename _Tp>
  1797.     class __make_signed_selector<_Tp, false, true>
  1798.     {
  1799.  
  1800.       typedef signed char __smallest;
  1801.       static const bool __b0 = sizeof(_Tp) <= sizeof(__smallest);
  1802.       static const bool __b1 = sizeof(_Tp) <= sizeof(signed short);
  1803.       static const bool __b2 = sizeof(_Tp) <= sizeof(signed int);
  1804.       typedef conditional<__b2, signed int, signed long> __cond2;
  1805.       typedef typename __cond2::type __cond2_type;
  1806.       typedef conditional<__b1, signed short, __cond2_type> __cond1;
  1807.       typedef typename __cond1::type __cond1_type;
  1808.  
  1809.     public:
  1810.       typedef typename conditional<__b0, __smallest, __cond1_type>::type __type;
  1811.     };
  1812.  
  1813.  
  1814.  
  1815.  
  1816.  
  1817.   template<typename _Tp>
  1818.     struct make_signed
  1819.     { typedef typename __make_signed_selector<_Tp>::__type type; };
  1820.  
  1821.  
  1822.   template<>
  1823.     struct make_signed<bool>;
  1824.  
  1825.  
  1826.  
  1827.   template<typename _Tp>
  1828.     using make_signed_t = typename make_signed<_Tp>::type;
  1829.  
  1830.  
  1831.   template<typename _Tp>
  1832.     using make_unsigned_t = typename make_unsigned<_Tp>::type;
  1833.  
  1834.  
  1835.  
  1836.  
  1837.  
  1838.   template<typename _Tp>
  1839.     struct remove_extent
  1840.     { typedef _Tp type; };
  1841.  
  1842.   template<typename _Tp, std::size_t _Size>
  1843.     struct remove_extent<_Tp[_Size]>
  1844.     { typedef _Tp type; };
  1845.  
  1846.   template<typename _Tp>
  1847.     struct remove_extent<_Tp[]>
  1848.     { typedef _Tp type; };
  1849.  
  1850.  
  1851.   template<typename _Tp>
  1852.     struct remove_all_extents
  1853.     { typedef _Tp type; };
  1854.  
  1855.   template<typename _Tp, std::size_t _Size>
  1856.     struct remove_all_extents<_Tp[_Size]>
  1857.     { typedef typename remove_all_extents<_Tp>::type type; };
  1858.  
  1859.   template<typename _Tp>
  1860.     struct remove_all_extents<_Tp[]>
  1861.     { typedef typename remove_all_extents<_Tp>::type type; };
  1862.  
  1863.  
  1864.  
  1865.   template<typename _Tp>
  1866.     using remove_extent_t = typename remove_extent<_Tp>::type;
  1867.  
  1868.  
  1869.   template<typename _Tp>
  1870.     using remove_all_extents_t = typename remove_all_extents<_Tp>::type;
  1871.  
  1872.  
  1873.  
  1874.  
  1875.   template<typename _Tp, typename>
  1876.     struct __remove_pointer_helper
  1877.     { typedef _Tp type; };
  1878.  
  1879.   template<typename _Tp, typename _Up>
  1880.     struct __remove_pointer_helper<_Tp, _Up*>
  1881.     { typedef _Up type; };
  1882.  
  1883.  
  1884.   template<typename _Tp>
  1885.     struct remove_pointer
  1886.     : public __remove_pointer_helper<_Tp, typename remove_cv<_Tp>::type>
  1887.     { };
  1888.  
  1889.  
  1890.   template<typename _Tp, bool = __or_<__is_referenceable<_Tp>,
  1891.           is_void<_Tp>>::value>
  1892.     struct __add_pointer_helper
  1893.     { typedef _Tp type; };
  1894.  
  1895.   template<typename _Tp>
  1896.     struct __add_pointer_helper<_Tp, true>
  1897.     { typedef typename remove_reference<_Tp>::type* type; };
  1898.  
  1899.   template<typename _Tp>
  1900.     struct add_pointer
  1901.     : public __add_pointer_helper<_Tp>
  1902.     { };
  1903.  
  1904.  
  1905.  
  1906.   template<typename _Tp>
  1907.     using remove_pointer_t = typename remove_pointer<_Tp>::type;
  1908.  
  1909.  
  1910.   template<typename _Tp>
  1911.     using add_pointer_t = typename add_pointer<_Tp>::type;
  1912.  
  1913.  
  1914.   template<std::size_t _Len>
  1915.     struct __aligned_storage_msa
  1916.     {
  1917.       union __type
  1918.       {
  1919.  unsigned char __data[_Len];
  1920.  struct __attribute__((__aligned__)) { } __align;
  1921.       };
  1922.     };
  1923. # 1984 "/usr/include/c++/5.2.0/type_traits" 3
  1924.   template<std::size_t _Len, std::size_t _Align =
  1925.     __alignof__(typename __aligned_storage_msa<_Len>::__type)>
  1926.     struct aligned_storage
  1927.     {
  1928.       union type
  1929.       {
  1930.  unsigned char __data[_Len];
  1931.  struct __attribute__((__aligned__((_Align)))) { } __align;
  1932.       };
  1933.     };
  1934.  
  1935.   template <typename... _Types>
  1936.     struct __strictest_alignment
  1937.     {
  1938.       static const size_t _S_alignment = 0;
  1939.       static const size_t _S_size = 0;
  1940.     };
  1941.  
  1942.   template <typename _Tp, typename... _Types>
  1943.     struct __strictest_alignment<_Tp, _Types...>
  1944.     {
  1945.       static const size_t _S_alignment =
  1946.         alignof(_Tp) > __strictest_alignment<_Types...>::_S_alignment
  1947.  ? alignof(_Tp) : __strictest_alignment<_Types...>::_S_alignment;
  1948.       static const size_t _S_size =
  1949.         sizeof(_Tp) > __strictest_alignment<_Types...>::_S_size
  1950.  ? sizeof(_Tp) : __strictest_alignment<_Types...>::_S_size;
  1951.     };
  1952. # 2023 "/usr/include/c++/5.2.0/type_traits" 3
  1953.   template <size_t _Len, typename... _Types>
  1954.     struct aligned_union
  1955.     {
  1956.     private:
  1957.       static_assert(sizeof...(_Types) != 0, "At least one type is required");
  1958.  
  1959.       using __strictest = __strictest_alignment<_Types...>;
  1960.       static const size_t _S_len = _Len > __strictest::_S_size
  1961.  ? _Len : __strictest::_S_size;
  1962.     public:
  1963.  
  1964.       static const size_t alignment_value = __strictest::_S_alignment;
  1965.  
  1966.       typedef typename aligned_storage<_S_len, alignment_value>::type type;
  1967.     };
  1968.  
  1969.   template <size_t _Len, typename... _Types>
  1970.     const size_t aligned_union<_Len, _Types...>::alignment_value;
  1971.  
  1972.  
  1973.  
  1974.   template<typename _Up,
  1975.     bool _IsArray = is_array<_Up>::value,
  1976.     bool _IsFunction = is_function<_Up>::value>
  1977.     struct __decay_selector;
  1978.  
  1979.  
  1980.   template<typename _Up>
  1981.     struct __decay_selector<_Up, false, false>
  1982.     { typedef typename remove_cv<_Up>::type __type; };
  1983.  
  1984.   template<typename _Up>
  1985.     struct __decay_selector<_Up, true, false>
  1986.     { typedef typename remove_extent<_Up>::type* __type; };
  1987.  
  1988.   template<typename _Up>
  1989.     struct __decay_selector<_Up, false, true>
  1990.     { typedef typename add_pointer<_Up>::type __type; };
  1991.  
  1992.  
  1993.   template<typename _Tp>
  1994.     class decay
  1995.     {
  1996.       typedef typename remove_reference<_Tp>::type __remove_type;
  1997.  
  1998.     public:
  1999.       typedef typename __decay_selector<__remove_type>::__type type;
  2000.     };
  2001.  
  2002.   template<typename _Tp>
  2003.     class reference_wrapper;
  2004.  
  2005.  
  2006.   template<typename _Tp>
  2007.     struct __strip_reference_wrapper
  2008.     {
  2009.       typedef _Tp __type;
  2010.     };
  2011.  
  2012.   template<typename _Tp>
  2013.     struct __strip_reference_wrapper<reference_wrapper<_Tp> >
  2014.     {
  2015.       typedef _Tp& __type;
  2016.     };
  2017.  
  2018.   template<typename _Tp>
  2019.     struct __decay_and_strip
  2020.     {
  2021.       typedef typename __strip_reference_wrapper<
  2022.  typename decay<_Tp>::type>::__type __type;
  2023.     };
  2024.  
  2025.  
  2026.  
  2027.  
  2028.   template<bool, typename _Tp = void>
  2029.     struct enable_if
  2030.     { };
  2031.  
  2032.  
  2033.   template<typename _Tp>
  2034.     struct enable_if<true, _Tp>
  2035.     { typedef _Tp type; };
  2036.  
  2037.   template<typename... _Cond>
  2038.     using _Require = typename enable_if<__and_<_Cond...>::value>::type;
  2039.  
  2040.  
  2041.  
  2042.   template<bool _Cond, typename _Iftrue, typename _Iffalse>
  2043.     struct conditional
  2044.     { typedef _Iftrue type; };
  2045.  
  2046.  
  2047.   template<typename _Iftrue, typename _Iffalse>
  2048.     struct conditional<false, _Iftrue, _Iffalse>
  2049.     { typedef _Iffalse type; };
  2050.  
  2051.  
  2052.   template<typename... _Tp>
  2053.     struct common_type;
  2054.  
  2055.  
  2056.  
  2057.   struct __do_common_type_impl
  2058.   {
  2059.     template<typename _Tp, typename _Up>
  2060.       static __success_type<typename decay<decltype
  2061.        (true ? std::declval<_Tp>()
  2062.         : std::declval<_Up>())>::type> _S_test(int);
  2063.  
  2064.     template<typename, typename>
  2065.       static __failure_type _S_test(...);
  2066.   };
  2067.  
  2068.   template<typename _Tp, typename _Up>
  2069.     struct __common_type_impl
  2070.     : private __do_common_type_impl
  2071.     {
  2072.       typedef decltype(_S_test<_Tp, _Up>(0)) type;
  2073.     };
  2074.  
  2075.   struct __do_member_type_wrapper
  2076.   {
  2077.     template<typename _Tp>
  2078.       static __success_type<typename _Tp::type> _S_test(int);
  2079.  
  2080.     template<typename>
  2081.       static __failure_type _S_test(...);
  2082.   };
  2083.  
  2084.   template<typename _Tp>
  2085.     struct __member_type_wrapper
  2086.     : private __do_member_type_wrapper
  2087.     {
  2088.       typedef decltype(_S_test<_Tp>(0)) type;
  2089.     };
  2090.  
  2091.   template<typename _CTp, typename... _Args>
  2092.     struct __expanded_common_type_wrapper
  2093.     {
  2094.       typedef common_type<typename _CTp::type, _Args...> type;
  2095.     };
  2096.  
  2097.   template<typename... _Args>
  2098.     struct __expanded_common_type_wrapper<__failure_type, _Args...>
  2099.     { typedef __failure_type type; };
  2100.  
  2101.   template<typename _Tp>
  2102.     struct common_type<_Tp>
  2103.     { typedef typename decay<_Tp>::type type; };
  2104.  
  2105.   template<typename _Tp, typename _Up>
  2106.     struct common_type<_Tp, _Up>
  2107.     : public __common_type_impl<_Tp, _Up>::type
  2108.     { };
  2109.  
  2110.   template<typename _Tp, typename _Up, typename... _Vp>
  2111.     struct common_type<_Tp, _Up, _Vp...>
  2112.     : public __expanded_common_type_wrapper<typename __member_type_wrapper<
  2113.                common_type<_Tp, _Up>>::type, _Vp...>::type
  2114.     { };
  2115.  
  2116.  
  2117.   template<typename _Tp>
  2118.     struct underlying_type
  2119.     {
  2120.       typedef __underlying_type(_Tp) type;
  2121.     };
  2122.  
  2123.   template<typename _Tp>
  2124.     struct __declval_protector
  2125.     {
  2126.       static const bool __stop = false;
  2127.       static typename add_rvalue_reference<_Tp>::type __delegate();
  2128.     };
  2129.  
  2130.   template<typename _Tp>
  2131.     inline typename add_rvalue_reference<_Tp>::type
  2132.     declval() noexcept
  2133.     {
  2134.       static_assert(__declval_protector<_Tp>::__stop,
  2135.       "declval() must not be used!");
  2136.       return __declval_protector<_Tp>::__delegate();
  2137.     }
  2138.  
  2139.  
  2140.   template<typename _Signature>
  2141.     class result_of;
  2142.  
  2143.  
  2144.  
  2145.  
  2146.  
  2147.  
  2148.   struct __result_of_memfun_ref_impl
  2149.   {
  2150.     template<typename _Fp, typename _Tp1, typename... _Args>
  2151.       static __success_type<decltype(
  2152.       (std::declval<_Tp1>().*std::declval<_Fp>())(std::declval<_Args>()...)
  2153.       )> _S_test(int);
  2154.  
  2155.     template<typename...>
  2156.       static __failure_type _S_test(...);
  2157.   };
  2158.  
  2159.   template<typename _MemPtr, typename _Arg, typename... _Args>
  2160.     struct __result_of_memfun_ref
  2161.     : private __result_of_memfun_ref_impl
  2162.     {
  2163.       typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type;
  2164.     };
  2165.  
  2166.  
  2167.   struct __result_of_memfun_deref_impl
  2168.   {
  2169.     template<typename _Fp, typename _Tp1, typename... _Args>
  2170.       static __success_type<decltype(
  2171.       ((*std::declval<_Tp1>()).*std::declval<_Fp>())(std::declval<_Args>()...)
  2172.       )> _S_test(int);
  2173.  
  2174.     template<typename...>
  2175.       static __failure_type _S_test(...);
  2176.   };
  2177.  
  2178.   template<typename _MemPtr, typename _Arg, typename... _Args>
  2179.     struct __result_of_memfun_deref
  2180.     : private __result_of_memfun_deref_impl
  2181.     {
  2182.       typedef decltype(_S_test<_MemPtr, _Arg, _Args...>(0)) type;
  2183.     };
  2184.  
  2185.  
  2186.   struct __result_of_memobj_ref_impl
  2187.   {
  2188.     template<typename _Fp, typename _Tp1>
  2189.       static __success_type<decltype(
  2190.       std::declval<_Tp1>().*std::declval<_Fp>()
  2191.       )> _S_test(int);
  2192.  
  2193.     template<typename, typename>
  2194.       static __failure_type _S_test(...);
  2195.   };
  2196.  
  2197.   template<typename _MemPtr, typename _Arg>
  2198.     struct __result_of_memobj_ref
  2199.     : private __result_of_memobj_ref_impl
  2200.     {
  2201.       typedef decltype(_S_test<_MemPtr, _Arg>(0)) type;
  2202.     };
  2203.  
  2204.  
  2205.   struct __result_of_memobj_deref_impl
  2206.   {
  2207.     template<typename _Fp, typename _Tp1>
  2208.       static __success_type<decltype(
  2209.       (*std::declval<_Tp1>()).*std::declval<_Fp>()
  2210.       )> _S_test(int);
  2211.  
  2212.     template<typename, typename>
  2213.       static __failure_type _S_test(...);
  2214.   };
  2215.  
  2216.   template<typename _MemPtr, typename _Arg>
  2217.     struct __result_of_memobj_deref
  2218.     : private __result_of_memobj_deref_impl
  2219.     {
  2220.       typedef decltype(_S_test<_MemPtr, _Arg>(0)) type;
  2221.     };
  2222.  
  2223.   template<typename _MemPtr, typename _Arg>
  2224.     struct __result_of_memobj;
  2225.  
  2226.   template<typename _Res, typename _Class, typename _Arg>
  2227.     struct __result_of_memobj<_Res _Class::*, _Arg>
  2228.     {
  2229.       typedef typename remove_cv<typename remove_reference<
  2230.         _Arg>::type>::type _Argval;
  2231.       typedef _Res _Class::* _MemPtr;
  2232.       typedef typename conditional<__or_<is_same<_Argval, _Class>,
  2233.         is_base_of<_Class, _Argval>>::value,
  2234.         __result_of_memobj_ref<_MemPtr, _Arg>,
  2235.         __result_of_memobj_deref<_MemPtr, _Arg>
  2236.       >::type::type type;
  2237.     };
  2238.  
  2239.   template<typename _MemPtr, typename _Arg, typename... _Args>
  2240.     struct __result_of_memfun;
  2241.  
  2242.   template<typename _Res, typename _Class, typename _Arg, typename... _Args>
  2243.     struct __result_of_memfun<_Res _Class::*, _Arg, _Args...>
  2244.     {
  2245.       typedef typename remove_cv<typename remove_reference<
  2246.         _Arg>::type>::type _Argval;
  2247.       typedef _Res _Class::* _MemPtr;
  2248.       typedef typename conditional<__or_<is_same<_Argval, _Class>,
  2249.         is_base_of<_Class, _Argval>>::value,
  2250.         __result_of_memfun_ref<_MemPtr, _Arg, _Args...>,
  2251.         __result_of_memfun_deref<_MemPtr, _Arg, _Args...>
  2252.       >::type::type type;
  2253.     };
  2254.  
  2255.   template<bool, bool, typename _Functor, typename... _ArgTypes>
  2256.     struct __result_of_impl
  2257.     {
  2258.       typedef __failure_type type;
  2259.     };
  2260.  
  2261.   template<typename _MemPtr, typename _Arg>
  2262.     struct __result_of_impl<true, false, _MemPtr, _Arg>
  2263.     : public __result_of_memobj<typename decay<_MemPtr>::type, _Arg>
  2264.     { };
  2265.  
  2266.   template<typename _MemPtr, typename _Arg, typename... _Args>
  2267.     struct __result_of_impl<false, true, _MemPtr, _Arg, _Args...>
  2268.     : public __result_of_memfun<typename decay<_MemPtr>::type, _Arg, _Args...>
  2269.     { };
  2270.  
  2271.  
  2272.   struct __result_of_other_impl
  2273.   {
  2274.     template<typename _Fn, typename... _Args>
  2275.       static __success_type<decltype(
  2276.       std::declval<_Fn>()(std::declval<_Args>()...)
  2277.       )> _S_test(int);
  2278.  
  2279.     template<typename...>
  2280.       static __failure_type _S_test(...);
  2281.   };
  2282.  
  2283.   template<typename _Functor, typename... _ArgTypes>
  2284.     struct __result_of_impl<false, false, _Functor, _ArgTypes...>
  2285.     : private __result_of_other_impl
  2286.     {
  2287.       typedef decltype(_S_test<_Functor, _ArgTypes...>(0)) type;
  2288.     };
  2289.  
  2290.   template<typename _Functor, typename... _ArgTypes>
  2291.     struct result_of<_Functor(_ArgTypes...)>
  2292.     : public __result_of_impl<
  2293.         is_member_object_pointer<
  2294.           typename remove_reference<_Functor>::type
  2295.         >::value,
  2296.         is_member_function_pointer<
  2297.           typename remove_reference<_Functor>::type
  2298.         >::value,
  2299.      _Functor, _ArgTypes...
  2300.       >::type
  2301.     { };
  2302.  
  2303.  
  2304.  
  2305.   template<size_t _Len, size_t _Align =
  2306.      __alignof__(typename __aligned_storage_msa<_Len>::__type)>
  2307.     using aligned_storage_t = typename aligned_storage<_Len, _Align>::type;
  2308.  
  2309.   template <size_t _Len, typename... _Types>
  2310.     using aligned_union_t = typename aligned_union<_Len, _Types...>::type;
  2311.  
  2312.  
  2313.   template<typename _Tp>
  2314.     using decay_t = typename decay<_Tp>::type;
  2315.  
  2316.  
  2317.   template<bool _Cond, typename _Tp = void>
  2318.     using enable_if_t = typename enable_if<_Cond, _Tp>::type;
  2319.  
  2320.  
  2321.   template<bool _Cond, typename _Iftrue, typename _Iffalse>
  2322.     using conditional_t = typename conditional<_Cond, _Iftrue, _Iffalse>::type;
  2323.  
  2324.  
  2325.   template<typename... _Tp>
  2326.     using common_type_t = typename common_type<_Tp...>::type;
  2327.  
  2328.  
  2329.   template<typename _Tp>
  2330.     using underlying_type_t = typename underlying_type<_Tp>::type;
  2331.  
  2332.  
  2333.   template<typename _Tp>
  2334.     using result_of_t = typename result_of<_Tp>::type;
  2335.  
  2336.  
  2337.   template<typename...> using __void_t = void;
  2338. # 2426 "/usr/include/c++/5.2.0/type_traits" 3
  2339. }
  2340. # 17 "/us/include/boost_1_64_0/boost/hana/core/default.hpp" 2
  2341.  
  2342.  
  2343.  
  2344. namespace boost { namespace hana {
  2345.     template <typename Method, typename>
  2346.     struct is_default : std::false_type { };
  2347.  
  2348.     template <typename Method>
  2349.     struct is_default<Method, decltype((void)
  2350.         static_cast<default_>(*(Method*)0)
  2351.     )>
  2352.         : std::true_type
  2353.     { };
  2354. }}
  2355. # 16 "/us/include/boost_1_64_0/boost/hana/concept/constant.hpp" 2
  2356.  
  2357. # 1 "/us/include/boost_1_64_0/boost/hana/core/tag_of.hpp" 1
  2358. # 13 "/us/include/boost_1_64_0/boost/hana/core/tag_of.hpp"
  2359. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/core/tag_of.hpp" 1
  2360. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/core/tag_of.hpp"
  2361. namespace boost { namespace hana {
  2362. # 105 "/us/include/boost_1_64_0/boost/hana/fwd/core/tag_of.hpp"
  2363.     template <typename T, typename = void>
  2364.     struct tag_of;
  2365. # 116 "/us/include/boost_1_64_0/boost/hana/fwd/core/tag_of.hpp"
  2366.     template <typename T>
  2367.     using tag_of_t = typename hana::tag_of<T>::type;
  2368. }}
  2369. # 13 "/us/include/boost_1_64_0/boost/hana/core/tag_of.hpp" 2
  2370.  
  2371.  
  2372.  
  2373. # 1 "/us/include/boost_1_64_0/boost/hana/core/when.hpp" 1
  2374. # 13 "/us/include/boost_1_64_0/boost/hana/core/when.hpp"
  2375. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/core/when.hpp" 1
  2376. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/core/when.hpp"
  2377. namespace boost { namespace hana {
  2378. # 38 "/us/include/boost_1_64_0/boost/hana/fwd/core/when.hpp"
  2379.     template <bool condition>
  2380.     struct when;
  2381.  
  2382.     namespace core_detail {
  2383.         template <typename ...>
  2384.         struct always_true { static constexpr bool value = true; };
  2385.     }
  2386. # 67 "/us/include/boost_1_64_0/boost/hana/fwd/core/when.hpp"
  2387.     template <typename ...Dummy>
  2388.     using when_valid = when<
  2389.         core_detail::always_true<Dummy...>::value
  2390.     >;
  2391.  
  2392. }}
  2393. # 13 "/us/include/boost_1_64_0/boost/hana/core/when.hpp" 2
  2394. # 16 "/us/include/boost_1_64_0/boost/hana/core/tag_of.hpp" 2
  2395.  
  2396.  
  2397.  
  2398. namespace boost { namespace hana {
  2399.  
  2400.     template <typename T, typename>
  2401.     struct tag_of : tag_of<T, when<true>> { };
  2402.  
  2403.  
  2404.     namespace core_detail {
  2405.         template <typename ...>
  2406.         struct is_valid { static constexpr bool value = true; };
  2407.     }
  2408.  
  2409.     template <typename T, bool condition>
  2410.     struct tag_of<T, when<condition>> {
  2411.         using type = T;
  2412.     };
  2413.  
  2414.     template <typename T>
  2415.     struct tag_of<T, when<
  2416.         core_detail::is_valid<typename T::hana_tag>::value
  2417.     >> {
  2418.         using type = typename T::hana_tag;
  2419.     };
  2420.  
  2421.     template <typename T> struct tag_of<T const> : tag_of<T> { };
  2422.     template <typename T> struct tag_of<T volatile> : tag_of<T> { };
  2423.     template <typename T> struct tag_of<T const volatile> : tag_of<T> { };
  2424.     template <typename T> struct tag_of<T&> : tag_of<T> { };
  2425.     template <typename T> struct tag_of<T&&> : tag_of<T> { };
  2426. }}
  2427. # 17 "/us/include/boost_1_64_0/boost/hana/concept/constant.hpp" 2
  2428.  
  2429. # 1 "/us/include/boost_1_64_0/boost/hana/detail/integral_constant.hpp" 1
  2430. # 15 "/us/include/boost_1_64_0/boost/hana/detail/integral_constant.hpp"
  2431. # 1 "/us/include/boost_1_64_0/boost/hana/detail/operators/adl.hpp" 1
  2432. # 16 "/us/include/boost_1_64_0/boost/hana/detail/operators/adl.hpp"
  2433. namespace boost { namespace hana { namespace detail { namespace operators {
  2434. # 30 "/us/include/boost_1_64_0/boost/hana/detail/operators/adl.hpp"
  2435.     template <typename ...>
  2436.     struct adl { };
  2437. }} }}
  2438. # 15 "/us/include/boost_1_64_0/boost/hana/detail/integral_constant.hpp" 2
  2439.  
  2440.  
  2441.  
  2442.  
  2443.  
  2444. namespace boost { namespace hana {
  2445.  
  2446.  
  2447.     template <typename T>
  2448.     struct integral_constant_tag {
  2449.         using value_type = T;
  2450.     };
  2451.  
  2452.     namespace ic_detail {
  2453.         template <typename T, T v>
  2454.         struct with_index_t {
  2455.             template <typename F>
  2456.             constexpr void operator()(F&& f) const;
  2457.         };
  2458.  
  2459.         template <typename T, T v>
  2460.         struct times_t {
  2461.             static constexpr with_index_t<T, v> with_index{};
  2462.  
  2463.             template <typename F>
  2464.             constexpr void operator()(F&& f) const;
  2465.         };
  2466.     }
  2467. # 233 "/us/include/boost_1_64_0/boost/hana/detail/integral_constant.hpp"
  2468.     template <typename T, T v>
  2469.     struct integral_constant
  2470.         : std::integral_constant<T, v>
  2471.         , detail::operators::adl<integral_constant<T, v>>
  2472.     {
  2473.         using type = integral_constant;
  2474.         static constexpr ic_detail::times_t<T, v> times{};
  2475.         using hana_tag = integral_constant_tag<T>;
  2476.     };
  2477.  
  2478. }}
  2479. # 18 "/us/include/boost_1_64_0/boost/hana/concept/constant.hpp" 2
  2480.  
  2481. # 1 "/us/include/boost_1_64_0/boost/hana/value.hpp" 1
  2482. # 13 "/us/include/boost_1_64_0/boost/hana/value.hpp"
  2483. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/value.hpp" 1
  2484. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/value.hpp"
  2485. namespace boost { namespace hana {
  2486. # 58 "/us/include/boost_1_64_0/boost/hana/fwd/value.hpp"
  2487.     template <typename C, typename = void>
  2488.     struct value_impl : value_impl<C, when<true>> { };
  2489.  
  2490.     template <typename T>
  2491.     constexpr decltype(auto) value();
  2492.  
  2493.     template <typename T>
  2494.     constexpr decltype(auto) value(T const&)
  2495.     { return hana::value<T>(); }
  2496. # 90 "/us/include/boost_1_64_0/boost/hana/fwd/value.hpp"
  2497.     struct value_of_t {
  2498.         template <typename T>
  2499.         constexpr decltype(auto) operator()(T const&) const
  2500.         { return hana::value<T>(); }
  2501.     };
  2502.  
  2503.     constexpr value_of_t value_of{};
  2504.  
  2505. }}
  2506. # 13 "/us/include/boost_1_64_0/boost/hana/value.hpp" 2
  2507.  
  2508.  
  2509. # 1 "/us/include/boost_1_64_0/boost/hana/concept/constant.hpp" 1
  2510. # 15 "/us/include/boost_1_64_0/boost/hana/value.hpp" 2
  2511.  
  2512. # 1 "/us/include/boost_1_64_0/boost/hana/concept/integral_constant.hpp" 1
  2513. # 13 "/us/include/boost_1_64_0/boost/hana/concept/integral_constant.hpp"
  2514. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/integral_constant.hpp" 1
  2515. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/integral_constant.hpp"
  2516. namespace boost { namespace hana {
  2517. # 69 "/us/include/boost_1_64_0/boost/hana/fwd/concept/integral_constant.hpp"
  2518.     template <typename C>
  2519.     struct IntegralConstant;
  2520. }}
  2521. # 13 "/us/include/boost_1_64_0/boost/hana/concept/integral_constant.hpp" 2
  2522.  
  2523.  
  2524.  
  2525.  
  2526.  
  2527.  
  2528.  
  2529. namespace boost { namespace hana {
  2530.     namespace detail {
  2531.         template <typename C, typename Tag = typename tag_of<C>::type>
  2532.         struct integral_constant_dispatch
  2533.             : hana::integral_constant<bool,
  2534.                 hana::IntegralConstant<Tag>::value
  2535.             >
  2536.         { };
  2537.  
  2538.         template <typename C>
  2539.         struct integral_constant_dispatch<C, C>
  2540.             : hana::integral_constant<bool, false>
  2541.         { };
  2542.     }
  2543.  
  2544.  
  2545.     template <typename C>
  2546.     struct IntegralConstant
  2547.         : detail::integral_constant_dispatch<C>
  2548.     { };
  2549.  
  2550. }}
  2551. # 16 "/us/include/boost_1_64_0/boost/hana/value.hpp" 2
  2552.  
  2553.  
  2554. # 1 "/us/include/boost_1_64_0/boost/hana/core/dispatch.hpp" 1
  2555. # 14 "/us/include/boost_1_64_0/boost/hana/core/dispatch.hpp"
  2556. # 1 "/us/include/boost_1_64_0/boost/hana/detail/dispatch_if.hpp" 1
  2557. # 18 "/us/include/boost_1_64_0/boost/hana/detail/dispatch_if.hpp"
  2558. namespace boost { namespace hana {
  2559.     struct deleted_implementation {
  2560.         template <typename ...T>
  2561.         static constexpr auto apply(T&& ...) = delete;
  2562.     };
  2563. # 54 "/us/include/boost_1_64_0/boost/hana/detail/dispatch_if.hpp"
  2564. }}
  2565. # 14 "/us/include/boost_1_64_0/boost/hana/core/dispatch.hpp" 2
  2566. # 18 "/us/include/boost_1_64_0/boost/hana/value.hpp" 2
  2567.  
  2568.  
  2569.  
  2570.  
  2571.  
  2572. namespace boost { namespace hana {
  2573.     template <typename C, bool condition>
  2574.     struct value_impl<C, when<condition>> : default_ {
  2575.         template <typename ...Args>
  2576.         static constexpr auto apply(Args&& ...args) = delete;
  2577.     };
  2578.  
  2579.     template <typename T>
  2580.     constexpr decltype(auto) value() {
  2581.         using RawT = typename std::remove_cv<
  2582.             typename std::remove_reference<T>::type
  2583.         >::type;
  2584.         using C = typename hana::tag_of<RawT>::type;
  2585.         using Value = ::std::conditional_t< (hana::Constant<C>::value), value_impl<C>, ::boost::hana::deleted_implementation >;
  2586.  
  2587.  
  2588.  
  2589.  
  2590.         static_assert(hana::Constant<C>::value,
  2591.         "hana::value<T>() requires 'T' to be a Constant");
  2592.  
  2593.  
  2594.         return Value::template apply<RawT>();
  2595.     }
  2596.  
  2597.     template <typename I>
  2598.     struct value_impl<I, when<hana::IntegralConstant<I>::value>> {
  2599.         template <typename C>
  2600.         static constexpr auto apply()
  2601.         { return C::value; }
  2602.     };
  2603. }}
  2604. # 19 "/us/include/boost_1_64_0/boost/hana/concept/constant.hpp" 2
  2605.  
  2606.  
  2607.  
  2608. namespace boost { namespace hana {
  2609.     template <typename C>
  2610.     struct Constant
  2611.         : hana::integral_constant<bool,
  2612.             !is_default<value_impl<typename tag_of<C>::type>>::value
  2613.         >
  2614.     { };
  2615. }}
  2616. # 13 "/us/include/boost_1_64_0/boost/hana/assert.hpp" 2
  2617.  
  2618.  
  2619. # 1 "/us/include/boost_1_64_0/boost/hana/detail/preprocessor.hpp" 1
  2620. # 15 "/us/include/boost_1_64_0/boost/hana/assert.hpp" 2
  2621.  
  2622. # 1 "/us/include/boost_1_64_0/boost/hana/if.hpp" 1
  2623. # 13 "/us/include/boost_1_64_0/boost/hana/if.hpp"
  2624. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/if.hpp" 1
  2625. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/if.hpp"
  2626. namespace boost { namespace hana {
  2627. # 45 "/us/include/boost_1_64_0/boost/hana/fwd/if.hpp"
  2628.     template <typename L, typename = void>
  2629.     struct if_impl : if_impl<L, when<true>> { };
  2630.  
  2631.     struct if_t {
  2632.         template <typename Cond, typename Then, typename Else>
  2633.         constexpr decltype(auto) operator()(Cond&& cond, Then&& then, Else&& else_) const;
  2634.     };
  2635.  
  2636.     constexpr if_t if_{};
  2637.  
  2638. }}
  2639. # 13 "/us/include/boost_1_64_0/boost/hana/if.hpp" 2
  2640.  
  2641.  
  2642. # 1 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp" 1
  2643. # 13 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp"
  2644. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/logical.hpp" 1
  2645. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/logical.hpp"
  2646. namespace boost { namespace hana {
  2647. # 162 "/us/include/boost_1_64_0/boost/hana/fwd/concept/logical.hpp"
  2648.     template <typename L>
  2649.     struct Logical;
  2650. }}
  2651. # 13 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp" 2
  2652.  
  2653.  
  2654.  
  2655.  
  2656.  
  2657.  
  2658. # 1 "/us/include/boost_1_64_0/boost/hana/eval_if.hpp" 1
  2659. # 13 "/us/include/boost_1_64_0/boost/hana/eval_if.hpp"
  2660. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/eval_if.hpp" 1
  2661. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/eval_if.hpp"
  2662. namespace boost { namespace hana {
  2663. # 143 "/us/include/boost_1_64_0/boost/hana/fwd/eval_if.hpp"
  2664.     template <typename L, typename = void>
  2665.     struct eval_if_impl : eval_if_impl<L, when<true>> { };
  2666.  
  2667.     struct eval_if_t {
  2668.         template <typename Cond, typename Then, typename Else>
  2669.         constexpr decltype(auto) operator()(Cond&& cond, Then&& then, Else&& else_) const;
  2670.     };
  2671.  
  2672.     constexpr eval_if_t eval_if{};
  2673.  
  2674. }}
  2675. # 13 "/us/include/boost_1_64_0/boost/hana/eval_if.hpp" 2
  2676.  
  2677.  
  2678. # 1 "/us/include/boost_1_64_0/boost/hana/bool.hpp" 1
  2679. # 13 "/us/include/boost_1_64_0/boost/hana/bool.hpp"
  2680. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/bool.hpp" 1
  2681. # 13 "/us/include/boost_1_64_0/boost/hana/fwd/bool.hpp"
  2682. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/integral_constant.hpp" 1
  2683. # 19 "/us/include/boost_1_64_0/boost/hana/fwd/integral_constant.hpp"
  2684. namespace boost { namespace hana {
  2685. # 38 "/us/include/boost_1_64_0/boost/hana/fwd/integral_constant.hpp"
  2686.     template <typename T, T v>
  2687.     constexpr integral_constant<T, v> integral_c{};
  2688.  
  2689.  
  2690.  
  2691.     template <bool b>
  2692.     using bool_ = integral_constant<bool, b>;
  2693.  
  2694.  
  2695.     template <bool b>
  2696.     constexpr bool_<b> bool_c{};
  2697.  
  2698.  
  2699.     using true_ = bool_<true>;
  2700.  
  2701.  
  2702.     constexpr auto true_c = bool_c<true>;
  2703.  
  2704.  
  2705.     using false_ = bool_<false>;
  2706.  
  2707.  
  2708.     constexpr auto false_c = bool_c<false>;
  2709.  
  2710.  
  2711.  
  2712.     template <char c>
  2713.     using char_ = integral_constant<char, c>;
  2714.  
  2715.  
  2716.     template <char c>
  2717.     constexpr char_<c> char_c{};
  2718.  
  2719.  
  2720.  
  2721.     template <short i>
  2722.     using short_ = integral_constant<short, i>;
  2723.  
  2724.  
  2725.     template <short i>
  2726.     constexpr short_<i> short_c{};
  2727.  
  2728.  
  2729.  
  2730.     template <unsigned short i>
  2731.     using ushort_ = integral_constant<unsigned short, i>;
  2732.  
  2733.  
  2734.     template <unsigned short i>
  2735.     constexpr ushort_<i> ushort_c{};
  2736.  
  2737.  
  2738.  
  2739.     template <int i>
  2740.     using int_ = integral_constant<int, i>;
  2741.  
  2742.  
  2743.     template <int i>
  2744.     constexpr int_<i> int_c{};
  2745.  
  2746.  
  2747.  
  2748.     template <unsigned int i>
  2749.     using uint = integral_constant<unsigned int, i>;
  2750.  
  2751.  
  2752.     template <unsigned int i>
  2753.     constexpr uint<i> uint_c{};
  2754.  
  2755.  
  2756.  
  2757.     template <long i>
  2758.     using long_ = integral_constant<long, i>;
  2759.  
  2760.  
  2761.     template <long i>
  2762.     constexpr long_<i> long_c{};
  2763.  
  2764.  
  2765.  
  2766.     template <unsigned long i>
  2767.     using ulong = integral_constant<unsigned long, i>;
  2768.  
  2769.  
  2770.     template <unsigned long i>
  2771.     constexpr ulong<i> ulong_c{};
  2772.  
  2773.  
  2774.  
  2775.     template <long long i>
  2776.     using llong = integral_constant<long long, i>;
  2777.  
  2778.  
  2779.     template <long long i>
  2780.     constexpr llong<i> llong_c{};
  2781.  
  2782.  
  2783.  
  2784.     template <unsigned long long i>
  2785.     using ullong = integral_constant<unsigned long long, i>;
  2786.  
  2787.  
  2788.     template <unsigned long long i>
  2789.     constexpr ullong<i> ullong_c{};
  2790.  
  2791.  
  2792.  
  2793.     template <std::size_t i>
  2794.     using size_t = integral_constant<std::size_t, i>;
  2795.  
  2796.  
  2797.     template <std::size_t i>
  2798.     constexpr size_t<i> size_c{};
  2799.  
  2800.  
  2801.     namespace literals {
  2802. # 170 "/us/include/boost_1_64_0/boost/hana/fwd/integral_constant.hpp"
  2803.         template <char ...c>
  2804.         constexpr auto operator"" _c();
  2805.     }
  2806. }}
  2807. # 13 "/us/include/boost_1_64_0/boost/hana/fwd/bool.hpp" 2
  2808. # 13 "/us/include/boost_1_64_0/boost/hana/bool.hpp" 2
  2809.  
  2810.  
  2811.  
  2812.  
  2813. # 1 "/us/include/boost_1_64_0/boost/hana/core/to.hpp" 1
  2814. # 13 "/us/include/boost_1_64_0/boost/hana/core/to.hpp"
  2815. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/core/to.hpp" 1
  2816. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/core/to.hpp"
  2817. namespace boost { namespace hana {
  2818. # 101 "/us/include/boost_1_64_0/boost/hana/fwd/core/to.hpp"
  2819.     template <typename To, typename From, typename = void>
  2820.     struct to_impl;
  2821.  
  2822.     template <typename To>
  2823.     struct to_t {
  2824.         template <typename X>
  2825.         constexpr decltype(auto) operator()(X&& x) const;
  2826.     };
  2827.  
  2828.     template <typename To>
  2829.     constexpr to_t<To> to{};
  2830. # 129 "/us/include/boost_1_64_0/boost/hana/fwd/core/to.hpp"
  2831.     template <typename From, typename To, typename = void>
  2832.     struct is_convertible;
  2833. # 151 "/us/include/boost_1_64_0/boost/hana/fwd/core/to.hpp"
  2834.     template <bool = true>
  2835.     struct embedding { };
  2836. # 169 "/us/include/boost_1_64_0/boost/hana/fwd/core/to.hpp"
  2837.     template <typename From, typename To, typename = void>
  2838.     struct is_embedded;
  2839.  
  2840. }}
  2841. # 13 "/us/include/boost_1_64_0/boost/hana/core/to.hpp" 2
  2842.  
  2843.  
  2844.  
  2845. # 1 "/us/include/boost_1_64_0/boost/hana/concept/foldable.hpp" 1
  2846. # 13 "/us/include/boost_1_64_0/boost/hana/concept/foldable.hpp"
  2847. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/foldable.hpp" 1
  2848. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/foldable.hpp"
  2849. namespace boost { namespace hana {
  2850. # 137 "/us/include/boost_1_64_0/boost/hana/fwd/concept/foldable.hpp"
  2851.     template <typename T>
  2852.     struct Foldable;
  2853. }}
  2854. # 13 "/us/include/boost_1_64_0/boost/hana/concept/foldable.hpp" 2
  2855.  
  2856.  
  2857.  
  2858.  
  2859.  
  2860.  
  2861. # 1 "/us/include/boost_1_64_0/boost/hana/fold_left.hpp" 1
  2862. # 13 "/us/include/boost_1_64_0/boost/hana/fold_left.hpp"
  2863. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/fold_left.hpp" 1
  2864. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/fold_left.hpp"
  2865. namespace boost { namespace hana {
  2866. # 73 "/us/include/boost_1_64_0/boost/hana/fwd/fold_left.hpp"
  2867.     template <typename T, typename = void>
  2868.     struct fold_left_impl : fold_left_impl<T, when<true>> { };
  2869.  
  2870.     struct fold_left_t {
  2871.         template <typename Xs, typename State, typename F>
  2872.         constexpr decltype(auto) operator()(Xs&& xs, State&& state, F&& f) const;
  2873.  
  2874.         template <typename Xs, typename F>
  2875.         constexpr decltype(auto) operator()(Xs&& xs, F&& f) const;
  2876.     };
  2877.  
  2878.     constexpr fold_left_t fold_left{};
  2879.  
  2880. }}
  2881. # 13 "/us/include/boost_1_64_0/boost/hana/fold_left.hpp" 2
  2882.  
  2883.  
  2884. # 1 "/us/include/boost_1_64_0/boost/hana/concept/foldable.hpp" 1
  2885. # 15 "/us/include/boost_1_64_0/boost/hana/fold_left.hpp" 2
  2886.  
  2887.  
  2888.  
  2889. # 1 "/us/include/boost_1_64_0/boost/hana/detail/variadic/foldl1.hpp" 1
  2890. # 17 "/us/include/boost_1_64_0/boost/hana/detail/variadic/foldl1.hpp"
  2891. namespace boost { namespace hana { namespace detail { namespace variadic {
  2892.     template <unsigned int n, typename = when<true>>
  2893.     struct foldl1_impl;
  2894.  
  2895.     template <>
  2896.     struct foldl1_impl<1> {
  2897.         template <typename F, typename X1>
  2898.         static constexpr X1 apply(F&&, X1&& x1)
  2899.         { return static_cast<X1&&>(x1); }
  2900.     };
  2901.  
  2902.     template <>
  2903.     struct foldl1_impl<2> {
  2904.         template <typename F, typename X1, typename X2>
  2905.         static constexpr decltype(auto) apply(F&& f, X1&& x1, X2&& x2) {
  2906.             return static_cast<F&&>(f)(static_cast<X1&&>(x1),
  2907.                                        static_cast<X2&&>(x2));
  2908.         }
  2909.     };
  2910.  
  2911.     template <>
  2912.     struct foldl1_impl<3> {
  2913.         template <typename F, typename X1, typename X2, typename X3>
  2914.         static constexpr decltype(auto) apply(F&& f, X1&& x1, X2&& x2, X3&& x3) {
  2915.             return f(f(static_cast<X1&&>(x1),
  2916.                        static_cast<X2&&>(x2)),
  2917.                        static_cast<X3&&>(x3));
  2918.         }
  2919.     };
  2920.  
  2921.     template <>
  2922.     struct foldl1_impl<4> {
  2923.         template <typename F, typename X1, typename X2, typename X3, typename X4>
  2924.         static constexpr decltype(auto) apply(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4) {
  2925.             return f(f(f(static_cast<X1&&>(x1),
  2926.                          static_cast<X2&&>(x2)),
  2927.                          static_cast<X3&&>(x3)),
  2928.                          static_cast<X4&&>(x4));
  2929.         }
  2930.     };
  2931.  
  2932.     template <>
  2933.     struct foldl1_impl<5> {
  2934.         template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5>
  2935.         static constexpr decltype(auto) apply(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5) {
  2936.             return f(f(f(f(static_cast<X1&&>(x1),
  2937.                            static_cast<X2&&>(x2)),
  2938.                            static_cast<X3&&>(x3)),
  2939.                            static_cast<X4&&>(x4)),
  2940.                            static_cast<X5&&>(x5));
  2941.         }
  2942.     };
  2943.  
  2944.     template <>
  2945.     struct foldl1_impl<6> {
  2946.         template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5, typename X6>
  2947.         static constexpr decltype(auto) apply(F&& f, X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6) {
  2948.             return f(f(f(f(f(static_cast<X1&&>(x1),
  2949.                              static_cast<X2&&>(x2)),
  2950.                              static_cast<X3&&>(x3)),
  2951.                              static_cast<X4&&>(x4)),
  2952.                              static_cast<X5&&>(x5)),
  2953.                              static_cast<X6&&>(x6));
  2954.         }
  2955.     };
  2956.  
  2957.     template <unsigned int n>
  2958.     struct foldl1_impl<n, when<(n >= 7) && (n < 14)>> {
  2959.         template <typename F, typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename X7, typename ...Xn>
  2960.         static constexpr decltype(auto)
  2961.         apply(F&& f
  2962.               , X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, X7&& x7
  2963.               , Xn&& ...xn)
  2964.         {
  2965.             return foldl1_impl<sizeof...(xn) + 1>::apply(
  2966.                 f,
  2967.                 f(f(f(f(f(f(static_cast<X1&&>(x1),
  2968.                             static_cast<X2&&>(x2)),
  2969.                             static_cast<X3&&>(x3)),
  2970.                             static_cast<X4&&>(x4)),
  2971.                             static_cast<X5&&>(x5)),
  2972.                             static_cast<X6&&>(x6)),
  2973.                             static_cast<X7&&>(x7)),
  2974.                 static_cast<Xn&&>(xn)...
  2975.             );
  2976.         }
  2977.     };
  2978.  
  2979.     template <unsigned int n>
  2980.     struct foldl1_impl<n, when<(n >= 14) && (n < 28)>> {
  2981.         template <
  2982.               typename F
  2983.             , typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename X7
  2984.             , typename X8, typename X9, typename X10, typename X11, typename X12, typename X13, typename X14
  2985.             , typename ...Xn
  2986.         >
  2987.         static constexpr decltype(auto)
  2988.         apply(F&& f
  2989.               , X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, X7&& x7
  2990.               , X8&& x8, X9&& x9, X10&& x10, X11&& x11, X12&& x12, X13&& x13, X14&& x14
  2991.               , Xn&& ...xn)
  2992.         {
  2993.             return foldl1_impl<sizeof...(xn) + 1>::apply(
  2994.                 f,
  2995.                 f(f(f(f(f(f(f(f(f(f(f(f(f(
  2996.                     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)),
  2997.                     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))
  2998.                 , static_cast<Xn&&>(xn)...);
  2999.  
  3000.         }
  3001.     };
  3002.  
  3003.     template <unsigned int n>
  3004.     struct foldl1_impl<n, when<(n >= 28) && (n < 56)>> {
  3005.         template <
  3006.               typename F
  3007.             , typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename X7
  3008.             , typename X8, typename X9, typename X10, typename X11, typename X12, typename X13, typename X14
  3009.             , typename X15, typename X16, typename X17, typename X18, typename X19, typename X20, typename X21
  3010.             , typename X22, typename X23, typename X24, typename X25, typename X26, typename X27, typename X28
  3011.             , typename ...Xn
  3012.         >
  3013.         static constexpr decltype(auto)
  3014.         apply(F&& f
  3015.               , X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, X7&& x7
  3016.               , X8&& x8, X9&& x9, X10&& x10, X11&& x11, X12&& x12, X13&& x13, X14&& x14
  3017.               , X15&& x15, X16&& x16, X17&& x17, X18&& x18, X19&& x19, X20&& x20, X21&& x21
  3018.               , X22&& x22, X23&& x23, X24&& x24, X25&& x25, X26&& x26, X27&& x27, X28&& x28
  3019.               , Xn&& ...xn)
  3020.         {
  3021.             return foldl1_impl<sizeof...(xn) + 1>::apply(
  3022.                 f,
  3023.                 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(
  3024.                     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)),
  3025.                     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)),
  3026.                     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)),
  3027.                     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))
  3028.                 , static_cast<Xn&&>(xn)...);
  3029.         }
  3030.     };
  3031.  
  3032.     template <unsigned int n>
  3033.     struct foldl1_impl<n, when<(n >= 56)>> {
  3034.         template <
  3035.               typename F
  3036.             , typename X1, typename X2, typename X3, typename X4, typename X5, typename X6, typename X7
  3037.             , typename X8, typename X9, typename X10, typename X11, typename X12, typename X13, typename X14
  3038.             , typename X15, typename X16, typename X17, typename X18, typename X19, typename X20, typename X21
  3039.             , typename X22, typename X23, typename X24, typename X25, typename X26, typename X27, typename X28
  3040.             , typename X29, typename X30, typename X31, typename X32, typename X33, typename X34, typename X35
  3041.             , typename X36, typename X37, typename X38, typename X39, typename X40, typename X41, typename X42
  3042.             , typename X43, typename X44, typename X45, typename X46, typename X47, typename X48, typename X49
  3043.             , typename X50, typename X51, typename X52, typename X53, typename X54, typename X55, typename X56
  3044.             , typename ...Xn
  3045.         >
  3046.         static constexpr decltype(auto)
  3047.         apply(F&& f
  3048.               , X1&& x1, X2&& x2, X3&& x3, X4&& x4, X5&& x5, X6&& x6, X7&& x7
  3049.               , X8&& x8, X9&& x9, X10&& x10, X11&& x11, X12&& x12, X13&& x13, X14&& x14
  3050.               , X15&& x15, X16&& x16, X17&& x17, X18&& x18, X19&& x19, X20&& x20, X21&& x21
  3051.               , X22&& x22, X23&& x23, X24&& x24, X25&& x25, X26&& x26, X27&& x27, X28&& x28
  3052.               , X29&& x29, X30&& x30, X31&& x31, X32&& x32, X33&& x33, X34&& x34, X35&& x35
  3053.               , X36&& x36, X37&& x37, X38&& x38, X39&& x39, X40&& x40, X41&& x41, X42&& x42
  3054.               , X43&& x43, X44&& x44, X45&& x45, X46&& x46, X47&& x47, X48&& x48, X49&& x49
  3055.               , X50&& x50, X51&& x51, X52&& x52, X53&& x53, X54&& x54, X55&& x55, X56&& x56
  3056.               , Xn&& ...xn)
  3057.         {
  3058.             return foldl1_impl<sizeof...(xn) + 1>::apply(
  3059.                 f,
  3060.                 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(
  3061.                     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)),
  3062.                     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)),
  3063.                     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)),
  3064.                     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)),
  3065.                     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)),
  3066.                     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)),
  3067.                     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)),
  3068.                     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))
  3069.                 , static_cast<Xn&&>(xn)...);
  3070.         }
  3071.     };
  3072.  
  3073.     struct foldl1_t {
  3074.         template <typename F, typename X1, typename ...Xn>
  3075.         constexpr decltype(auto) operator()(F&& f, X1&& x1, Xn&& ...xn) const {
  3076.             return foldl1_impl<sizeof...(xn) + 1>::apply(
  3077.                 static_cast<F&&>(f), static_cast<X1&&>(x1), static_cast<Xn&&>(xn)...
  3078.             );
  3079.         }
  3080.     };
  3081.  
  3082.     constexpr foldl1_t foldl1{};
  3083.     constexpr auto foldl = foldl1;
  3084. }} }}
  3085. # 18 "/us/include/boost_1_64_0/boost/hana/fold_left.hpp" 2
  3086.  
  3087. # 1 "/us/include/boost_1_64_0/boost/hana/functional/partial.hpp" 1
  3088. # 13 "/us/include/boost_1_64_0/boost/hana/functional/partial.hpp"
  3089. # 1 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 1
  3090. # 13 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp"
  3091. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/basic_tuple.hpp" 1
  3092. # 14 "/us/include/boost_1_64_0/boost/hana/fwd/basic_tuple.hpp"
  3093. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/core/make.hpp" 1
  3094. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/core/make.hpp"
  3095. namespace boost { namespace hana {
  3096. # 54 "/us/include/boost_1_64_0/boost/hana/fwd/core/make.hpp"
  3097.     template <typename Tag, typename = void>
  3098.     struct make_impl;
  3099.  
  3100.     template <typename Tag>
  3101.     struct make_t {
  3102.         template <typename ...X>
  3103.         constexpr decltype(auto) operator()(X&& ...x) const {
  3104.             return make_impl<Tag>::apply(static_cast<X&&>(x)...);
  3105.         }
  3106.     };
  3107.  
  3108.     template <typename Tag>
  3109.     constexpr make_t<Tag> make{};
  3110.  
  3111. }}
  3112. # 14 "/us/include/boost_1_64_0/boost/hana/fwd/basic_tuple.hpp" 2
  3113.  
  3114.  
  3115.  
  3116. namespace boost { namespace hana {
  3117. # 29 "/us/include/boost_1_64_0/boost/hana/fwd/basic_tuple.hpp"
  3118.     template <typename ...Xs>
  3119.     struct basic_tuple;
  3120.  
  3121.  
  3122.  
  3123.     struct basic_tuple_tag { };
  3124. # 62 "/us/include/boost_1_64_0/boost/hana/fwd/basic_tuple.hpp"
  3125.     constexpr auto make_basic_tuple = make<basic_tuple_tag>;
  3126. }}
  3127. # 13 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
  3128.  
  3129.  
  3130.  
  3131. # 1 "/us/include/boost_1_64_0/boost/hana/detail/decay.hpp" 1
  3132. # 19 "/us/include/boost_1_64_0/boost/hana/detail/decay.hpp"
  3133. namespace boost { namespace hana { namespace detail {
  3134. # 32 "/us/include/boost_1_64_0/boost/hana/detail/decay.hpp"
  3135.     template <typename T, typename U = typename std::remove_reference<T>::type>
  3136.     struct decay {
  3137.         using type = typename std::remove_cv<U>::type;
  3138.     };
  3139.  
  3140.     template <typename T, typename U>
  3141.     struct decay<T, U[]> { using type = U*; };
  3142.     template <typename T, typename U, std::size_t N>
  3143.     struct decay<T, U[N]> { using type = U*; };
  3144.  
  3145.     template <typename T, typename R, typename ...A>
  3146.     struct decay<T, R(A...)> { using type = R(*)(A...); };
  3147.     template <typename T, typename R, typename ...A>
  3148.     struct decay<T, R(A..., ...)> { using type = R(*)(A..., ...); };
  3149. } }}
  3150. # 16 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
  3151.  
  3152. # 1 "/us/include/boost_1_64_0/boost/hana/detail/ebo.hpp" 1
  3153. # 14 "/us/include/boost_1_64_0/boost/hana/detail/ebo.hpp"
  3154. # 1 "/us/include/boost_1_64_0/boost/hana/detail/intrinsics.hpp" 1
  3155. # 14 "/us/include/boost_1_64_0/boost/hana/detail/ebo.hpp" 2
  3156.  
  3157.  
  3158.  
  3159. namespace _hana {
  3160. # 50 "/us/include/boost_1_64_0/boost/hana/detail/ebo.hpp"
  3161.     template <typename K, typename V, bool =
  3162.         __is_empty(V) && !__is_final(V)
  3163.     >
  3164.     struct ebo;
  3165.  
  3166.  
  3167.     template <typename K, typename V>
  3168.     struct ebo<K, V, true> : V {
  3169.         constexpr ebo() { }
  3170.  
  3171.         template <typename T>
  3172.         explicit constexpr ebo(T&& t)
  3173.             : V(static_cast<T&&>(t))
  3174.         { }
  3175.     };
  3176.  
  3177.  
  3178.     template <typename K, typename V>
  3179.     struct ebo<K, V, false> {
  3180.         constexpr ebo() : data_() { }
  3181.  
  3182.         template <typename T>
  3183.         explicit constexpr ebo(T&& t)
  3184.             : data_(static_cast<T&&>(t))
  3185.         { }
  3186.  
  3187.         V data_;
  3188.     };
  3189.  
  3190.  
  3191.  
  3192.  
  3193.     template <typename K, typename V>
  3194.     constexpr V const& ebo_get(ebo<K, V, true> const& x)
  3195.     { return x; }
  3196.  
  3197.     template <typename K, typename V>
  3198.     constexpr V& ebo_get(ebo<K, V, true>& x)
  3199.     { return x; }
  3200.  
  3201.     template <typename K, typename V>
  3202.     constexpr V&& ebo_get(ebo<K, V, true>&& x)
  3203.     { return static_cast<V&&>(x); }
  3204.  
  3205.  
  3206.     template <typename K, typename V>
  3207.     constexpr V const& ebo_get(ebo<K, V, false> const& x)
  3208.     { return x.data_; }
  3209.  
  3210.     template <typename K, typename V>
  3211.     constexpr V& ebo_get(ebo<K, V, false>& x)
  3212.     { return x.data_; }
  3213.  
  3214.     template <typename K, typename V>
  3215.     constexpr V&& ebo_get(ebo<K, V, false>&& x)
  3216.     { return static_cast<V&&>(x.data_); }
  3217. }
  3218.  
  3219. namespace boost { namespace hana {
  3220.     namespace detail {
  3221.         using ::_hana::ebo;
  3222.         using ::_hana::ebo_get;
  3223.     }
  3224. }}
  3225. # 17 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
  3226.  
  3227. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/at.hpp" 1
  3228. # 19 "/us/include/boost_1_64_0/boost/hana/fwd/at.hpp"
  3229. namespace boost { namespace hana {
  3230. # 54 "/us/include/boost_1_64_0/boost/hana/fwd/at.hpp"
  3231.     template <typename It, typename = void>
  3232.     struct at_impl : at_impl<It, when<true>> { };
  3233.  
  3234.     struct at_t {
  3235.         template <typename Xs, typename N>
  3236.         constexpr decltype(auto) operator()(Xs&& xs, N const& n) const;
  3237.     };
  3238.  
  3239.     constexpr at_t at{};
  3240. # 84 "/us/include/boost_1_64_0/boost/hana/fwd/at.hpp"
  3241.     template <std::size_t n, typename Xs>
  3242.     constexpr decltype(auto) at_c(Xs&& xs);
  3243.  
  3244. }}
  3245. # 18 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
  3246.  
  3247.  
  3248. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/sequence.hpp" 1
  3249. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/concept/sequence.hpp"
  3250. namespace boost { namespace hana {
  3251. # 160 "/us/include/boost_1_64_0/boost/hana/fwd/concept/sequence.hpp"
  3252.     template <typename S, typename = void>
  3253.     struct Sequence : Sequence<S, when<true>> { };
  3254.  
  3255. }}
  3256. # 20 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
  3257.  
  3258.  
  3259.  
  3260. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/drop_front.hpp" 1
  3261. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/drop_front.hpp"
  3262. namespace boost { namespace hana {
  3263. # 51 "/us/include/boost_1_64_0/boost/hana/fwd/drop_front.hpp"
  3264.     template <typename It, typename = void>
  3265.     struct drop_front_impl : drop_front_impl<It, when<true>> { };
  3266.  
  3267.     struct drop_front_t {
  3268.         template <typename Xs, typename N>
  3269.         constexpr auto operator()(Xs&& xs, N const& n) const;
  3270.  
  3271.         template <typename Xs>
  3272.         constexpr auto operator()(Xs&& xs) const;
  3273.     };
  3274.  
  3275.     constexpr drop_front_t drop_front{};
  3276.  
  3277. }}
  3278. # 23 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
  3279.  
  3280. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/is_empty.hpp" 1
  3281. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/is_empty.hpp"
  3282. namespace boost { namespace hana {
  3283. # 37 "/us/include/boost_1_64_0/boost/hana/fwd/is_empty.hpp"
  3284.     template <typename It, typename = void>
  3285.     struct is_empty_impl : is_empty_impl<It, when<true>> { };
  3286.  
  3287.     struct is_empty_t {
  3288.         template <typename Xs>
  3289.         constexpr auto operator()(Xs const& xs) const;
  3290.     };
  3291.  
  3292.     constexpr is_empty_t is_empty{};
  3293.  
  3294. }}
  3295. # 24 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
  3296.  
  3297. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/transform.hpp" 1
  3298. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/transform.hpp"
  3299. namespace boost { namespace hana {
  3300. # 45 "/us/include/boost_1_64_0/boost/hana/fwd/transform.hpp"
  3301.     template <typename Xs, typename = void>
  3302.     struct transform_impl : transform_impl<Xs, when<true>> { };
  3303.  
  3304.     struct transform_t {
  3305.         template <typename Xs, typename F>
  3306.         constexpr auto operator()(Xs&& xs, F&& f) const;
  3307.     };
  3308.  
  3309.     constexpr transform_t transform{};
  3310.  
  3311. }}
  3312. # 25 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
  3313.  
  3314. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/unpack.hpp" 1
  3315. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/unpack.hpp"
  3316. namespace boost { namespace hana {
  3317. # 83 "/us/include/boost_1_64_0/boost/hana/fwd/unpack.hpp"
  3318.     template <typename T, typename = void>
  3319.     struct unpack_impl : unpack_impl<T, when<true>> { };
  3320.  
  3321.     struct unpack_t {
  3322.         template <typename Xs, typename F>
  3323.         constexpr decltype(auto) operator()(Xs&& xs, F&& f) const;
  3324.     };
  3325.  
  3326.     constexpr unpack_t unpack{};
  3327.  
  3328. }}
  3329. # 26 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
  3330. # 35 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp"
  3331. # 1 "/usr/include/c++/5.2.0/utility" 1
  3332. # 59 "/usr/include/c++/5.2.0/utility" 3
  3333. # 69 "/usr/include/c++/5.2.0/utility" 3
  3334. # 1 "/usr/include/c++/5.2.0/bits/stl_relops.h" 1 3
  3335. # 67 "/usr/include/c++/5.2.0/bits/stl_relops.h" 3
  3336. namespace std __attribute__ ((__visibility__ ("default")))
  3337. {
  3338.   namespace rel_ops
  3339.   {
  3340. # 85 "/usr/include/c++/5.2.0/bits/stl_relops.h" 3
  3341.     template <class _Tp>
  3342.       inline bool
  3343.       operator!=(const _Tp& __x, const _Tp& __y)
  3344.       { return !(__x == __y); }
  3345. # 98 "/usr/include/c++/5.2.0/bits/stl_relops.h" 3
  3346.     template <class _Tp>
  3347.       inline bool
  3348.       operator>(const _Tp& __x, const _Tp& __y)
  3349.       { return __y < __x; }
  3350. # 111 "/usr/include/c++/5.2.0/bits/stl_relops.h" 3
  3351.     template <class _Tp>
  3352.       inline bool
  3353.       operator<=(const _Tp& __x, const _Tp& __y)
  3354.       { return !(__y < __x); }
  3355. # 124 "/usr/include/c++/5.2.0/bits/stl_relops.h" 3
  3356.     template <class _Tp>
  3357.       inline bool
  3358.       operator>=(const _Tp& __x, const _Tp& __y)
  3359.       { return !(__x < __y); }
  3360.  
  3361.  
  3362.   }
  3363.  
  3364. }
  3365. # 70 "/usr/include/c++/5.2.0/utility" 2 3
  3366. # 1 "/usr/include/c++/5.2.0/bits/stl_pair.h" 1 3
  3367. # 59 "/usr/include/c++/5.2.0/bits/stl_pair.h" 3
  3368. # 1 "/usr/include/c++/5.2.0/bits/move.h" 1 3
  3369. # 34 "/usr/include/c++/5.2.0/bits/move.h" 3
  3370. # 1 "/usr/include/c++/5.2.0/bits/concept_check.h" 1 3
  3371. # 34 "/usr/include/c++/5.2.0/bits/concept_check.h" 3
  3372. # 35 "/usr/include/c++/5.2.0/bits/move.h" 2 3
  3373.  
  3374. namespace std __attribute__ ((__visibility__ ("default")))
  3375. {
  3376.  
  3377.  
  3378.  
  3379.  
  3380.  
  3381.  
  3382.  
  3383.   template<typename _Tp>
  3384.     inline _Tp*
  3385.     __addressof(_Tp& __r) noexcept
  3386.     {
  3387.       return reinterpret_cast<_Tp*>
  3388.  (&const_cast<char&>(reinterpret_cast<const volatile char&>(__r)));
  3389.     }
  3390.  
  3391.  
  3392. }
  3393.  
  3394.  
  3395.  
  3396.  
  3397. namespace std __attribute__ ((__visibility__ ("default")))
  3398. {
  3399. # 74 "/usr/include/c++/5.2.0/bits/move.h" 3
  3400.   template<typename _Tp>
  3401.     constexpr _Tp&&
  3402.     forward(typename std::remove_reference<_Tp>::type& __t) noexcept
  3403.     { return static_cast<_Tp&&>(__t); }
  3404.  
  3405.  
  3406.  
  3407.  
  3408.  
  3409.  
  3410.  
  3411.   template<typename _Tp>
  3412.     constexpr _Tp&&
  3413.     forward(typename std::remove_reference<_Tp>::type&& __t) noexcept
  3414.     {
  3415.       static_assert(!std::is_lvalue_reference<_Tp>::value, "template argument"
  3416.       " substituting _Tp is an lvalue reference type");
  3417.       return static_cast<_Tp&&>(__t);
  3418.     }
  3419.  
  3420.  
  3421.  
  3422.  
  3423.  
  3424.  
  3425.   template<typename _Tp>
  3426.     constexpr typename std::remove_reference<_Tp>::type&&
  3427.     move(_Tp&& __t) noexcept
  3428.     { return static_cast<typename std::remove_reference<_Tp>::type&&>(__t); }
  3429.  
  3430.  
  3431.   template<typename _Tp>
  3432.     struct __move_if_noexcept_cond
  3433.     : public __and_<__not_<is_nothrow_move_constructible<_Tp>>,
  3434.                     is_copy_constructible<_Tp>>::type { };
  3435. # 118 "/usr/include/c++/5.2.0/bits/move.h" 3
  3436.   template<typename _Tp>
  3437.     constexpr typename
  3438.     conditional<__move_if_noexcept_cond<_Tp>::value, const _Tp&, _Tp&&>::type
  3439.     move_if_noexcept(_Tp& __x) noexcept
  3440.     { return std::move(__x); }
  3441. # 133 "/usr/include/c++/5.2.0/bits/move.h" 3
  3442.   template<typename _Tp>
  3443.     inline _Tp*
  3444.     addressof(_Tp& __r) noexcept
  3445.     { return std::__addressof(__r); }
  3446.  
  3447.  
  3448.   template <typename _Tp, typename _Up = _Tp>
  3449.     inline _Tp
  3450.     __exchange(_Tp& __obj, _Up&& __new_val)
  3451.     {
  3452.       _Tp __old_val = std::move(__obj);
  3453.       __obj = std::forward<_Up>(__new_val);
  3454.       return __old_val;
  3455.     }
  3456.  
  3457.  
  3458.  
  3459. }
  3460. # 159 "/usr/include/c++/5.2.0/bits/move.h" 3
  3461. namespace std __attribute__ ((__visibility__ ("default")))
  3462. {
  3463. # 174 "/usr/include/c++/5.2.0/bits/move.h" 3
  3464.   template<typename _Tp>
  3465.     inline void
  3466.     swap(_Tp& __a, _Tp& __b)
  3467.  
  3468.     noexcept(__and_<is_nothrow_move_constructible<_Tp>,
  3469.              is_nothrow_move_assignable<_Tp>>::value)
  3470.  
  3471.     {
  3472.  
  3473.  
  3474.  
  3475.       _Tp __tmp = std::move(__a);
  3476.       __a = std::move(__b);
  3477.       __b = std::move(__tmp);
  3478.     }
  3479.  
  3480.  
  3481.  
  3482.  
  3483.   template<typename _Tp, size_t _Nm>
  3484.     inline void
  3485.     swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm])
  3486.  
  3487.     noexcept(noexcept(swap(*__a, *__b)))
  3488.  
  3489.     {
  3490.       for (size_t __n = 0; __n < _Nm; ++__n)
  3491.  swap(__a[__n], __b[__n]);
  3492.     }
  3493.  
  3494.  
  3495.  
  3496. }
  3497. # 60 "/usr/include/c++/5.2.0/bits/stl_pair.h" 2 3
  3498.  
  3499.  
  3500.  
  3501.  
  3502.  
  3503. namespace std __attribute__ ((__visibility__ ("default")))
  3504. {
  3505. # 76 "/usr/include/c++/5.2.0/bits/stl_pair.h" 3
  3506.   struct piecewise_construct_t { };
  3507.  
  3508.  
  3509.   constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t();
  3510.  
  3511.  
  3512.   template<typename...>
  3513.     class tuple;
  3514.  
  3515.   template<std::size_t...>
  3516.     struct _Index_tuple;
  3517. # 95 "/usr/include/c++/5.2.0/bits/stl_pair.h" 3
  3518.   template<class _T1, class _T2>
  3519.     struct pair
  3520.     {
  3521.       typedef _T1 first_type;
  3522.       typedef _T2 second_type;
  3523.  
  3524.       _T1 first;
  3525.       _T2 second;
  3526.  
  3527.  
  3528.  
  3529.  
  3530.  
  3531.       constexpr pair()
  3532.       : first(), second() { }
  3533.  
  3534.  
  3535.       constexpr pair(const _T1& __a, const _T2& __b)
  3536.       : first(__a), second(__b) { }
  3537.  
  3538.  
  3539.  
  3540.  
  3541.  
  3542.  
  3543.  
  3544.       template<class _U1, class _U2, class = typename
  3545.         enable_if<__and_<is_convertible<const _U1&, _T1>,
  3546.     is_convertible<const _U2&, _T2>>::value>::type>
  3547.  constexpr pair(const pair<_U1, _U2>& __p)
  3548.  : first(__p.first), second(__p.second) { }
  3549.  
  3550.       constexpr pair(const pair&) = default;
  3551.       constexpr pair(pair&&) = default;
  3552.  
  3553.  
  3554.       template<class _U1, class = typename
  3555.         enable_if<is_convertible<_U1, _T1>::value>::type>
  3556.  constexpr pair(_U1&& __x, const _T2& __y)
  3557.  : first(std::forward<_U1>(__x)), second(__y) { }
  3558.  
  3559.       template<class _U2, class = typename
  3560.         enable_if<is_convertible<_U2, _T2>::value>::type>
  3561.  constexpr pair(const _T1& __x, _U2&& __y)
  3562.  : first(__x), second(std::forward<_U2>(__y)) { }
  3563.  
  3564.       template<class _U1, class _U2, class = typename
  3565.         enable_if<__and_<is_convertible<_U1, _T1>,
  3566.     is_convertible<_U2, _T2>>::value>::type>
  3567.  constexpr pair(_U1&& __x, _U2&& __y)
  3568.  : first(std::forward<_U1>(__x)), second(std::forward<_U2>(__y)) { }
  3569.  
  3570.       template<class _U1, class _U2, class = typename
  3571.         enable_if<__and_<is_convertible<_U1, _T1>,
  3572.     is_convertible<_U2, _T2>>::value>::type>
  3573.  constexpr pair(pair<_U1, _U2>&& __p)
  3574.  : first(std::forward<_U1>(__p.first)),
  3575.    second(std::forward<_U2>(__p.second)) { }
  3576.  
  3577.       template<typename... _Args1, typename... _Args2>
  3578.         pair(piecewise_construct_t, tuple<_Args1...>, tuple<_Args2...>);
  3579.  
  3580.       pair&
  3581.       operator=(const pair& __p)
  3582.       {
  3583.  first = __p.first;
  3584.  second = __p.second;
  3585.  return *this;
  3586.       }
  3587.  
  3588.       pair&
  3589.       operator=(pair&& __p)
  3590.       noexcept(__and_<is_nothrow_move_assignable<_T1>,
  3591.                is_nothrow_move_assignable<_T2>>::value)
  3592.       {
  3593.  first = std::forward<first_type>(__p.first);
  3594.  second = std::forward<second_type>(__p.second);
  3595.  return *this;
  3596.       }
  3597.  
  3598.       template<class _U1, class _U2>
  3599.  pair&
  3600.  operator=(const pair<_U1, _U2>& __p)
  3601.  {
  3602.    first = __p.first;
  3603.    second = __p.second;
  3604.    return *this;
  3605.  }
  3606.  
  3607.       template<class _U1, class _U2>
  3608.  pair&
  3609.  operator=(pair<_U1, _U2>&& __p)
  3610.  {
  3611.    first = std::forward<_U1>(__p.first);
  3612.    second = std::forward<_U2>(__p.second);
  3613.    return *this;
  3614.  }
  3615.  
  3616.       void
  3617.       swap(pair& __p)
  3618.       noexcept(noexcept(swap(first, __p.first))
  3619.         && noexcept(swap(second, __p.second)))
  3620.       {
  3621.  using std::swap;
  3622.  swap(first, __p.first);
  3623.  swap(second, __p.second);
  3624.       }
  3625.  
  3626.     private:
  3627.       template<typename... _Args1, std::size_t... _Indexes1,
  3628.                typename... _Args2, std::size_t... _Indexes2>
  3629.         pair(tuple<_Args1...>&, tuple<_Args2...>&,
  3630.              _Index_tuple<_Indexes1...>, _Index_tuple<_Indexes2...>);
  3631.  
  3632.     };
  3633.  
  3634.  
  3635.   template<class _T1, class _T2>
  3636.     inline constexpr bool
  3637.     operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
  3638.     { return __x.first == __y.first && __x.second == __y.second; }
  3639.  
  3640.  
  3641.   template<class _T1, class _T2>
  3642.     inline constexpr bool
  3643.     operator<(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
  3644.     { return __x.first < __y.first
  3645.       || (!(__y.first < __x.first) && __x.second < __y.second); }
  3646.  
  3647.  
  3648.   template<class _T1, class _T2>
  3649.     inline constexpr bool
  3650.     operator!=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
  3651.     { return !(__x == __y); }
  3652.  
  3653.  
  3654.   template<class _T1, class _T2>
  3655.     inline constexpr bool
  3656.     operator>(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
  3657.     { return __y < __x; }
  3658.  
  3659.  
  3660.   template<class _T1, class _T2>
  3661.     inline constexpr bool
  3662.     operator<=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
  3663.     { return !(__y < __x); }
  3664.  
  3665.  
  3666.   template<class _T1, class _T2>
  3667.     inline constexpr bool
  3668.     operator>=(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y)
  3669.     { return !(__x < __y); }
  3670.  
  3671.  
  3672.  
  3673.  
  3674.  
  3675.   template<class _T1, class _T2>
  3676.     inline void
  3677.     swap(pair<_T1, _T2>& __x, pair<_T1, _T2>& __y)
  3678.     noexcept(noexcept(__x.swap(__y)))
  3679.     { __x.swap(__y); }
  3680. # 273 "/usr/include/c++/5.2.0/bits/stl_pair.h" 3
  3681.   template<class _T1, class _T2>
  3682.     constexpr pair<typename __decay_and_strip<_T1>::__type,
  3683.                    typename __decay_and_strip<_T2>::__type>
  3684.     make_pair(_T1&& __x, _T2&& __y)
  3685.     {
  3686.       typedef typename __decay_and_strip<_T1>::__type __ds_type1;
  3687.       typedef typename __decay_and_strip<_T2>::__type __ds_type2;
  3688.       typedef pair<__ds_type1, __ds_type2> __pair_type;
  3689.       return __pair_type(std::forward<_T1>(__x), std::forward<_T2>(__y));
  3690.     }
  3691. # 293 "/usr/include/c++/5.2.0/bits/stl_pair.h" 3
  3692. }
  3693. # 71 "/usr/include/c++/5.2.0/utility" 2 3
  3694.  
  3695.  
  3696.  
  3697.  
  3698. # 1 "/usr/include/c++/5.2.0/initializer_list" 1 3
  3699. # 34 "/usr/include/c++/5.2.0/initializer_list" 3
  3700.  
  3701.  
  3702.  
  3703.  
  3704.  
  3705. #pragma GCC visibility push(default)
  3706.  
  3707.  
  3708.  
  3709. namespace std
  3710. {
  3711.  
  3712.   template<class _E>
  3713.     class initializer_list
  3714.     {
  3715.     public:
  3716.       typedef _E value_type;
  3717.       typedef const _E& reference;
  3718.       typedef const _E& const_reference;
  3719.       typedef size_t size_type;
  3720.       typedef const _E* iterator;
  3721.       typedef const _E* const_iterator;
  3722.  
  3723.     private:
  3724.       iterator _M_array;
  3725.       size_type _M_len;
  3726.  
  3727.  
  3728.       constexpr initializer_list(const_iterator __a, size_type __l)
  3729.       : _M_array(__a), _M_len(__l) { }
  3730.  
  3731.     public:
  3732.       constexpr initializer_list() noexcept
  3733.       : _M_array(0), _M_len(0) { }
  3734.  
  3735.  
  3736.       constexpr size_type
  3737.       size() const noexcept { return _M_len; }
  3738.  
  3739.  
  3740.       constexpr const_iterator
  3741.       begin() const noexcept { return _M_array; }
  3742.  
  3743.  
  3744.       constexpr const_iterator
  3745.       end() const noexcept { return begin() + size(); }
  3746.     };
  3747.  
  3748.  
  3749.  
  3750.  
  3751.  
  3752.  
  3753.   template<class _Tp>
  3754.     constexpr const _Tp*
  3755.     begin(initializer_list<_Tp> __ils) noexcept
  3756.     { return __ils.begin(); }
  3757.  
  3758.  
  3759.  
  3760.  
  3761.  
  3762.  
  3763.   template<class _Tp>
  3764.     constexpr const _Tp*
  3765.     end(initializer_list<_Tp> __ils) noexcept
  3766.     { return __ils.end(); }
  3767. }
  3768.  
  3769. #pragma GCC visibility pop
  3770. # 76 "/usr/include/c++/5.2.0/utility" 2 3
  3771.  
  3772. namespace std __attribute__ ((__visibility__ ("default")))
  3773. {
  3774.  
  3775.  
  3776.   template<class _Tp>
  3777.     class tuple_size;
  3778.  
  3779.   template<std::size_t _Int, class _Tp>
  3780.     class tuple_element;
  3781.  
  3782.  
  3783.  
  3784.  
  3785.   template<class _Tp1, class _Tp2>
  3786.     struct tuple_size<std::pair<_Tp1, _Tp2>>
  3787.     : public integral_constant<std::size_t, 2> { };
  3788.  
  3789.  
  3790.   template<class _Tp1, class _Tp2>
  3791.     struct tuple_element<0, std::pair<_Tp1, _Tp2>>
  3792.     { typedef _Tp1 type; };
  3793.  
  3794.  
  3795.   template<class _Tp1, class _Tp2>
  3796.     struct tuple_element<1, std::pair<_Tp1, _Tp2>>
  3797.     { typedef _Tp2 type; };
  3798.  
  3799.   template<std::size_t _Int>
  3800.     struct __pair_get;
  3801.  
  3802.   template<>
  3803.     struct __pair_get<0>
  3804.     {
  3805.       template<typename _Tp1, typename _Tp2>
  3806.         static constexpr _Tp1&
  3807.         __get(std::pair<_Tp1, _Tp2>& __pair) noexcept
  3808.         { return __pair.first; }
  3809.  
  3810.       template<typename _Tp1, typename _Tp2>
  3811.         static constexpr _Tp1&&
  3812.         __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept
  3813.         { return std::forward<_Tp1>(__pair.first); }
  3814.  
  3815.       template<typename _Tp1, typename _Tp2>
  3816.         static constexpr const _Tp1&
  3817.         __const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept
  3818.         { return __pair.first; }
  3819.     };
  3820.  
  3821.   template<>
  3822.     struct __pair_get<1>
  3823.     {
  3824.       template<typename _Tp1, typename _Tp2>
  3825.         static constexpr _Tp2&
  3826.         __get(std::pair<_Tp1, _Tp2>& __pair) noexcept
  3827.         { return __pair.second; }
  3828.  
  3829.       template<typename _Tp1, typename _Tp2>
  3830.         static constexpr _Tp2&&
  3831.         __move_get(std::pair<_Tp1, _Tp2>&& __pair) noexcept
  3832.         { return std::forward<_Tp2>(__pair.second); }
  3833.  
  3834.       template<typename _Tp1, typename _Tp2>
  3835.         static constexpr const _Tp2&
  3836.         __const_get(const std::pair<_Tp1, _Tp2>& __pair) noexcept
  3837.         { return __pair.second; }
  3838.     };
  3839.  
  3840.   template<std::size_t _Int, class _Tp1, class _Tp2>
  3841.     constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&
  3842.     get(std::pair<_Tp1, _Tp2>& __in) noexcept
  3843.     { return __pair_get<_Int>::__get(__in); }
  3844.  
  3845.   template<std::size_t _Int, class _Tp1, class _Tp2>
  3846.     constexpr typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&&
  3847.     get(std::pair<_Tp1, _Tp2>&& __in) noexcept
  3848.     { return __pair_get<_Int>::__move_get(std::move(__in)); }
  3849.  
  3850.   template<std::size_t _Int, class _Tp1, class _Tp2>
  3851.     constexpr const typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&
  3852.     get(const std::pair<_Tp1, _Tp2>& __in) noexcept
  3853.     { return __pair_get<_Int>::__const_get(__in); }
  3854.  
  3855.  
  3856.  
  3857.  
  3858.  
  3859.   template <typename _Tp, typename _Up>
  3860.     constexpr _Tp&
  3861.     get(pair<_Tp, _Up>& __p) noexcept
  3862.     { return __p.first; }
  3863.  
  3864.   template <typename _Tp, typename _Up>
  3865.     constexpr const _Tp&
  3866.     get(const pair<_Tp, _Up>& __p) noexcept
  3867.     { return __p.first; }
  3868.  
  3869.   template <typename _Tp, typename _Up>
  3870.     constexpr _Tp&&
  3871.     get(pair<_Tp, _Up>&& __p) noexcept
  3872.     { return std::move(__p.first); }
  3873.  
  3874.   template <typename _Tp, typename _Up>
  3875.     constexpr _Tp&
  3876.     get(pair<_Up, _Tp>& __p) noexcept
  3877.     { return __p.second; }
  3878.  
  3879.   template <typename _Tp, typename _Up>
  3880.     constexpr const _Tp&
  3881.     get(const pair<_Up, _Tp>& __p) noexcept
  3882.     { return __p.second; }
  3883.  
  3884.   template <typename _Tp, typename _Up>
  3885.     constexpr _Tp&&
  3886.     get(pair<_Up, _Tp>&& __p) noexcept
  3887.     { return std::move(__p.second); }
  3888.  
  3889.  
  3890.  
  3891.  
  3892.   template <typename _Tp, typename _Up = _Tp>
  3893.     inline _Tp
  3894.     exchange(_Tp& __obj, _Up&& __new_val)
  3895.     { return std::__exchange(__obj, std::forward<_Up>(__new_val)); }
  3896.  
  3897.  
  3898.  
  3899.  
  3900.   template<size_t... _Indexes>
  3901.     struct _Index_tuple
  3902.     {
  3903.       typedef _Index_tuple<_Indexes..., sizeof...(_Indexes)> __next;
  3904.     };
  3905.  
  3906.  
  3907.   template<size_t _Num>
  3908.     struct _Build_index_tuple
  3909.     {
  3910.       typedef typename _Build_index_tuple<_Num - 1>::__type::__next __type;
  3911.     };
  3912.  
  3913.   template<>
  3914.     struct _Build_index_tuple<0>
  3915.     {
  3916.       typedef _Index_tuple<> __type;
  3917.     };
  3918.  
  3919.  
  3920.  
  3921.  
  3922.  
  3923.  
  3924.   template<typename _Tp, _Tp... _Idx>
  3925.     struct integer_sequence
  3926.     {
  3927.       typedef _Tp value_type;
  3928.       static constexpr size_t size() { return sizeof...(_Idx); }
  3929.     };
  3930.  
  3931.   template<typename _Tp, _Tp _Num,
  3932.     typename _ISeq = typename _Build_index_tuple<_Num>::__type>
  3933.     struct _Make_integer_sequence;
  3934.  
  3935.   template<typename _Tp, _Tp _Num, size_t... _Idx>
  3936.     struct _Make_integer_sequence<_Tp, _Num, _Index_tuple<_Idx...>>
  3937.     {
  3938.       static_assert( _Num >= 0,
  3939.        "Cannot make integer sequence of negative length" );
  3940.  
  3941.       typedef integer_sequence<_Tp, static_cast<_Tp>(_Idx)...> __type;
  3942.     };
  3943.  
  3944.  
  3945.   template<typename _Tp, _Tp _Num>
  3946.     using make_integer_sequence
  3947.       = typename _Make_integer_sequence<_Tp, _Num>::__type;
  3948.  
  3949.  
  3950.   template<size_t... _Idx>
  3951.     using index_sequence = integer_sequence<size_t, _Idx...>;
  3952.  
  3953.  
  3954.   template<size_t _Num>
  3955.     using make_index_sequence = make_integer_sequence<size_t, _Num>;
  3956.  
  3957.  
  3958.   template<typename... _Types>
  3959.     using index_sequence_for = make_index_sequence<sizeof...(_Types)>;
  3960.  
  3961.  
  3962.  
  3963. }
  3964. # 35 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp" 2
  3965.  
  3966.  
  3967.  
  3968. namespace boost { namespace hana {
  3969.     namespace detail {
  3970.  
  3971.  
  3972.  
  3973.         template <std::size_t> struct bti;
  3974.  
  3975.         struct from_other { };
  3976.  
  3977.         template <typename Indices, typename ...Xn>
  3978.         struct basic_tuple_impl;
  3979.  
  3980.         template <std::size_t ...n, typename ...Xn>
  3981.         struct basic_tuple_impl<std::index_sequence<n...>, Xn...>
  3982.             : detail::ebo<bti<n>, Xn>...
  3983.         {
  3984.             static constexpr std::size_t size_ = sizeof...(Xn);
  3985.  
  3986.             constexpr basic_tuple_impl() = default;
  3987.  
  3988.             template <typename Other>
  3989.             explicit constexpr basic_tuple_impl(detail::from_other, Other&& other)
  3990.                 : detail::ebo<bti<n>, Xn>(detail::ebo_get<bti<n>>(static_cast<Other&&>(other)))...
  3991.             { }
  3992.  
  3993.             template <typename ...Yn>
  3994.             explicit constexpr basic_tuple_impl(Yn&& ...yn)
  3995.                 : detail::ebo<bti<n>, Xn>(static_cast<Yn&&>(yn))...
  3996.             { }
  3997.         };
  3998.     }
  3999.  
  4000.  
  4001.  
  4002.  
  4003.  
  4004.     template <typename ...Xn>
  4005.     struct basic_tuple final
  4006.         : detail::basic_tuple_impl<std::make_index_sequence<sizeof...(Xn)>, Xn...>
  4007.     {
  4008.         using Base = detail::basic_tuple_impl<std::make_index_sequence<sizeof...(Xn)>, Xn...>;
  4009.  
  4010.         constexpr basic_tuple() = default;
  4011.  
  4012.  
  4013.         template <typename Other, typename = typename std::enable_if<
  4014.             std::is_same<typename detail::decay<Other>::type, basic_tuple>::value
  4015.         >::type>
  4016.         constexpr basic_tuple(Other&& other)
  4017.             : Base(detail::from_other{}, static_cast<Other&&>(other))
  4018.         { }
  4019.  
  4020.         template <typename ...Yn>
  4021.         explicit constexpr basic_tuple(Yn&& ...yn)
  4022.             : Base(static_cast<Yn&&>(yn)...)
  4023.         { }
  4024.     };
  4025.  
  4026.  
  4027.     template <typename ...Xn>
  4028.     struct tag_of<basic_tuple<Xn...>> {
  4029.         using type = basic_tuple_tag;
  4030.     };
  4031.  
  4032.  
  4033.  
  4034.  
  4035.     template <>
  4036.     struct unpack_impl<basic_tuple_tag> {
  4037.         template <std::size_t ...i, typename ...Xn, typename F>
  4038.         static constexpr decltype(auto)
  4039.         apply(detail::basic_tuple_impl<std::index_sequence<i...>, Xn...> const& xs, F&& f) {
  4040.             return static_cast<F&&>(f)(
  4041.                 detail::ebo_get<detail::bti<i>>(
  4042.                     static_cast<detail::ebo<detail::bti<i>, Xn> const&>(xs)
  4043.                 )...
  4044.             );
  4045.         }
  4046.  
  4047.         template <std::size_t ...i, typename ...Xn, typename F>
  4048.         static constexpr decltype(auto)
  4049.         apply(detail::basic_tuple_impl<std::index_sequence<i...>, Xn...>& xs, F&& f) {
  4050.             return static_cast<F&&>(f)(
  4051.                 detail::ebo_get<detail::bti<i>>(
  4052.                     static_cast<detail::ebo<detail::bti<i>, Xn>&>(xs)
  4053.                 )...
  4054.             );
  4055.         }
  4056.  
  4057.         template <std::size_t ...i, typename ...Xn, typename F>
  4058.         static constexpr decltype(auto)
  4059.         apply(detail::basic_tuple_impl<std::index_sequence<i...>, Xn...>&& xs, F&& f) {
  4060.             return static_cast<F&&>(f)(
  4061.                 detail::ebo_get<detail::bti<i>>(
  4062.                     static_cast<detail::ebo<detail::bti<i>, Xn>&&>(xs)
  4063.                 )...
  4064.             );
  4065.         }
  4066.     };
  4067.  
  4068.  
  4069.  
  4070.  
  4071.     template <>
  4072.     struct transform_impl<basic_tuple_tag> {
  4073.         template <std::size_t ...i, typename ...Xn, typename F>
  4074.         static constexpr auto
  4075.         apply(detail::basic_tuple_impl<std::index_sequence<i...>, Xn...> const& xs, F const& f) {
  4076.             return hana::make_basic_tuple(
  4077.                 f(detail::ebo_get<detail::bti<i>>(
  4078.                     static_cast<detail::ebo<detail::bti<i>, Xn> const&>(xs)
  4079.                 ))...
  4080.             );
  4081.         }
  4082.  
  4083.         template <std::size_t ...i, typename ...Xn, typename F>
  4084.         static constexpr auto
  4085.         apply(detail::basic_tuple_impl<std::index_sequence<i...>, Xn...>& xs, F const& f) {
  4086.             return hana::make_basic_tuple(
  4087.                 f(detail::ebo_get<detail::bti<i>>(
  4088.                     static_cast<detail::ebo<detail::bti<i>, Xn>&>(xs)
  4089.                 ))...
  4090.             );
  4091.         }
  4092.  
  4093.         template <std::size_t ...i, typename ...Xn, typename F>
  4094.         static constexpr auto
  4095.         apply(detail::basic_tuple_impl<std::index_sequence<i...>, Xn...>&& xs, F const& f) {
  4096.             return hana::make_basic_tuple(
  4097.                 f(detail::ebo_get<detail::bti<i>>(
  4098.                     static_cast<detail::ebo<detail::bti<i>, Xn>&&>(xs)
  4099.                 ))...
  4100.             );
  4101.         }
  4102.     };
  4103.  
  4104.  
  4105.  
  4106.  
  4107.     template <>
  4108.     struct at_impl<basic_tuple_tag> {
  4109.         template <typename Xs, typename N>
  4110.         static constexpr decltype(auto) apply(Xs&& xs, N const&) {
  4111.             constexpr std::size_t index = N::value;
  4112.             return detail::ebo_get<detail::bti<index>>(static_cast<Xs&&>(xs));
  4113.         }
  4114.     };
  4115.  
  4116.     template <>
  4117.     struct drop_front_impl<basic_tuple_tag> {
  4118.         template <std::size_t N, typename Xs, std::size_t ...i>
  4119.         static constexpr auto drop_front_helper(Xs&& xs, std::index_sequence<i...>) {
  4120.             return hana::make_basic_tuple(
  4121.                 detail::ebo_get<detail::bti<i+N>>(static_cast<Xs&&>(xs))...
  4122.             );
  4123.         }
  4124.  
  4125.         template <typename Xs, typename N>
  4126.         static constexpr auto apply(Xs&& xs, N const&) {
  4127.             constexpr std::size_t len = detail::decay<Xs>::type::size_;
  4128.             return drop_front_helper<N::value>(static_cast<Xs&&>(xs), std::make_index_sequence<
  4129.                 N::value < len ? len - N::value : 0
  4130.             >{});
  4131.         }
  4132.     };
  4133.  
  4134.     template <>
  4135.     struct is_empty_impl<basic_tuple_tag> {
  4136.         template <typename ...Xs>
  4137.         static constexpr hana::bool_<sizeof...(Xs) == 0>
  4138.         apply(basic_tuple<Xs...> const&)
  4139.         { return {}; }
  4140.     };
  4141.  
  4142.  
  4143.     template <std::size_t n, typename ...Xs>
  4144.     constexpr decltype(auto) at_c(basic_tuple<Xs...> const& xs) {
  4145.         return detail::ebo_get<detail::bti<n>>(xs);
  4146.     }
  4147.  
  4148.     template <std::size_t n, typename ...Xs>
  4149.     constexpr decltype(auto) at_c(basic_tuple<Xs...>& xs) {
  4150.         return detail::ebo_get<detail::bti<n>>(xs);
  4151.     }
  4152.  
  4153.     template <std::size_t n, typename ...Xs>
  4154.     constexpr decltype(auto) at_c(basic_tuple<Xs...>&& xs) {
  4155.         return detail::ebo_get<detail::bti<n>>(static_cast<basic_tuple<Xs...>&&>(xs));
  4156.     }
  4157.  
  4158.  
  4159.  
  4160.  
  4161.     template <>
  4162.     struct Sequence<basic_tuple_tag> {
  4163.         static constexpr bool value = true;
  4164.     };
  4165.  
  4166.     template <>
  4167.     struct make_impl<basic_tuple_tag> {
  4168.         template <typename ...Xn>
  4169.         static constexpr basic_tuple<typename detail::decay<Xn>::type...>
  4170.         apply(Xn&& ...xn) {
  4171.             return basic_tuple<typename detail::decay<Xn>::type...>{
  4172.                 static_cast<Xn&&>(xn)...
  4173.             };
  4174.         }
  4175.     };
  4176. # 259 "/us/include/boost_1_64_0/boost/hana/basic_tuple.hpp"
  4177. }}
  4178. # 13 "/us/include/boost_1_64_0/boost/hana/functional/partial.hpp" 2
  4179.  
  4180.  
  4181.  
  4182.  
  4183.  
  4184.  
  4185.  
  4186.  
  4187. namespace boost { namespace hana {
  4188. # 49 "/us/include/boost_1_64_0/boost/hana/functional/partial.hpp"
  4189.     template <typename Indices, typename F, typename ...X>
  4190.     struct partial_t;
  4191.  
  4192.     struct make_partial_t {
  4193.         struct secret { };
  4194.         template <typename F, typename ...X>
  4195.         constexpr partial_t<
  4196.             std::make_index_sequence<sizeof...(X)>,
  4197.             typename detail::decay<F>::type,
  4198.             typename detail::decay<X>::type...
  4199.         >
  4200.         operator()(F&& f, X&& ...x) const {
  4201.             return {secret{}, static_cast<F&&>(f), static_cast<X&&>(x)...};
  4202.         }
  4203.     };
  4204.  
  4205.     template <std::size_t ...n, typename F, typename ...X>
  4206.     struct partial_t<std::index_sequence<n...>, F, X...> {
  4207.         partial_t() = default;
  4208.  
  4209.         template <typename ...T>
  4210.         constexpr partial_t(make_partial_t::secret, T&& ...t)
  4211.             : storage_{static_cast<T&&>(t)...}
  4212.         { }
  4213.  
  4214.         basic_tuple<F, X...> storage_;
  4215.  
  4216.         template <typename ...Y>
  4217.         constexpr decltype(auto) operator()(Y&& ...y) const& {
  4218.             return hana::at_c<0>(storage_)(
  4219.                 hana::at_c<n+1>(storage_)...,
  4220.                 static_cast<Y&&>(y)...
  4221.             );
  4222.         }
  4223.  
  4224.         template <typename ...Y>
  4225.         constexpr decltype(auto) operator()(Y&& ...y) & {
  4226.             return hana::at_c<0>(storage_)(
  4227.                 hana::at_c<n+1>(storage_)...,
  4228.                 static_cast<Y&&>(y)...
  4229.             );
  4230.         }
  4231.  
  4232.         template <typename ...Y>
  4233.         constexpr decltype(auto) operator()(Y&& ...y) && {
  4234.             return static_cast<F&&>(hana::at_c<0>(storage_))(
  4235.                 static_cast<X&&>(hana::at_c<n+1>(storage_))...,
  4236.                 static_cast<Y&&>(y)...
  4237.             );
  4238.         }
  4239.     };
  4240.  
  4241.     constexpr make_partial_t partial{};
  4242.  
  4243. }}
  4244. # 19 "/us/include/boost_1_64_0/boost/hana/fold_left.hpp" 2
  4245.  
  4246. # 1 "/us/include/boost_1_64_0/boost/hana/unpack.hpp" 1
  4247. # 15 "/us/include/boost_1_64_0/boost/hana/unpack.hpp"
  4248. # 1 "/us/include/boost_1_64_0/boost/hana/accessors.hpp" 1
  4249. # 13 "/us/include/boost_1_64_0/boost/hana/accessors.hpp"
  4250. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/accessors.hpp" 1
  4251. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/accessors.hpp"
  4252. namespace boost { namespace hana {
  4253. # 39 "/us/include/boost_1_64_0/boost/hana/fwd/accessors.hpp"
  4254.     template <typename S, typename = void>
  4255.     struct accessors_impl : accessors_impl<S, when<true>> { };
  4256.  
  4257.     template <typename S>
  4258.     struct accessors_t;
  4259.  
  4260.     template <typename S>
  4261.     constexpr accessors_t<S> accessors{};
  4262.  
  4263. }}
  4264. # 13 "/us/include/boost_1_64_0/boost/hana/accessors.hpp" 2
  4265.  
  4266.  
  4267. # 1 "/us/include/boost_1_64_0/boost/hana/concept/struct.hpp" 1
  4268. # 13 "/us/include/boost_1_64_0/boost/hana/concept/struct.hpp"
  4269. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/struct.hpp" 1
  4270. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/struct.hpp"
  4271. namespace boost { namespace hana {
  4272. # 152 "/us/include/boost_1_64_0/boost/hana/fwd/concept/struct.hpp"
  4273.     template <typename S>
  4274.     struct Struct;
  4275. }}
  4276. # 13 "/us/include/boost_1_64_0/boost/hana/concept/struct.hpp" 2
  4277.  
  4278.  
  4279. # 1 "/us/include/boost_1_64_0/boost/hana/accessors.hpp" 1
  4280. # 15 "/us/include/boost_1_64_0/boost/hana/concept/struct.hpp" 2
  4281.  
  4282.  
  4283.  
  4284.  
  4285.  
  4286.  
  4287.  
  4288. namespace boost { namespace hana {
  4289.     template <typename S>
  4290.     struct Struct
  4291.         : hana::integral_constant<bool,
  4292.             !is_default<accessors_impl<typename tag_of<S>::type>>::value
  4293.         >
  4294.     { };
  4295. }}
  4296. # 15 "/us/include/boost_1_64_0/boost/hana/accessors.hpp" 2
  4297.  
  4298.  
  4299.  
  4300.  
  4301.  
  4302. namespace boost { namespace hana {
  4303.     template <typename S>
  4304.     struct accessors_t {
  4305.  
  4306.         static_assert(hana::Struct<S>::value,
  4307.         "hana::accessors<S> requires 'S' to be a Struct");
  4308.  
  4309.  
  4310.         constexpr decltype(auto) operator()() const {
  4311.             using Accessors = ::std::conditional_t< (hana::Struct<S>::value), accessors_impl<S>, ::boost::hana::deleted_implementation >;
  4312.  
  4313.  
  4314.  
  4315.             return Accessors::apply();
  4316.         }
  4317.     };
  4318.  
  4319.     template <typename S, bool condition>
  4320.     struct accessors_impl<S, when<condition>> : default_ {
  4321.         template <typename ...Args>
  4322.         static constexpr auto apply(Args&& ...) = delete;
  4323.     };
  4324.  
  4325.     namespace struct_detail {
  4326.         template <typename ...>
  4327.         struct is_valid { static constexpr bool value = true; };
  4328.     }
  4329.  
  4330.     template <typename S>
  4331.     struct accessors_impl<S, when<
  4332.         struct_detail::is_valid<typename S::hana_accessors_impl>::value
  4333.     >>
  4334.         : S::hana_accessors_impl
  4335.     { };
  4336. }}
  4337. # 15 "/us/include/boost_1_64_0/boost/hana/unpack.hpp" 2
  4338.  
  4339. # 1 "/us/include/boost_1_64_0/boost/hana/at.hpp" 1
  4340. # 16 "/us/include/boost_1_64_0/boost/hana/at.hpp"
  4341. # 1 "/us/include/boost_1_64_0/boost/hana/concept/iterable.hpp" 1
  4342. # 13 "/us/include/boost_1_64_0/boost/hana/concept/iterable.hpp"
  4343. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/iterable.hpp" 1
  4344. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/iterable.hpp"
  4345. namespace boost { namespace hana {
  4346. # 145 "/us/include/boost_1_64_0/boost/hana/fwd/concept/iterable.hpp"
  4347.     template <typename It>
  4348.     struct Iterable;
  4349. }}
  4350. # 13 "/us/include/boost_1_64_0/boost/hana/concept/iterable.hpp" 2
  4351.  
  4352.  
  4353. # 1 "/us/include/boost_1_64_0/boost/hana/at.hpp" 1
  4354. # 15 "/us/include/boost_1_64_0/boost/hana/concept/iterable.hpp" 2
  4355.  
  4356.  
  4357.  
  4358.  
  4359.  
  4360. # 1 "/us/include/boost_1_64_0/boost/hana/drop_front.hpp" 1
  4361. # 16 "/us/include/boost_1_64_0/boost/hana/drop_front.hpp"
  4362. # 1 "/us/include/boost_1_64_0/boost/hana/concept/iterable.hpp" 1
  4363. # 16 "/us/include/boost_1_64_0/boost/hana/drop_front.hpp" 2
  4364.  
  4365.  
  4366.  
  4367.  
  4368. # 1 "/us/include/boost_1_64_0/boost/hana/integral_constant.hpp" 1
  4369. # 13 "/us/include/boost_1_64_0/boost/hana/integral_constant.hpp"
  4370. # 1 "/us/include/boost_1_64_0/boost/hana/bool.hpp" 1
  4371. # 13 "/us/include/boost_1_64_0/boost/hana/integral_constant.hpp" 2
  4372. # 20 "/us/include/boost_1_64_0/boost/hana/drop_front.hpp" 2
  4373.  
  4374.  
  4375.  
  4376. namespace boost { namespace hana {
  4377.  
  4378.     template <typename Xs, typename N>
  4379.     constexpr auto drop_front_t::operator()(Xs&& xs, N const& n) const {
  4380.         using It = typename hana::tag_of<Xs>::type;
  4381.         using DropFront = ::std::conditional_t< (hana::Iterable<It>::value && hana::IntegralConstant<N>::value), drop_front_impl<It>, ::boost::hana::deleted_implementation >;
  4382.  
  4383.  
  4384.  
  4385.  
  4386.  
  4387.         static_assert(hana::Iterable<It>::value,
  4388.         "hana::drop_front(xs, n) requires 'xs' to be an Iterable");
  4389.  
  4390.         static_assert(hana::IntegralConstant<N>::value,
  4391.         "hana::drop_front(xs, n) requires 'n' to be an IntegralConstant");
  4392.  
  4393.  
  4394.         return DropFront::apply(static_cast<Xs&&>(xs), n);
  4395.     }
  4396.  
  4397.     template <typename Xs>
  4398.     constexpr auto drop_front_t::operator()(Xs&& xs) const {
  4399.         return (*this)(static_cast<Xs&&>(xs), hana::size_t<1>{});
  4400.     }
  4401.  
  4402.  
  4403.     template <typename It, bool condition>
  4404.     struct drop_front_impl<It, when<condition>> : default_ {
  4405.         template <typename Xs, typename N>
  4406.         static constexpr auto apply(Xs&&, N const&) = delete;
  4407.     };
  4408. }}
  4409. # 20 "/us/include/boost_1_64_0/boost/hana/concept/iterable.hpp" 2
  4410.  
  4411. # 1 "/us/include/boost_1_64_0/boost/hana/is_empty.hpp" 1
  4412. # 15 "/us/include/boost_1_64_0/boost/hana/is_empty.hpp"
  4413. # 1 "/us/include/boost_1_64_0/boost/hana/concept/iterable.hpp" 1
  4414. # 15 "/us/include/boost_1_64_0/boost/hana/is_empty.hpp" 2
  4415.  
  4416.  
  4417.  
  4418.  
  4419.  
  4420. namespace boost { namespace hana {
  4421.  
  4422.     template <typename Xs>
  4423.     constexpr auto is_empty_t::operator()(Xs const& xs) const {
  4424.         using It = typename hana::tag_of<Xs>::type;
  4425.         using IsEmpty = ::std::conditional_t< (hana::Iterable<It>::value), is_empty_impl<It>, ::boost::hana::deleted_implementation >;
  4426.  
  4427.  
  4428.  
  4429.  
  4430.         static_assert(hana::Iterable<It>::value,
  4431.         "hana::is_empty(xs) requires 'xs' to be an Iterable");
  4432.  
  4433.  
  4434.         return IsEmpty::apply(xs);
  4435.     }
  4436.  
  4437.  
  4438.     template <typename It, bool condition>
  4439.     struct is_empty_impl<It, when<condition>> : default_ {
  4440.         template <typename ...Args>
  4441.         static constexpr auto apply(Args&& ...) = delete;
  4442.     };
  4443. }}
  4444. # 21 "/us/include/boost_1_64_0/boost/hana/concept/iterable.hpp" 2
  4445.  
  4446.  
  4447.  
  4448. namespace boost { namespace hana {
  4449.     template <typename It>
  4450.     struct Iterable
  4451.         : hana::integral_constant<bool,
  4452.             !is_default<at_impl<typename tag_of<It>::type>>::value &&
  4453.             !is_default<drop_front_impl<typename tag_of<It>::type>>::value &&
  4454.             !is_default<is_empty_impl<typename tag_of<It>::type>>::value
  4455.         >
  4456.     { };
  4457. }}
  4458. # 16 "/us/include/boost_1_64_0/boost/hana/at.hpp" 2
  4459.  
  4460.  
  4461.  
  4462.  
  4463.  
  4464.  
  4465.  
  4466.  
  4467. namespace boost { namespace hana {
  4468.  
  4469.     template <typename Xs, typename N>
  4470.     constexpr decltype(auto) at_t::operator()(Xs&& xs, N const& n) const {
  4471.         using It = typename hana::tag_of<Xs>::type;
  4472.         using At = ::std::conditional_t< (hana::Iterable<It>::value), at_impl<It>, ::boost::hana::deleted_implementation >;
  4473.  
  4474.  
  4475.  
  4476.  
  4477.         static_assert(hana::Iterable<It>::value,
  4478.         "hana::at(xs, n) requires 'xs' to be an Iterable");
  4479.  
  4480.         static_assert(hana::IntegralConstant<N>::value,
  4481.         "hana::at(xs, n) requires 'n' to be an IntegralConstant");
  4482.  
  4483.  
  4484.         return At::apply(static_cast<Xs&&>(xs), n);
  4485.     }
  4486.  
  4487.  
  4488.     template <typename It, bool condition>
  4489.     struct at_impl<It, when<condition>> : default_ {
  4490.         template <typename ...Args>
  4491.         static constexpr auto apply(Args&& ...) = delete;
  4492.     };
  4493.  
  4494.     template <std::size_t n, typename Xs>
  4495.     constexpr decltype(auto) at_c(Xs&& xs) {
  4496.         return hana::at(static_cast<Xs&&>(xs), hana::size_t<n>{});
  4497.     }
  4498. }}
  4499. # 16 "/us/include/boost_1_64_0/boost/hana/unpack.hpp" 2
  4500.  
  4501. # 1 "/us/include/boost_1_64_0/boost/hana/concept/foldable.hpp" 1
  4502. # 17 "/us/include/boost_1_64_0/boost/hana/unpack.hpp" 2
  4503.  
  4504.  
  4505.  
  4506.  
  4507.  
  4508. # 1 "/us/include/boost_1_64_0/boost/hana/first.hpp" 1
  4509. # 13 "/us/include/boost_1_64_0/boost/hana/first.hpp"
  4510. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/first.hpp" 1
  4511. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/first.hpp"
  4512. namespace boost { namespace hana {
  4513. # 37 "/us/include/boost_1_64_0/boost/hana/fwd/first.hpp"
  4514.     template <typename P, typename = void>
  4515.     struct first_impl : first_impl<P, when<true>> { };
  4516.  
  4517.     struct first_t {
  4518.         template <typename Pair>
  4519.         constexpr decltype(auto) operator()(Pair&& pair) const;
  4520.     };
  4521.  
  4522.     constexpr first_t first{};
  4523.  
  4524. }}
  4525. # 13 "/us/include/boost_1_64_0/boost/hana/first.hpp" 2
  4526.  
  4527.  
  4528. # 1 "/us/include/boost_1_64_0/boost/hana/concept/product.hpp" 1
  4529. # 13 "/us/include/boost_1_64_0/boost/hana/concept/product.hpp"
  4530. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/product.hpp" 1
  4531. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/product.hpp"
  4532. namespace boost { namespace hana {
  4533. # 99 "/us/include/boost_1_64_0/boost/hana/fwd/concept/product.hpp"
  4534.     template <typename P>
  4535.     struct Product;
  4536. }}
  4537. # 13 "/us/include/boost_1_64_0/boost/hana/concept/product.hpp" 2
  4538.  
  4539.  
  4540.  
  4541.  
  4542.  
  4543.  
  4544. # 1 "/us/include/boost_1_64_0/boost/hana/first.hpp" 1
  4545. # 19 "/us/include/boost_1_64_0/boost/hana/concept/product.hpp" 2
  4546.  
  4547. # 1 "/us/include/boost_1_64_0/boost/hana/second.hpp" 1
  4548. # 13 "/us/include/boost_1_64_0/boost/hana/second.hpp"
  4549. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/second.hpp" 1
  4550. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/second.hpp"
  4551. namespace boost { namespace hana {
  4552. # 36 "/us/include/boost_1_64_0/boost/hana/fwd/second.hpp"
  4553.     template <typename P, typename = void>
  4554.     struct second_impl : second_impl<P, when<true>> { };
  4555.  
  4556.     struct second_t {
  4557.         template <typename Pair>
  4558.         constexpr decltype(auto) operator()(Pair&& pair) const;
  4559.     };
  4560.  
  4561.     constexpr second_t second{};
  4562.  
  4563. }}
  4564. # 13 "/us/include/boost_1_64_0/boost/hana/second.hpp" 2
  4565.  
  4566.  
  4567. # 1 "/us/include/boost_1_64_0/boost/hana/concept/product.hpp" 1
  4568. # 15 "/us/include/boost_1_64_0/boost/hana/second.hpp" 2
  4569.  
  4570.  
  4571.  
  4572.  
  4573.  
  4574. namespace boost { namespace hana {
  4575.  
  4576.     template <typename Pair>
  4577.     constexpr decltype(auto) second_t::operator()(Pair&& pair) const {
  4578.         using P = typename hana::tag_of<Pair>::type;
  4579.         using Second = ::std::conditional_t< (hana::Product<P>::value), second_impl<P>, ::boost::hana::deleted_implementation >;
  4580.  
  4581.  
  4582.  
  4583.  
  4584.         static_assert(hana::Product<P>::value,
  4585.         "hana::second(pair) requires 'pair' to be a Product");
  4586.  
  4587.  
  4588.         return Second::apply(static_cast<Pair&&>(pair));
  4589.     }
  4590.  
  4591.  
  4592.     template <typename P, bool condition>
  4593.     struct second_impl<P, when<condition>> : default_ {
  4594.         template <typename ...Args>
  4595.         static constexpr auto apply(Args&& ...) = delete;
  4596.     };
  4597. }}
  4598. # 20 "/us/include/boost_1_64_0/boost/hana/concept/product.hpp" 2
  4599.  
  4600.  
  4601.  
  4602. namespace boost { namespace hana {
  4603.     template <typename P>
  4604.     struct Product
  4605.         : hana::integral_constant<bool,
  4606.             !is_default<first_impl<typename tag_of<P>::type>>::value &&
  4607.             !is_default<second_impl<typename tag_of<P>::type>>::value
  4608.         >
  4609.     { };
  4610. }}
  4611. # 15 "/us/include/boost_1_64_0/boost/hana/first.hpp" 2
  4612.  
  4613.  
  4614.  
  4615.  
  4616.  
  4617. namespace boost { namespace hana {
  4618.  
  4619.     template <typename Pair>
  4620.     constexpr decltype(auto) first_t::operator()(Pair&& pair) const {
  4621.         using P = typename hana::tag_of<Pair>::type;
  4622.         using First = ::std::conditional_t< (hana::Product<P>::value), first_impl<P>, ::boost::hana::deleted_implementation >;
  4623.  
  4624.  
  4625.  
  4626.  
  4627.         static_assert(hana::Product<P>::value,
  4628.         "hana::first(pair) requires 'pair' to be a Product");
  4629.  
  4630.  
  4631.         return First::apply(static_cast<Pair&&>(pair));
  4632.     }
  4633.  
  4634.  
  4635.     template <typename P, bool condition>
  4636.     struct first_impl<P, when<condition>> : default_ {
  4637.         template <typename ...Args>
  4638.         static constexpr auto apply(Args&& ...) = delete;
  4639.     };
  4640. }}
  4641. # 22 "/us/include/boost_1_64_0/boost/hana/unpack.hpp" 2
  4642.  
  4643.  
  4644.  
  4645. # 1 "/us/include/boost_1_64_0/boost/hana/length.hpp" 1
  4646. # 13 "/us/include/boost_1_64_0/boost/hana/length.hpp"
  4647. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/length.hpp" 1
  4648. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/length.hpp"
  4649. namespace boost { namespace hana {
  4650. # 38 "/us/include/boost_1_64_0/boost/hana/fwd/length.hpp"
  4651.     template <typename T, typename = void>
  4652.     struct length_impl : length_impl<T, when<true>> { };
  4653.  
  4654.     struct length_t {
  4655.         template <typename Xs>
  4656.         constexpr auto operator()(Xs const& xs) const;
  4657.     };
  4658.  
  4659.     constexpr length_t length{};
  4660.  
  4661. }}
  4662. # 13 "/us/include/boost_1_64_0/boost/hana/length.hpp" 2
  4663.  
  4664.  
  4665. # 1 "/us/include/boost_1_64_0/boost/hana/concept/foldable.hpp" 1
  4666. # 15 "/us/include/boost_1_64_0/boost/hana/length.hpp" 2
  4667.  
  4668.  
  4669.  
  4670.  
  4671. # 1 "/us/include/boost_1_64_0/boost/hana/unpack.hpp" 1
  4672. # 19 "/us/include/boost_1_64_0/boost/hana/length.hpp" 2
  4673.  
  4674.  
  4675.  
  4676. namespace boost { namespace hana {
  4677.  
  4678.     template <typename Xs>
  4679.     constexpr auto length_t::operator()(Xs const& xs) const {
  4680.         using S = typename hana::tag_of<Xs>::type;
  4681.         using Length = ::std::conditional_t< (hana::Foldable<S>::value), length_impl<S>, ::boost::hana::deleted_implementation >;
  4682.  
  4683.  
  4684.  
  4685.  
  4686.         static_assert(hana::Foldable<S>::value,
  4687.         "hana::length(xs) requires 'xs' to be Foldable");
  4688.  
  4689.  
  4690.         return Length::apply(xs);
  4691.     }
  4692.  
  4693.  
  4694.     namespace detail {
  4695.         struct argn {
  4696.             template <typename ...Xs>
  4697.             constexpr hana::size_t<sizeof...(Xs)> operator()(Xs const& ...) const
  4698.             { return {}; }
  4699.         };
  4700.     }
  4701.  
  4702.     template <typename T, bool condition>
  4703.     struct length_impl<T, when<condition>> : default_ {
  4704.         template <typename Xs>
  4705.         static constexpr auto apply(Xs const& xs) {
  4706.             return hana::unpack(xs, detail::argn{});
  4707.         }
  4708.     };
  4709. }}
  4710. # 25 "/us/include/boost_1_64_0/boost/hana/unpack.hpp" 2
  4711.  
  4712. # 1 "/us/include/boost_1_64_0/boost/hana/pair.hpp" 1
  4713. # 13 "/us/include/boost_1_64_0/boost/hana/pair.hpp"
  4714. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/pair.hpp" 1
  4715. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/pair.hpp"
  4716. namespace boost { namespace hana {
  4717. # 120 "/us/include/boost_1_64_0/boost/hana/fwd/pair.hpp"
  4718.     template <typename First, typename Second>
  4719.     struct pair;
  4720.  
  4721.  
  4722.  
  4723.  
  4724.     struct pair_tag { };
  4725. # 150 "/us/include/boost_1_64_0/boost/hana/fwd/pair.hpp"
  4726.     constexpr auto make_pair = make<pair_tag>;
  4727. }}
  4728. # 13 "/us/include/boost_1_64_0/boost/hana/pair.hpp" 2
  4729.  
  4730.  
  4731.  
  4732.  
  4733.  
  4734.  
  4735.  
  4736. # 1 "/us/include/boost_1_64_0/boost/hana/detail/operators/comparable.hpp" 1
  4737. # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/comparable.hpp"
  4738. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/equal.hpp" 1
  4739. # 15 "/us/include/boost_1_64_0/boost/hana/fwd/equal.hpp"
  4740. # 1 "/us/include/boost_1_64_0/boost/hana/detail/nested_to_fwd.hpp" 1
  4741. # 16 "/us/include/boost_1_64_0/boost/hana/detail/nested_to_fwd.hpp"
  4742. namespace boost { namespace hana { namespace detail {
  4743.     template <typename Algorithm>
  4744.     struct nested_to_t {
  4745.         template <typename X>
  4746.         constexpr decltype(auto) operator()(X&& x) const;
  4747.     };
  4748. # 40 "/us/include/boost_1_64_0/boost/hana/detail/nested_to_fwd.hpp"
  4749.     template <typename Algorithm>
  4750.     struct nested_to { static constexpr nested_to_t<Algorithm> to{}; };
  4751.  
  4752.     template <typename Algorithm>
  4753.     constexpr nested_to_t<Algorithm> nested_to<Algorithm>::to;
  4754. } }}
  4755. # 15 "/us/include/boost_1_64_0/boost/hana/fwd/equal.hpp" 2
  4756.  
  4757.  
  4758.  
  4759. namespace boost { namespace hana {
  4760. # 68 "/us/include/boost_1_64_0/boost/hana/fwd/equal.hpp"
  4761.     template <typename T, typename U, typename = void>
  4762.     struct equal_impl : equal_impl<T, U, when<true>> { };
  4763.  
  4764.     struct equal_t : detail::nested_to<equal_t> {
  4765.         template <typename X, typename Y>
  4766.         constexpr auto operator()(X&& x, Y&& y) const;
  4767.     };
  4768.  
  4769.     constexpr equal_t equal{};
  4770.  
  4771. }}
  4772. # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/comparable.hpp" 2
  4773.  
  4774. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/not_equal.hpp" 1
  4775. # 18 "/us/include/boost_1_64_0/boost/hana/fwd/not_equal.hpp"
  4776. namespace boost { namespace hana {
  4777. # 58 "/us/include/boost_1_64_0/boost/hana/fwd/not_equal.hpp"
  4778.     template <typename T, typename U, typename = void>
  4779.     struct not_equal_impl : not_equal_impl<T, U, when<true>> { };
  4780.  
  4781.     struct not_equal_t : detail::nested_to<not_equal_t> {
  4782.         template <typename X, typename Y>
  4783.         constexpr auto operator()(X&& x, Y&& y) const;
  4784.     };
  4785.  
  4786.     constexpr not_equal_t not_equal{};
  4787.  
  4788. }}
  4789. # 16 "/us/include/boost_1_64_0/boost/hana/detail/operators/comparable.hpp" 2
  4790.  
  4791.  
  4792.  
  4793.  
  4794.  
  4795. namespace boost { namespace hana { namespace detail {
  4796.     template <typename Tag>
  4797.     struct comparable_operators {
  4798.         static constexpr bool value = false;
  4799.     };
  4800.  
  4801.     namespace operators {
  4802.         template <typename X, typename Y, typename = typename std::enable_if<
  4803.             detail::comparable_operators<typename hana::tag_of<X>::type>::value ||
  4804.             detail::comparable_operators<typename hana::tag_of<Y>::type>::value
  4805.         >::type>
  4806.         constexpr auto operator==(X&& x, Y&& y)
  4807.         { return hana::equal(static_cast<X&&>(x), static_cast<Y&&>(y)); }
  4808.  
  4809.         template <typename X, typename Y, typename = typename std::enable_if<
  4810.             detail::comparable_operators<typename hana::tag_of<X>::type>::value ||
  4811.             detail::comparable_operators<typename hana::tag_of<Y>::type>::value
  4812.         >::type>
  4813.         constexpr auto operator!=(X&& x, Y&& y)
  4814.         { return hana::not_equal(static_cast<X&&>(x), static_cast<Y&&>(y)); }
  4815.     }
  4816. } }}
  4817. # 20 "/us/include/boost_1_64_0/boost/hana/pair.hpp" 2
  4818.  
  4819. # 1 "/us/include/boost_1_64_0/boost/hana/detail/operators/orderable.hpp" 1
  4820. # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/orderable.hpp"
  4821. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/greater.hpp" 1
  4822. # 15 "/us/include/boost_1_64_0/boost/hana/fwd/greater.hpp"
  4823. # 1 "/us/include/boost_1_64_0/boost/hana/detail/nested_than_fwd.hpp" 1
  4824. # 16 "/us/include/boost_1_64_0/boost/hana/detail/nested_than_fwd.hpp"
  4825. namespace boost { namespace hana { namespace detail {
  4826.     template <typename Algorithm>
  4827.     struct nested_than_t {
  4828.         template <typename X>
  4829.         constexpr decltype(auto) operator()(X&& x) const;
  4830.     };
  4831. # 40 "/us/include/boost_1_64_0/boost/hana/detail/nested_than_fwd.hpp"
  4832.     template <typename Algorithm>
  4833.     struct nested_than { static constexpr nested_than_t<Algorithm> than{}; };
  4834.  
  4835.     template <typename Algorithm>
  4836.     constexpr nested_than_t<Algorithm> nested_than<Algorithm>::than;
  4837. } }}
  4838. # 15 "/us/include/boost_1_64_0/boost/hana/fwd/greater.hpp" 2
  4839.  
  4840.  
  4841.  
  4842. namespace boost { namespace hana {
  4843. # 41 "/us/include/boost_1_64_0/boost/hana/fwd/greater.hpp"
  4844.     template <typename T, typename U, typename = void>
  4845.     struct greater_impl : greater_impl<T, U, when<true>> { };
  4846.  
  4847.     struct greater_t : detail::nested_than<greater_t> {
  4848.         template <typename X, typename Y>
  4849.         constexpr decltype(auto) operator()(X&& x, Y&& y) const;
  4850.     };
  4851.  
  4852.     constexpr greater_t greater{};
  4853.  
  4854. }}
  4855. # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/orderable.hpp" 2
  4856.  
  4857. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/greater_equal.hpp" 1
  4858. # 18 "/us/include/boost_1_64_0/boost/hana/fwd/greater_equal.hpp"
  4859. namespace boost { namespace hana {
  4860. # 42 "/us/include/boost_1_64_0/boost/hana/fwd/greater_equal.hpp"
  4861.     template <typename T, typename U, typename = void>
  4862.     struct greater_equal_impl : greater_equal_impl<T, U, when<true>> { };
  4863.  
  4864.     struct greater_equal_t : detail::nested_than<greater_equal_t> {
  4865.         template <typename X, typename Y>
  4866.         constexpr decltype(auto) operator()(X&& x, Y&& y) const;
  4867.     };
  4868.  
  4869.     constexpr greater_equal_t greater_equal{};
  4870.  
  4871. }}
  4872. # 16 "/us/include/boost_1_64_0/boost/hana/detail/operators/orderable.hpp" 2
  4873.  
  4874. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/less.hpp" 1
  4875. # 18 "/us/include/boost_1_64_0/boost/hana/fwd/less.hpp"
  4876. namespace boost { namespace hana {
  4877. # 41 "/us/include/boost_1_64_0/boost/hana/fwd/less.hpp"
  4878.     template <typename T, typename U, typename = void>
  4879.     struct less_impl : less_impl<T, U, when<true>> { };
  4880.  
  4881.     struct less_t : detail::nested_than<less_t> {
  4882.         template <typename X, typename Y>
  4883.         constexpr auto operator()(X&& x, Y&& y) const;
  4884.     };
  4885.  
  4886.     constexpr less_t less{};
  4887.  
  4888. }}
  4889. # 17 "/us/include/boost_1_64_0/boost/hana/detail/operators/orderable.hpp" 2
  4890.  
  4891. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/less_equal.hpp" 1
  4892. # 18 "/us/include/boost_1_64_0/boost/hana/fwd/less_equal.hpp"
  4893. namespace boost { namespace hana {
  4894. # 42 "/us/include/boost_1_64_0/boost/hana/fwd/less_equal.hpp"
  4895.     template <typename T, typename U, typename = void>
  4896.     struct less_equal_impl : less_equal_impl<T, U, when<true>> { };
  4897.  
  4898.     struct less_equal_t : detail::nested_than<less_equal_t> {
  4899.         template <typename X, typename Y>
  4900.         constexpr auto operator()(X&& x, Y&& y) const;
  4901.     };
  4902.  
  4903.     constexpr less_equal_t less_equal{};
  4904.  
  4905. }}
  4906. # 18 "/us/include/boost_1_64_0/boost/hana/detail/operators/orderable.hpp" 2
  4907.  
  4908.  
  4909.  
  4910.  
  4911.  
  4912. namespace boost { namespace hana { namespace detail {
  4913.     template <typename Tag>
  4914.     struct orderable_operators {
  4915.         static constexpr bool value = false;
  4916.     };
  4917.  
  4918.     namespace operators {
  4919.         template <typename X, typename Y, typename = typename std::enable_if<
  4920.             detail::orderable_operators<typename hana::tag_of<X>::type>::value ||
  4921.             detail::orderable_operators<typename hana::tag_of<Y>::type>::value
  4922.         >::type>
  4923.         constexpr auto operator<(X&& x, Y&& y)
  4924.         { return hana::less(static_cast<X&&>(x), static_cast<Y&&>(y)); }
  4925.  
  4926.         template <typename X, typename Y, typename = typename std::enable_if<
  4927.             detail::orderable_operators<typename hana::tag_of<X>::type>::value ||
  4928.             detail::orderable_operators<typename hana::tag_of<Y>::type>::value
  4929.         >::type>
  4930.         constexpr auto operator>(X&& x, Y&& y)
  4931.         { return hana::greater(static_cast<X&&>(x), static_cast<Y&&>(y)); }
  4932.  
  4933.         template <typename X, typename Y, typename = typename std::enable_if<
  4934.             detail::orderable_operators<typename hana::tag_of<X>::type>::value ||
  4935.             detail::orderable_operators<typename hana::tag_of<Y>::type>::value
  4936.         >::type>
  4937.         constexpr auto operator<=(X&& x, Y&& y)
  4938.         { return hana::less_equal(static_cast<X&&>(x), static_cast<Y&&>(y)); }
  4939.  
  4940.         template <typename X, typename Y, typename = typename std::enable_if<
  4941.             detail::orderable_operators<typename hana::tag_of<X>::type>::value ||
  4942.             detail::orderable_operators<typename hana::tag_of<Y>::type>::value
  4943.         >::type>
  4944.         constexpr auto operator>=(X&& x, Y&& y)
  4945.         { return hana::greater_equal(static_cast<X&&>(x), static_cast<Y&&>(y)); }
  4946.     }
  4947. } }}
  4948. # 21 "/us/include/boost_1_64_0/boost/hana/pair.hpp" 2
  4949. # 30 "/us/include/boost_1_64_0/boost/hana/pair.hpp"
  4950. namespace boost { namespace hana {
  4951.     namespace detail {
  4952.         template <int> struct pix;
  4953.     }
  4954.  
  4955.  
  4956.  
  4957.  
  4958.  
  4959.     template <typename First, typename Second>
  4960.     struct pair : detail::operators::adl<pair<First, Second>>
  4961.                 , private detail::ebo<detail::pix<0>, First>
  4962.                 , private detail::ebo<detail::pix<1>, Second>
  4963.     {
  4964.  
  4965.         template <typename ...dummy, typename = typename std::enable_if<
  4966.             ::std::is_constructible<First, dummy...>::value &&
  4967.             ::std::is_constructible<Second, dummy...>::value
  4968.         >::type>
  4969.         constexpr pair()
  4970.             : detail::ebo<detail::pix<0>, First>()
  4971.             , detail::ebo<detail::pix<1>, Second>()
  4972.         { }
  4973.  
  4974.  
  4975.         template <typename ...dummy, typename = typename std::enable_if<
  4976.             ::std::is_constructible<First, First const&, dummy...>::value &&
  4977.             ::std::is_constructible<Second, Second const&, dummy...>::value
  4978.         >::type>
  4979.         constexpr pair(First const& fst, Second const& snd)
  4980.             : detail::ebo<detail::pix<0>, First>(fst)
  4981.             , detail::ebo<detail::pix<1>, Second>(snd)
  4982.         { }
  4983.  
  4984.         template <typename T, typename U, typename = typename std::enable_if<
  4985.             ::std::is_convertible<T&&, First>::value &&
  4986.             ::std::is_convertible<U&&, Second>::value
  4987.         >::type>
  4988.         constexpr pair(T&& t, U&& u)
  4989.             : detail::ebo<detail::pix<0>, First>(static_cast<T&&>(t))
  4990.             , detail::ebo<detail::pix<1>, Second>(static_cast<U&&>(u))
  4991.         { }
  4992.  
  4993.  
  4994.  
  4995.         template <typename T, typename U, typename = typename std::enable_if<
  4996.             ::std::is_constructible<First, T const&>::value &&
  4997.             ::std::is_constructible<Second, U const&>::value &&
  4998.             ::std::is_convertible<T const&, First>::value &&
  4999.             ::std::is_convertible<U const&, Second>::value
  5000.         >::type>
  5001.         constexpr pair(pair<T, U> const& other)
  5002.             : detail::ebo<detail::pix<0>, First>(detail::ebo_get<detail::pix<0>>(other))
  5003.             , detail::ebo<detail::pix<1>, Second>(detail::ebo_get<detail::pix<1>>(other))
  5004.         { }
  5005.  
  5006.         template <typename T, typename U, typename = typename std::enable_if<
  5007.             ::std::is_constructible<First, T&&>::value &&
  5008.             ::std::is_constructible<Second, U&&>::value &&
  5009.             ::std::is_convertible<T&&, First>::value &&
  5010.             ::std::is_convertible<U&&, Second>::value
  5011.         >::type>
  5012.         constexpr pair(pair<T, U>&& other)
  5013.             : detail::ebo<detail::pix<0>, First>(static_cast<T&&>(detail::ebo_get<detail::pix<0>>(other)))
  5014.             , detail::ebo<detail::pix<1>, Second>(static_cast<U&&>(detail::ebo_get<detail::pix<1>>(other)))
  5015.         { }
  5016.  
  5017.  
  5018.  
  5019.         template <typename T, typename U, typename = typename std::enable_if<
  5020.             ::std::is_assignable<First&, T const&>::value &&
  5021.             ::std::is_assignable<Second&, U const&>::value
  5022.         >::type>
  5023.         constexpr pair& operator=(pair<T, U> const& other) {
  5024.             detail::ebo_get<detail::pix<0>>(*this) = detail::ebo_get<detail::pix<0>>(other);
  5025.             detail::ebo_get<detail::pix<1>>(*this) = detail::ebo_get<detail::pix<1>>(other);
  5026.             return *this;
  5027.         }
  5028.  
  5029.         template <typename T, typename U, typename = typename std::enable_if<
  5030.             ::std::is_assignable<First&, T&&>::value &&
  5031.             ::std::is_assignable<Second&, U&&>::value
  5032.         >::type>
  5033.         constexpr pair& operator=(pair<T, U>&& other) {
  5034.             detail::ebo_get<detail::pix<0>>(*this) = static_cast<T&&>(detail::ebo_get<detail::pix<0>>(other));
  5035.             detail::ebo_get<detail::pix<1>>(*this) = static_cast<U&&>(detail::ebo_get<detail::pix<1>>(other));
  5036.             return *this;
  5037.         }
  5038.  
  5039.  
  5040.  
  5041.         ~pair() = default;
  5042.  
  5043.         friend struct first_impl<pair_tag>;
  5044.         friend struct second_impl<pair_tag>;
  5045.         template <typename F, typename S> friend struct pair;
  5046.     };
  5047.  
  5048.  
  5049.     template <typename First, typename Second>
  5050.     struct tag_of<pair<First, Second>> {
  5051.         using type = pair_tag;
  5052.     };
  5053.  
  5054.  
  5055.  
  5056.  
  5057.     namespace detail {
  5058.         template <>
  5059.         struct comparable_operators<pair_tag> {
  5060.             static constexpr bool value = true;
  5061.         };
  5062.         template <>
  5063.         struct orderable_operators<pair_tag> {
  5064.             static constexpr bool value = true;
  5065.         };
  5066.     }
  5067.  
  5068.  
  5069.  
  5070.  
  5071.     template <>
  5072.     struct make_impl<pair_tag> {
  5073.         template <typename F, typename S>
  5074.         static constexpr pair<
  5075.             typename detail::decay<F>::type,
  5076.             typename detail::decay<S>::type
  5077.         > apply(F&& f, S&& s) {
  5078.             return {static_cast<F&&>(f), static_cast<S&&>(s)};
  5079.         }
  5080.     };
  5081.  
  5082.     template <>
  5083.     struct first_impl<pair_tag> {
  5084.         template <typename First, typename Second>
  5085.         static constexpr decltype(auto) apply(hana::pair<First, Second>& p) {
  5086.             return detail::ebo_get<detail::pix<0>>(
  5087.                 static_cast<detail::ebo<detail::pix<0>, First>&>(p)
  5088.             );
  5089.         }
  5090.         template <typename First, typename Second>
  5091.         static constexpr decltype(auto) apply(hana::pair<First, Second> const& p) {
  5092.             return detail::ebo_get<detail::pix<0>>(
  5093.                 static_cast<detail::ebo<detail::pix<0>, First> const&>(p)
  5094.             );
  5095.         }
  5096.         template <typename First, typename Second>
  5097.         static constexpr decltype(auto) apply(hana::pair<First, Second>&& p) {
  5098.             return detail::ebo_get<detail::pix<0>>(
  5099.                 static_cast<detail::ebo<detail::pix<0>, First>&&>(p)
  5100.             );
  5101.         }
  5102.     };
  5103.  
  5104.     template <>
  5105.     struct second_impl<pair_tag> {
  5106.         template <typename First, typename Second>
  5107.         static constexpr decltype(auto) apply(hana::pair<First, Second>& p) {
  5108.             return detail::ebo_get<detail::pix<1>>(
  5109.                 static_cast<detail::ebo<detail::pix<1>, Second>&>(p)
  5110.             );
  5111.         }
  5112.         template <typename First, typename Second>
  5113.         static constexpr decltype(auto) apply(hana::pair<First, Second> const& p) {
  5114.             return detail::ebo_get<detail::pix<1>>(
  5115.                 static_cast<detail::ebo<detail::pix<1>, Second> const&>(p)
  5116.             );
  5117.         }
  5118.         template <typename First, typename Second>
  5119.         static constexpr decltype(auto) apply(hana::pair<First, Second>&& p) {
  5120.             return detail::ebo_get<detail::pix<1>>(
  5121.                 static_cast<detail::ebo<detail::pix<1>, Second>&&>(p)
  5122.             );
  5123.         }
  5124.     };
  5125. }}
  5126. # 26 "/us/include/boost_1_64_0/boost/hana/unpack.hpp" 2
  5127.  
  5128.  
  5129.  
  5130.  
  5131.  
  5132.  
  5133.  
  5134. namespace boost { namespace hana {
  5135.  
  5136.     template <typename Xs, typename F>
  5137.     constexpr decltype(auto) unpack_t::operator()(Xs&& xs, F&& f) const {
  5138.         using S = typename hana::tag_of<Xs>::type;
  5139.         using Unpack = ::std::conditional_t< (hana::Foldable<S>::value), unpack_impl<S>, ::boost::hana::deleted_implementation >;
  5140.  
  5141.  
  5142.  
  5143.  
  5144.         static_assert(hana::Foldable<S>::value,
  5145.         "hana::unpack(xs, f) requires 'xs' to be Foldable");
  5146.  
  5147.  
  5148.         return Unpack::apply(static_cast<Xs&&>(xs), static_cast<F&&>(f));
  5149.     }
  5150.  
  5151.  
  5152.     template <typename T, bool condition>
  5153.     struct unpack_impl<T, when<condition>> : default_ {
  5154.         template <typename Xs, typename F>
  5155.         static constexpr decltype(auto) apply(Xs&& xs, F&& f) {
  5156.             return hana::fold_left(static_cast<Xs&&>(xs),
  5157.                                    static_cast<F&&>(f),
  5158.                                    hana::partial)();
  5159.         }
  5160.     };
  5161.  
  5162.     template <typename It>
  5163.     struct unpack_impl<It, when<
  5164.         hana::Iterable<It>::value && !is_default<length_impl<It>>::value
  5165.     >> {
  5166.         template <typename Xs, typename F, std::size_t ...i>
  5167.         static constexpr decltype(auto)
  5168.         unpack_helper(Xs&& xs, F&& f, std::index_sequence<i...>) {
  5169.             return static_cast<F&&>(f)(hana::at_c<i>(static_cast<Xs&&>(xs))...);
  5170.         }
  5171.  
  5172.         template <typename Xs, typename F>
  5173.         static constexpr decltype(auto) apply(Xs&& xs, F&& f) {
  5174.             constexpr std::size_t N = decltype(hana::length(xs))::value;
  5175.             return unpack_helper(static_cast<Xs&&>(xs), static_cast<F&&>(f),
  5176.                                  std::make_index_sequence<N>{});
  5177.         }
  5178.     };
  5179.  
  5180.     template <typename T, std::size_t N>
  5181.     struct unpack_impl<T[N]> {
  5182.         template <typename Xs, typename F, std::size_t ...i>
  5183.         static constexpr decltype(auto)
  5184.         unpack_helper(Xs&& xs, F&& f, std::index_sequence<i...>) {
  5185.             return static_cast<F&&>(f)(static_cast<Xs&&>(xs)[i]...);
  5186.         }
  5187.  
  5188.         template <typename Xs, typename F>
  5189.         static constexpr decltype(auto) apply(Xs&& xs, F&& f) {
  5190.             return unpack_impl::unpack_helper(static_cast<Xs&&>(xs),
  5191.                                               static_cast<F&&>(f),
  5192.                                               std::make_index_sequence<N>{});
  5193.         }
  5194.     };
  5195.  
  5196.  
  5197.  
  5198.  
  5199.     template <typename T>
  5200.     struct unpack_impl<T, when<hana::Product<T>::value>> {
  5201.         template <typename P, typename F>
  5202.         static constexpr decltype(auto) apply(P&& p, F&& f) {
  5203.             return static_cast<F&&>(f)(
  5204.                 hana::first(static_cast<P&&>(p)),
  5205.                 hana::second(static_cast<P&&>(p))
  5206.             );
  5207.         }
  5208.     };
  5209.  
  5210.  
  5211.  
  5212.  
  5213.     namespace struct_detail {
  5214.  
  5215.  
  5216.  
  5217.         struct almost_demux {
  5218.             template <typename F, typename Udt, typename ...Members>
  5219.             constexpr decltype(auto)
  5220.             operator()(F&& f, Udt&& udt, Members&& ...g) const {
  5221.                 return static_cast<F&&>(f)(hana::make_pair(
  5222.                     hana::first(static_cast<Members&&>(g)),
  5223.                     hana::second(static_cast<Members&&>(g))
  5224.                                                 (static_cast<Udt&&>(udt))
  5225.                 )...);
  5226.             }
  5227.         };
  5228.     }
  5229.  
  5230.     template <typename S>
  5231.     struct unpack_impl<S, when<hana::Struct<S>::value>> {
  5232.         template <typename Udt, typename F>
  5233.         static constexpr decltype(auto) apply(Udt&& udt, F&& f) {
  5234.             return hana::unpack(hana::accessors<S>(),
  5235.                 hana::partial(struct_detail::almost_demux{},
  5236.                               static_cast<F&&>(f),
  5237.                               static_cast<Udt&&>(udt)));
  5238.         }
  5239.     };
  5240. }}
  5241. # 20 "/us/include/boost_1_64_0/boost/hana/fold_left.hpp" 2
  5242.  
  5243.  
  5244.  
  5245. namespace boost { namespace hana {
  5246.  
  5247.     template <typename Xs, typename State, typename F>
  5248.     constexpr decltype(auto) fold_left_t::operator()(Xs&& xs, State&& state, F&& f) const {
  5249.         using S = typename hana::tag_of<Xs>::type;
  5250.         using FoldLeft = ::std::conditional_t< (hana::Foldable<S>::value), fold_left_impl<S>, ::boost::hana::deleted_implementation >;
  5251.  
  5252.  
  5253.  
  5254.  
  5255.         static_assert(hana::Foldable<S>::value,
  5256.         "hana::fold_left(xs, state, f) requires 'xs' to be Foldable");
  5257.  
  5258.  
  5259.         return FoldLeft::apply(static_cast<Xs&&>(xs),
  5260.                                static_cast<State&&>(state),
  5261.                                static_cast<F&&>(f));
  5262.     }
  5263.  
  5264.     template <typename Xs, typename F>
  5265.     constexpr decltype(auto) fold_left_t::operator()(Xs&& xs, F&& f) const {
  5266.         using S = typename hana::tag_of<Xs>::type;
  5267.         using FoldLeft = ::std::conditional_t< (hana::Foldable<S>::value), fold_left_impl<S>, ::boost::hana::deleted_implementation >;
  5268.  
  5269.  
  5270.  
  5271.  
  5272.         static_assert(hana::Foldable<S>::value,
  5273.         "hana::fold_left(xs, f) requires 'xs' to be Foldable");
  5274.  
  5275.  
  5276.         return FoldLeft::apply(static_cast<Xs&&>(xs), static_cast<F&&>(f));
  5277.     }
  5278.  
  5279.  
  5280.     namespace detail {
  5281.         template <typename F, typename State>
  5282.         struct variadic_foldl1 {
  5283.             F& f;
  5284.             State& state;
  5285.             template <typename ...T>
  5286.             constexpr decltype(auto) operator()(T&& ...t) const {
  5287.                 return detail::variadic::foldl1(
  5288.                     static_cast<F&&>(f),
  5289.                     static_cast<State&&>(state),
  5290.                     static_cast<T&&>(t)...
  5291.                 );
  5292.             }
  5293.         };
  5294.     }
  5295.  
  5296.     template <typename T, bool condition>
  5297.     struct fold_left_impl<T, when<condition>> : default_ {
  5298.  
  5299.         template <typename Xs, typename S, typename F>
  5300.         static constexpr decltype(auto) apply(Xs&& xs, S&& s, F&& f) {
  5301.             return hana::unpack(static_cast<Xs&&>(xs),
  5302.                 detail::variadic_foldl1<F, S>{f, s}
  5303.             );
  5304.         }
  5305.  
  5306.  
  5307.         template <typename Xs, typename F>
  5308.         static constexpr decltype(auto) apply(Xs&& xs, F&& f) {
  5309.             return hana::unpack(static_cast<Xs&&>(xs),
  5310.                 hana::partial(
  5311.                     detail::variadic::foldl1,
  5312.                     static_cast<F&&>(f)
  5313.                 )
  5314.             );
  5315.         }
  5316.     };
  5317. }}
  5318. # 19 "/us/include/boost_1_64_0/boost/hana/concept/foldable.hpp" 2
  5319.  
  5320.  
  5321.  
  5322.  
  5323. namespace boost { namespace hana {
  5324.     template <typename T>
  5325.     struct Foldable
  5326.         : hana::integral_constant<bool,
  5327.             !is_default<fold_left_impl<typename tag_of<T>::type>>::value ||
  5328.             !is_default<unpack_impl<typename tag_of<T>::type>>::value
  5329.         >
  5330.     { };
  5331. }}
  5332. # 16 "/us/include/boost_1_64_0/boost/hana/core/to.hpp" 2
  5333.  
  5334. # 1 "/us/include/boost_1_64_0/boost/hana/concept/sequence.hpp" 1
  5335. # 21 "/us/include/boost_1_64_0/boost/hana/concept/sequence.hpp"
  5336. namespace boost { namespace hana {
  5337.     namespace detail {
  5338.         template <typename S, typename Tag = typename hana::tag_of<S>::type>
  5339.         struct sequence_dispatch
  5340.             : hana::integral_constant<bool,
  5341.                 hana::Sequence<Tag>::value
  5342.             >
  5343.         { };
  5344.  
  5345.         template <typename S>
  5346.         struct sequence_dispatch<S, S>
  5347.             : hana::integral_constant<bool, false>
  5348.         { };
  5349.     }
  5350.  
  5351.  
  5352.     template <typename S, bool condition>
  5353.     struct Sequence<S, when<condition>>
  5354.         : detail::sequence_dispatch<S>
  5355.     { };
  5356.  
  5357. }}
  5358. # 17 "/us/include/boost_1_64_0/boost/hana/core/to.hpp" 2
  5359.  
  5360.  
  5361. # 1 "/us/include/boost_1_64_0/boost/hana/core/common.hpp" 1
  5362. # 13 "/us/include/boost_1_64_0/boost/hana/core/common.hpp"
  5363. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/core/common.hpp" 1
  5364. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/core/common.hpp"
  5365. namespace boost { namespace hana {
  5366. # 70 "/us/include/boost_1_64_0/boost/hana/fwd/core/common.hpp"
  5367.     template <typename T, typename U, typename = void>
  5368.     struct common;
  5369. # 88 "/us/include/boost_1_64_0/boost/hana/fwd/core/common.hpp"
  5370.     template <typename T, typename U, typename = void>
  5371.     struct has_common;
  5372. # 99 "/us/include/boost_1_64_0/boost/hana/fwd/core/common.hpp"
  5373.     template <typename T, typename U>
  5374.     using common_t = typename common<T, U>::type;
  5375. }}
  5376. # 13 "/us/include/boost_1_64_0/boost/hana/core/common.hpp" 2
  5377.  
  5378.  
  5379.  
  5380.  
  5381.  
  5382. # 1 "/us/include/boost_1_64_0/boost/hana/detail/canonical_constant.hpp" 1
  5383. # 16 "/us/include/boost_1_64_0/boost/hana/detail/canonical_constant.hpp"
  5384. namespace boost { namespace hana { namespace detail {
  5385. # 25 "/us/include/boost_1_64_0/boost/hana/detail/canonical_constant.hpp"
  5386.     template <typename T>
  5387.     struct CanonicalConstant {
  5388.         using value_type = T;
  5389.     };
  5390. } }}
  5391.  
  5392.  
  5393.  
  5394.  
  5395.  
  5396. # 1 "/us/include/boost_1_64_0/boost/hana/core/to.hpp" 1
  5397. # 34 "/us/include/boost_1_64_0/boost/hana/detail/canonical_constant.hpp" 2
  5398.  
  5399.  
  5400.  
  5401.  
  5402.  
  5403.  
  5404. namespace boost { namespace hana {
  5405.  
  5406.  
  5407.  
  5408.     template <typename T>
  5409.     struct value_impl<detail::CanonicalConstant<T>> {
  5410.         template <typename X>
  5411.         static constexpr decltype(auto) apply()
  5412.         { return X::value; }
  5413.     };
  5414.  
  5415.     namespace detail {
  5416.         template <typename T, typename X>
  5417.         struct canonical_constant {
  5418.             static constexpr auto value = hana::to<T>(hana::value<X>());
  5419.             using hana_tag = detail::CanonicalConstant<T>;
  5420.         };
  5421.     }
  5422.  
  5423.     template <typename T, typename C>
  5424.     struct to_impl<detail::CanonicalConstant<T>, C, when<
  5425.         hana::Constant<C>::value &&
  5426.         is_convertible<typename C::value_type, T>::value
  5427.     >>
  5428.         : embedding<is_embedded<typename C::value_type, T>::value>
  5429.     {
  5430.         template <typename X>
  5431.         static constexpr detail::canonical_constant<T, X> apply(X const&)
  5432.         { return {}; }
  5433.     };
  5434.  
  5435.  
  5436.  
  5437.  
  5438.     template <typename T>
  5439.     struct IntegralConstant<detail::CanonicalConstant<T>> {
  5440.         static constexpr bool value = std::is_integral<T>::value;
  5441.     };
  5442. }}
  5443. # 18 "/us/include/boost_1_64_0/boost/hana/core/common.hpp" 2
  5444.  
  5445. # 1 "/us/include/boost_1_64_0/boost/hana/detail/std_common_type.hpp" 1
  5446. # 19 "/us/include/boost_1_64_0/boost/hana/detail/std_common_type.hpp"
  5447. namespace boost { namespace hana { namespace detail {
  5448.  
  5449.  
  5450.  
  5451.     template <typename T, typename U, typename = void>
  5452.     struct std_common_type { };
  5453.  
  5454.     template <typename T, typename U>
  5455.     struct std_common_type<T, U, decltype((void)(
  5456.         true ? std::declval<T>() : std::declval<U>()
  5457.     ))> {
  5458.         using type = typename detail::decay<
  5459.             decltype(true ? std::declval<T>() : std::declval<U>())
  5460.         >::type;
  5461.     };
  5462. } }}
  5463. # 19 "/us/include/boost_1_64_0/boost/hana/core/common.hpp" 2
  5464.  
  5465. # 1 "/us/include/boost_1_64_0/boost/hana/detail/void_t.hpp" 1
  5466. # 16 "/us/include/boost_1_64_0/boost/hana/detail/void_t.hpp"
  5467. namespace boost { namespace hana { namespace detail {
  5468.     template <typename ...>
  5469.     using void_t = void;
  5470. } }}
  5471. # 20 "/us/include/boost_1_64_0/boost/hana/core/common.hpp" 2
  5472.  
  5473.  
  5474.  
  5475.  
  5476.  
  5477. namespace boost { namespace hana {
  5478.  
  5479.  
  5480.  
  5481.  
  5482.     template <typename T, typename U, typename>
  5483.     struct common : common<T, U, when<true>> { };
  5484.  
  5485.  
  5486.     template <typename T, typename U, bool condition>
  5487.     struct common<T, U, when<condition>>
  5488.         : detail::std_common_type<T, U>
  5489.     { };
  5490.  
  5491.     template <typename T>
  5492.     struct common<T, T> {
  5493.         using type = T;
  5494.     };
  5495.  
  5496.  
  5497.  
  5498.  
  5499.     template <typename T, typename U, typename>
  5500.     struct has_common : std::false_type { };
  5501.  
  5502.     template <typename T, typename U>
  5503.     struct has_common<T, U, detail::void_t<typename common<T, U>::type>>
  5504.         : std::true_type
  5505.     { };
  5506.  
  5507.  
  5508.  
  5509.  
  5510.     namespace constant_detail {
  5511.  
  5512.  
  5513.  
  5514.  
  5515.  
  5516.  
  5517.  
  5518.         template <typename A, typename B, typename C>
  5519.         struct which {
  5520.             using type = detail::CanonicalConstant<C>;
  5521.         };
  5522.  
  5523.         template <template <typename ...> class A, typename T, typename U, typename C>
  5524.         struct which<A<T>, A<U>, C> {
  5525.             using type = A<C>;
  5526.         };
  5527.     }
  5528.  
  5529.     template <typename A, typename B>
  5530.     struct common<A, B, when<
  5531.         hana::Constant<A>::value &&
  5532.         hana::Constant<B>::value &&
  5533.         has_common<typename A::value_type, typename B::value_type>::value
  5534.     >> {
  5535.         using type = typename constant_detail::which<
  5536.             A, B,
  5537.             typename common<typename A::value_type,
  5538.                             typename B::value_type>::type
  5539.         >::type;
  5540.     };
  5541.  
  5542.     template <typename A, typename B>
  5543.     struct common<A, B, when<
  5544.         hana::Constant<A>::value &&
  5545.         !hana::Constant<B>::value &&
  5546.         has_common<typename A::value_type, B>::value
  5547.     >> {
  5548.         using type = typename common<typename A::value_type, B>::type;
  5549.     };
  5550.  
  5551.     template <typename A, typename B>
  5552.     struct common<A, B, when<
  5553.         !hana::Constant<A>::value &&
  5554.         hana::Constant<B>::value &&
  5555.         has_common<A, typename B::value_type>::value
  5556.     >> {
  5557.         using type = typename common<A, typename B::value_type>::type;
  5558.     };
  5559. }}
  5560. # 19 "/us/include/boost_1_64_0/boost/hana/core/to.hpp" 2
  5561.  
  5562.  
  5563. # 1 "/us/include/boost_1_64_0/boost/hana/core/make.hpp" 1
  5564. # 20 "/us/include/boost_1_64_0/boost/hana/core/make.hpp"
  5565. namespace boost { namespace hana {
  5566.  
  5567.     template <typename Datatype, typename>
  5568.     struct make_impl : make_impl<Datatype, when<true>> { };
  5569.  
  5570.  
  5571.     template <typename Datatype, bool condition>
  5572.     struct make_impl<Datatype, when<condition>> : default_ {
  5573.         template <typename ...X>
  5574.         static constexpr auto make_helper(int, X&& ...x)
  5575.             -> decltype(Datatype(static_cast<X&&>(x)...))
  5576.         { return Datatype(static_cast<X&&>(x)...); }
  5577.  
  5578.         template <typename ...X>
  5579.         static constexpr auto make_helper(long, X&& ...) {
  5580.             static_assert((sizeof...(X), false),
  5581.             "there exists no constructor for the given data type");
  5582.         }
  5583.  
  5584.         template <typename ...X>
  5585.         static constexpr decltype(auto) apply(X&& ...x)
  5586.         { return make_helper(int{}, static_cast<X&&>(x)...); }
  5587.     };
  5588. }}
  5589. # 21 "/us/include/boost_1_64_0/boost/hana/core/to.hpp" 2
  5590.  
  5591. # 1 "/us/include/boost_1_64_0/boost/hana/detail/wrong.hpp" 1
  5592. # 18 "/us/include/boost_1_64_0/boost/hana/detail/wrong.hpp"
  5593. namespace boost { namespace hana { namespace detail {
  5594. # 29 "/us/include/boost_1_64_0/boost/hana/detail/wrong.hpp"
  5595.     template <typename ...>
  5596.     struct wrong : std::false_type { };
  5597. } }}
  5598. # 22 "/us/include/boost_1_64_0/boost/hana/core/to.hpp" 2
  5599.  
  5600.  
  5601.  
  5602.  
  5603.  
  5604.  
  5605.  
  5606.  
  5607. namespace boost { namespace hana {
  5608.  
  5609.  
  5610.  
  5611.  
  5612.     template <typename To, typename From, typename>
  5613.     struct to_impl : to_impl<To, From, when<true>> { };
  5614.  
  5615.  
  5616.     namespace convert_detail {
  5617.         struct no_conversion { };
  5618.  
  5619.         template <typename ...>
  5620.         struct is_valid { static constexpr bool value = true; };
  5621.     }
  5622.  
  5623.     template <typename To, typename From, bool condition>
  5624.     struct to_impl<To, From, when<condition>> : convert_detail::no_conversion {
  5625.         template <typename X>
  5626.         static constexpr auto apply(X const&) {
  5627.             static_assert(detail::wrong<to_impl<To, From>, X>{},
  5628.             "no conversion is available between the provided types");
  5629.         }
  5630.     };
  5631.  
  5632.     template <typename To, typename From>
  5633.     struct to_impl<To, From, when<convert_detail::is_valid<
  5634.         decltype(static_cast<To>(std::declval<From>()))
  5635.     >::value>> {
  5636.         template <typename X>
  5637.         static constexpr To apply(X&& x)
  5638.         { return static_cast<To>(static_cast<X&&>(x)); }
  5639.     };
  5640.  
  5641.     template <typename To>
  5642.     struct to_impl<To, To> : embedding<> {
  5643.         template <typename X>
  5644.         static constexpr X apply(X&& x)
  5645.         { return static_cast<X&&>(x); }
  5646.     };
  5647.  
  5648.  
  5649.     template <typename To>
  5650.     template <typename X>
  5651.     constexpr decltype(auto) to_t<To>::operator()(X&& x) const {
  5652.         using From = typename hana::tag_of<X>::type;
  5653.         return to_impl<To, From>::apply(static_cast<X&&>(x));
  5654.     }
  5655.  
  5656.  
  5657.  
  5658.  
  5659.  
  5660.  
  5661.  
  5662.     template <> struct to_impl<long double, double> : embedding<> { static constexpr long double apply(double x) { return x; } };
  5663.     template <> struct to_impl<long double, float> : embedding<> { static constexpr long double apply(float x) { return x; } };
  5664.     template <> struct to_impl<double, float> : embedding<> { static constexpr double apply(float x) { return x; } };
  5665.  
  5666.     template <> struct to_impl<signed long long, signed long> : embedding<> { static constexpr signed long long apply(signed long x) { return x; } };
  5667.     template <> struct to_impl<signed long long, signed int> : embedding<> { static constexpr signed long long apply(signed int x) { return x; } };
  5668.     template <> struct to_impl<signed long long, signed short> : embedding<> { static constexpr signed long long apply(signed short x) { return x; } };
  5669.     template <> struct to_impl<signed long long, signed char> : embedding<> { static constexpr signed long long apply(signed char x) { return x; } };
  5670.     template <> struct to_impl<signed long, signed int> : embedding<> { static constexpr signed long apply(signed int x) { return x; } };
  5671.     template <> struct to_impl<signed long, signed short> : embedding<> { static constexpr signed long apply(signed short x) { return x; } };
  5672.     template <> struct to_impl<signed long, signed char> : embedding<> { static constexpr signed long apply(signed char x) { return x; } };
  5673.     template <> struct to_impl<signed int, signed short> : embedding<> { static constexpr signed int apply(signed short x) { return x; } };
  5674.     template <> struct to_impl<signed int, signed char> : embedding<> { static constexpr signed int apply(signed char x) { return x; } };
  5675.     template <> struct to_impl<signed short, signed char> : embedding<> { static constexpr signed short apply(signed char x) { return x; } };
  5676.  
  5677.     template <> struct to_impl<unsigned long long, unsigned long> : embedding<> { static constexpr unsigned long long apply(unsigned long x) { return x; } };
  5678.     template <> struct to_impl<unsigned long long, unsigned int> : embedding<> { static constexpr unsigned long long apply(unsigned int x) { return x; } };
  5679.     template <> struct to_impl<unsigned long long, unsigned short> : embedding<> { static constexpr unsigned long long apply(unsigned short x) { return x; } };
  5680.     template <> struct to_impl<unsigned long long, unsigned char> : embedding<> { static constexpr unsigned long long apply(unsigned char x) { return x; } };
  5681.     template <> struct to_impl<unsigned long, unsigned int> : embedding<> { static constexpr unsigned long apply(unsigned int x) { return x; } };
  5682.     template <> struct to_impl<unsigned long, unsigned short> : embedding<> { static constexpr unsigned long apply(unsigned short x) { return x; } };
  5683.     template <> struct to_impl<unsigned long, unsigned char> : embedding<> { static constexpr unsigned long apply(unsigned char x) { return x; } };
  5684.     template <> struct to_impl<unsigned int, unsigned short> : embedding<> { static constexpr unsigned int apply(unsigned short x) { return x; } };
  5685.     template <> struct to_impl<unsigned int, unsigned char> : embedding<> { static constexpr unsigned int apply(unsigned char x) { return x; } };
  5686.     template <> struct to_impl<unsigned short, unsigned char> : embedding<> { static constexpr unsigned short apply(unsigned char x) { return x; } };
  5687.  
  5688.  
  5689.     namespace detail {
  5690.         template <typename T>
  5691.         struct copy_char_signedness {
  5692.             using type = typename std::conditional<std::is_signed<char>::value,
  5693.                 std::make_signed<T>, std::make_unsigned<T>
  5694.             >::type::type;
  5695.         };
  5696.     }
  5697. # 134 "/us/include/boost_1_64_0/boost/hana/core/to.hpp"
  5698.     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; } };
  5699.     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; } };
  5700.     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; } };
  5701.     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; } };
  5702.  
  5703.  
  5704.     template <typename T>
  5705.     struct to_impl<T*, decltype(nullptr)> : embedding<> {
  5706.         static constexpr T* apply(decltype(nullptr)) { return nullptr; }
  5707.     };
  5708.  
  5709.  
  5710.  
  5711.  
  5712.     template <typename From, typename To, typename>
  5713.     struct is_convertible : std::true_type { };
  5714.  
  5715.     template <typename From, typename To>
  5716.     struct is_convertible<From, To, decltype((void)
  5717.         static_cast<convert_detail::no_conversion>(*(to_impl<To, From>*)0)
  5718.     )> : std::false_type { };
  5719.  
  5720.  
  5721.  
  5722.  
  5723.     template <typename From, typename To, typename>
  5724.     struct is_embedded : std::false_type { };
  5725.  
  5726.     template <typename From, typename To>
  5727.     struct is_embedded<From, To, decltype((void)
  5728.         static_cast<embedding<true>>(*(to_impl<To, From>*)0)
  5729.     )> : std::true_type { };
  5730.  
  5731.  
  5732.  
  5733.  
  5734.     template <typename To, typename From>
  5735.     struct to_impl<To, From, when<
  5736.         hana::Constant<From>::value &&
  5737.         is_convertible<typename From::value_type, To>::value
  5738.     >> : embedding<is_embedded<typename From::value_type, To>::value> {
  5739.         template <typename X>
  5740.         static constexpr decltype(auto) apply(X const&)
  5741.         { return hana::to<To>(hana::value<X>()); }
  5742.     };
  5743.  
  5744.  
  5745.  
  5746.  
  5747.     template <typename S, typename F>
  5748.     struct to_impl<S, F, when<
  5749.         hana::Sequence<S>::value &&
  5750.         hana::Foldable<F>::value
  5751.     >> : embedding<Sequence<F>::value> {
  5752.         template <typename Xs>
  5753.         static constexpr decltype(auto) apply(Xs&& xs)
  5754.         { return hana::unpack(static_cast<Xs&&>(xs), hana::make<S>); }
  5755.     };
  5756. }}
  5757. # 17 "/us/include/boost_1_64_0/boost/hana/bool.hpp" 2
  5758.  
  5759.  
  5760. # 1 "/us/include/boost_1_64_0/boost/hana/detail/operators/arithmetic.hpp" 1
  5761. # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/arithmetic.hpp"
  5762. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/div.hpp" 1
  5763. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/div.hpp"
  5764. namespace boost { namespace hana {
  5765. # 47 "/us/include/boost_1_64_0/boost/hana/fwd/div.hpp"
  5766.     template <typename T, typename U, typename = void>
  5767.     struct div_impl : div_impl<T, U, when<true>> { };
  5768.  
  5769.     struct div_t {
  5770.         template <typename X, typename Y>
  5771.         constexpr decltype(auto) operator()(X&& x, Y&& y) const;
  5772.     };
  5773.  
  5774.     constexpr div_t div{};
  5775.  
  5776. }}
  5777. # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/arithmetic.hpp" 2
  5778.  
  5779. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/minus.hpp" 1
  5780. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/minus.hpp"
  5781. namespace boost { namespace hana {
  5782. # 55 "/us/include/boost_1_64_0/boost/hana/fwd/minus.hpp"
  5783.     template <typename T, typename U, typename = void>
  5784.     struct minus_impl : minus_impl<T, U, when<true>> { };
  5785.  
  5786.     struct minus_t {
  5787.         template <typename X, typename Y>
  5788.         constexpr decltype(auto) operator()(X&& x, Y&& y) const;
  5789.     };
  5790.  
  5791.     constexpr minus_t minus{};
  5792.  
  5793. }}
  5794. # 16 "/us/include/boost_1_64_0/boost/hana/detail/operators/arithmetic.hpp" 2
  5795.  
  5796. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/mod.hpp" 1
  5797. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/mod.hpp"
  5798. namespace boost { namespace hana {
  5799. # 50 "/us/include/boost_1_64_0/boost/hana/fwd/mod.hpp"
  5800.     template <typename T, typename U, typename = void>
  5801.     struct mod_impl : mod_impl<T, U, when<true>> { };
  5802.  
  5803.     struct mod_t {
  5804.         template <typename X, typename Y>
  5805.         constexpr decltype(auto) operator()(X&& x, Y&& y) const;
  5806.     };
  5807.  
  5808.     constexpr mod_t mod{};
  5809.  
  5810. }}
  5811. # 17 "/us/include/boost_1_64_0/boost/hana/detail/operators/arithmetic.hpp" 2
  5812.  
  5813. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/mult.hpp" 1
  5814. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/mult.hpp"
  5815. namespace boost { namespace hana {
  5816. # 51 "/us/include/boost_1_64_0/boost/hana/fwd/mult.hpp"
  5817.     template <typename T, typename U, typename = void>
  5818.     struct mult_impl : mult_impl<T, U, when<true>> { };
  5819.  
  5820.     struct mult_t {
  5821.         template <typename X, typename Y>
  5822.         constexpr decltype(auto) operator()(X&& x, Y&& y) const;
  5823.     };
  5824.  
  5825.     constexpr mult_t mult{};
  5826.  
  5827. }}
  5828. # 18 "/us/include/boost_1_64_0/boost/hana/detail/operators/arithmetic.hpp" 2
  5829.  
  5830. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/negate.hpp" 1
  5831. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/negate.hpp"
  5832. namespace boost { namespace hana {
  5833. # 30 "/us/include/boost_1_64_0/boost/hana/fwd/negate.hpp"
  5834.     template <typename G, typename = void>
  5835.     struct negate_impl : negate_impl<G, when<true>> { };
  5836.  
  5837.     struct negate_t {
  5838.         template <typename X>
  5839.         constexpr decltype(auto) operator()(X&& x) const;
  5840.     };
  5841.  
  5842.     constexpr negate_t negate{};
  5843.  
  5844. }}
  5845. # 19 "/us/include/boost_1_64_0/boost/hana/detail/operators/arithmetic.hpp" 2
  5846.  
  5847. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/plus.hpp" 1
  5848. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/plus.hpp"
  5849. namespace boost { namespace hana {
  5850. # 51 "/us/include/boost_1_64_0/boost/hana/fwd/plus.hpp"
  5851.     template <typename T, typename U, typename = void>
  5852.     struct plus_impl : plus_impl<T, U, when<true>> { };
  5853.  
  5854.     struct plus_t {
  5855.         template <typename X, typename Y>
  5856.         constexpr decltype(auto) operator()(X&& x, Y&& y) const;
  5857.     };
  5858.  
  5859.     constexpr plus_t plus{};
  5860.  
  5861. }}
  5862. # 20 "/us/include/boost_1_64_0/boost/hana/detail/operators/arithmetic.hpp" 2
  5863.  
  5864.  
  5865.  
  5866.  
  5867.  
  5868. namespace boost { namespace hana { namespace detail {
  5869.     template <typename Tag>
  5870.     struct arithmetic_operators {
  5871.         static constexpr bool value = false;
  5872.     };
  5873.  
  5874.     namespace operators {
  5875.         template <typename X, typename Y, typename = typename std::enable_if<
  5876.             detail::arithmetic_operators<typename hana::tag_of<X>::type>::value ||
  5877.             detail::arithmetic_operators<typename hana::tag_of<Y>::type>::value
  5878.         >::type>
  5879.         constexpr auto operator+(X&& x, Y&& y)
  5880.         { return hana::plus(static_cast<X&&>(x), static_cast<Y&&>(y)); }
  5881.  
  5882.  
  5883.         template <typename X, typename Y, typename = typename std::enable_if<
  5884.             detail::arithmetic_operators<typename hana::tag_of<X>::type>::value ||
  5885.             detail::arithmetic_operators<typename hana::tag_of<Y>::type>::value
  5886.         >::type>
  5887.         constexpr auto operator-(X&& x, Y&& y)
  5888.         { return hana::minus(static_cast<X&&>(x), static_cast<Y&&>(y)); }
  5889.  
  5890.         template <typename X, typename = typename std::enable_if<
  5891.             detail::arithmetic_operators<typename hana::tag_of<X>::type>::value
  5892.         >::type>
  5893.         constexpr auto operator-(X&& x)
  5894.         { return hana::negate(static_cast<X&&>(x)); }
  5895.  
  5896.  
  5897.         template <typename X, typename Y, typename = typename std::enable_if<
  5898.             detail::arithmetic_operators<typename hana::tag_of<X>::type>::value ||
  5899.             detail::arithmetic_operators<typename hana::tag_of<Y>::type>::value
  5900.         >::type>
  5901.         constexpr auto operator*(X&& x, Y&& y)
  5902.         { return hana::mult(static_cast<X&&>(x), static_cast<Y&&>(y)); }
  5903.  
  5904.  
  5905.         template <typename X, typename Y, typename = typename std::enable_if<
  5906.             detail::arithmetic_operators<typename hana::tag_of<X>::type>::value ||
  5907.             detail::arithmetic_operators<typename hana::tag_of<Y>::type>::value
  5908.         >::type>
  5909.         constexpr auto operator/(X&& x, Y&& y)
  5910.         { return hana::div(static_cast<X&&>(x), static_cast<Y&&>(y)); }
  5911.  
  5912.         template <typename X, typename Y, typename = typename std::enable_if<
  5913.             detail::arithmetic_operators<typename hana::tag_of<X>::type>::value ||
  5914.             detail::arithmetic_operators<typename hana::tag_of<Y>::type>::value
  5915.         >::type>
  5916.         constexpr auto operator%(X&& x, Y&& y)
  5917.         { return hana::mod(static_cast<X&&>(x), static_cast<Y&&>(y)); }
  5918.     }
  5919. } }}
  5920. # 19 "/us/include/boost_1_64_0/boost/hana/bool.hpp" 2
  5921.  
  5922.  
  5923. # 1 "/us/include/boost_1_64_0/boost/hana/detail/operators/logical.hpp" 1
  5924. # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/logical.hpp"
  5925. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/and.hpp" 1
  5926. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/and.hpp"
  5927. namespace boost { namespace hana {
  5928. # 38 "/us/include/boost_1_64_0/boost/hana/fwd/and.hpp"
  5929.     template <typename L, typename = void>
  5930.     struct and_impl : and_impl<L, when<true>> { };
  5931.  
  5932.     struct and_t {
  5933.         template <typename X, typename Y>
  5934.         constexpr decltype(auto) operator()(X&& x, Y&& y) const;
  5935.  
  5936.         template <typename X, typename ...Y>
  5937.         constexpr decltype(auto) operator()(X&& x, Y&& ...y) const;
  5938.     };
  5939.  
  5940.     constexpr and_t and_{};
  5941.  
  5942. }}
  5943. # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/logical.hpp" 2
  5944.  
  5945. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/not.hpp" 1
  5946. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/not.hpp"
  5947. namespace boost { namespace hana {
  5948. # 35 "/us/include/boost_1_64_0/boost/hana/fwd/not.hpp"
  5949.     template <typename L, typename = void>
  5950.     struct not_impl : not_impl<L, when<true>> { };
  5951.  
  5952.     struct not_t {
  5953.         template <typename X>
  5954.         constexpr decltype(auto) operator()(X&& x) const;
  5955.     };
  5956.  
  5957.     constexpr not_t not_{};
  5958.  
  5959. }}
  5960. # 16 "/us/include/boost_1_64_0/boost/hana/detail/operators/logical.hpp" 2
  5961.  
  5962. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/or.hpp" 1
  5963. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/or.hpp"
  5964. namespace boost { namespace hana {
  5965. # 38 "/us/include/boost_1_64_0/boost/hana/fwd/or.hpp"
  5966.     template <typename L, typename = void>
  5967.     struct or_impl : or_impl<L, when<true>> { };
  5968.  
  5969.     struct or_t {
  5970.         template <typename X, typename Y>
  5971.         constexpr decltype(auto) operator()(X&& x, Y&& y) const;
  5972.  
  5973.         template <typename X, typename ...Y>
  5974.         constexpr decltype(auto) operator()(X&& x, Y&& ...y) const;
  5975.     };
  5976.  
  5977.     constexpr or_t or_{};
  5978.  
  5979. }}
  5980. # 17 "/us/include/boost_1_64_0/boost/hana/detail/operators/logical.hpp" 2
  5981.  
  5982.  
  5983.  
  5984.  
  5985.  
  5986. namespace boost { namespace hana { namespace detail {
  5987.     template <typename Tag>
  5988.     struct logical_operators {
  5989.         static constexpr bool value = false;
  5990.     };
  5991.  
  5992.     namespace operators {
  5993.         template <typename X, typename Y, typename = typename std::enable_if<
  5994.             detail::logical_operators<typename hana::tag_of<X>::type>::value ||
  5995.             detail::logical_operators<typename hana::tag_of<Y>::type>::value
  5996.         >::type>
  5997.         constexpr auto operator||(X&& x, Y&& y)
  5998.         { return hana::or_(static_cast<X&&>(x), static_cast<Y&&>(y)); }
  5999.  
  6000.         template <typename X, typename Y, typename = typename std::enable_if<
  6001.             detail::logical_operators<typename hana::tag_of<X>::type>::value ||
  6002.             detail::logical_operators<typename hana::tag_of<Y>::type>::value
  6003.         >::type>
  6004.         constexpr auto operator&&(X&& x, Y&& y)
  6005.         { return hana::and_(static_cast<X&&>(x), static_cast<Y&&>(y)); }
  6006.  
  6007.         template <typename X, typename = typename std::enable_if<
  6008.             detail::logical_operators<typename hana::tag_of<X>::type>::value
  6009.         >::type>
  6010.         constexpr auto operator!(X&& x)
  6011.         { return hana::not_(static_cast<X&&>(x)); }
  6012.     }
  6013. } }}
  6014. # 21 "/us/include/boost_1_64_0/boost/hana/bool.hpp" 2
  6015.  
  6016.  
  6017. # 1 "/us/include/boost_1_64_0/boost/hana/eval.hpp" 1
  6018. # 13 "/us/include/boost_1_64_0/boost/hana/eval.hpp"
  6019. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/eval.hpp" 1
  6020. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/eval.hpp"
  6021. namespace boost { namespace hana {
  6022. # 46 "/us/include/boost_1_64_0/boost/hana/fwd/eval.hpp"
  6023.     template <typename T, typename = void>
  6024.     struct eval_impl : eval_impl<T, when<true>> { };
  6025.  
  6026.     struct eval_t {
  6027.         template <typename Expr>
  6028.         constexpr decltype(auto) operator()(Expr&& expr) const;
  6029.     };
  6030.  
  6031.     constexpr eval_t eval{};
  6032.  
  6033. }}
  6034. # 13 "/us/include/boost_1_64_0/boost/hana/eval.hpp" 2
  6035.  
  6036.  
  6037.  
  6038.  
  6039.  
  6040. # 1 "/us/include/boost_1_64_0/boost/hana/functional/id.hpp" 1
  6041. # 16 "/us/include/boost_1_64_0/boost/hana/functional/id.hpp"
  6042. namespace boost { namespace hana {
  6043. # 27 "/us/include/boost_1_64_0/boost/hana/functional/id.hpp"
  6044.     struct id_t {
  6045.         template <typename T>
  6046.         constexpr T operator()(T&& t) const {
  6047.             return static_cast<T&&>(t);
  6048.         }
  6049.     };
  6050.  
  6051.     constexpr id_t id{};
  6052.  
  6053. }}
  6054. # 18 "/us/include/boost_1_64_0/boost/hana/eval.hpp" 2
  6055.  
  6056.  
  6057.  
  6058. namespace boost { namespace hana {
  6059.  
  6060.     template <typename Expr>
  6061.     constexpr decltype(auto) eval_t::operator()(Expr&& expr) const {
  6062.         return eval_impl<typename hana::tag_of<Expr>::type>::apply(
  6063.             static_cast<Expr&&>(expr)
  6064.         );
  6065.     }
  6066.  
  6067.  
  6068.     template <typename T, bool condition>
  6069.     struct eval_impl<T, when<condition>> : default_ {
  6070.         template <typename Expr>
  6071.         static constexpr auto eval_helper(Expr&& expr, int)
  6072.             -> decltype(static_cast<Expr&&>(expr)())
  6073.         { return static_cast<Expr&&>(expr)(); }
  6074.  
  6075.         template <typename Expr>
  6076.         static constexpr auto eval_helper(Expr&& expr, long)
  6077.             -> decltype(static_cast<Expr&&>(expr)(hana::id))
  6078.         { return static_cast<Expr&&>(expr)(hana::id); }
  6079.  
  6080.         template <typename Expr>
  6081.         static constexpr auto eval_helper(Expr&&, ...) {
  6082.             static_assert(detail::wrong<Expr>{},
  6083.             "hana::eval(expr) requires the expression to be a hana::lazy, "
  6084.             "a nullary Callable or a unary Callable that may be "
  6085.             "called with hana::id");
  6086.         }
  6087.  
  6088.         template <typename Expr>
  6089.         static constexpr decltype(auto) apply(Expr&& expr)
  6090.         { return eval_helper(static_cast<Expr&&>(expr), int{}); }
  6091.     };
  6092. }}
  6093. # 23 "/us/include/boost_1_64_0/boost/hana/bool.hpp" 2
  6094. # 34 "/us/include/boost_1_64_0/boost/hana/bool.hpp"
  6095. namespace boost { namespace hana {
  6096.  
  6097.  
  6098.  
  6099.  
  6100.     namespace ic_detail {
  6101.         template <typename T, T N, typename = std::make_integer_sequence<T, N>>
  6102.         struct go;
  6103.  
  6104.         template <typename T, T N, T ...i>
  6105.         struct go<T, N, std::integer_sequence<T, i...>> {
  6106.             using swallow = T[];
  6107.  
  6108.             template <typename F>
  6109.             static constexpr void with_index(F&& f)
  6110.             { (void)swallow{T{}, ((void)f(integral_constant<T, i>{}), i)...}; }
  6111.  
  6112.             template <typename F>
  6113.             static constexpr void without_index(F&& f)
  6114.             { (void)swallow{T{}, ((void)f(), i)...}; }
  6115.         };
  6116.  
  6117.         template <typename T, T v>
  6118.         template <typename F>
  6119.         constexpr void with_index_t<T, v>::operator()(F&& f) const
  6120.         { go<T, ((void)sizeof(&f), v)>::with_index(static_cast<F&&>(f)); }
  6121.  
  6122.         template <typename T, T v>
  6123.         template <typename F>
  6124.         constexpr void times_t<T, v>::operator()(F&& f) const
  6125.         { go<T, ((void)sizeof(&f), v)>::without_index(static_cast<F&&>(f)); }
  6126.  
  6127.  
  6128.         template <typename T, T v>
  6129.         constexpr with_index_t<T, v> times_t<T, v>::with_index;
  6130.     }
  6131.  
  6132.  
  6133.     template <typename T, T v>
  6134.     constexpr ic_detail::times_t<T, v> integral_constant<T, v>::times;
  6135.  
  6136.     template <typename T, T v>
  6137.     struct tag_of<integral_constant<T, v>> {
  6138.         using type = integral_constant_tag<T>;
  6139.     };
  6140.  
  6141.  
  6142.  
  6143.  
  6144.  
  6145.     namespace detail {
  6146.         template <typename T>
  6147.         struct comparable_operators<integral_constant_tag<T>> {
  6148.             static constexpr bool value = true;
  6149.         };
  6150.         template <typename T>
  6151.         struct orderable_operators<integral_constant_tag<T>> {
  6152.             static constexpr bool value = true;
  6153.         };
  6154.         template <typename T>
  6155.         struct arithmetic_operators<integral_constant_tag<T>> {
  6156.             static constexpr bool value = true;
  6157.         };
  6158.         template <typename T>
  6159.         struct logical_operators<integral_constant_tag<T>> {
  6160.             static constexpr bool value = true;
  6161.         };
  6162.     }
  6163. # 118 "/us/include/boost_1_64_0/boost/hana/bool.hpp"
  6164.     template <typename U, U u> constexpr integral_constant<decltype(+ u), (+ u)> operator +(integral_constant<U, u>) { return {}; }
  6165.  
  6166.  
  6167.     template <typename U, U u> constexpr integral_constant<decltype(~ u), (~ u)> operator ~(integral_constant<U, u>) { return {}; }
  6168.     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 {}; }
  6169.     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 {}; }
  6170.     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 {}; }
  6171.     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 {}; }
  6172.     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 {}; }
  6173. # 135 "/us/include/boost_1_64_0/boost/hana/bool.hpp"
  6174.     namespace ic_detail {
  6175.  
  6176.         constexpr int to_int(char c) {
  6177.             int result = 0;
  6178.  
  6179.             if (c >= 'A' && c <= 'F') {
  6180.                 result = static_cast<int>(c) - static_cast<int>('A') + 10;
  6181.             }
  6182.             else if (c >= 'a' && c <= 'f') {
  6183.                 result = static_cast<int>(c) - static_cast<int>('a') + 10;
  6184.             }
  6185.             else {
  6186.                 result = static_cast<int>(c) - static_cast<int>('0');
  6187.             }
  6188.  
  6189.             return result;
  6190.         }
  6191.  
  6192.         template<std::size_t N>
  6193.         constexpr long long parse(const char (&arr)[N]) {
  6194.             long long base = 10;
  6195.             std::size_t offset = 0;
  6196.  
  6197.             if (N > 2) {
  6198.                 bool starts_with_zero = arr[0] == '0';
  6199.                 bool is_hex = starts_with_zero && arr[1] == 'x';
  6200.                 bool is_binary = starts_with_zero && arr[1] == 'b';
  6201.  
  6202.                 if (is_hex) {
  6203.  
  6204.                     base = 16;
  6205.                     offset = 2;
  6206.                 }
  6207.                 else if (is_binary) {
  6208.  
  6209.                     base = 2;
  6210.                     offset = 2;
  6211.                 }
  6212.                 else if (starts_with_zero) {
  6213.  
  6214.                     base = 8;
  6215.                     offset = 1;
  6216.                 }
  6217.             }
  6218.  
  6219.             long long number = 0;
  6220.             long long multiplier = 1;
  6221.  
  6222.             for (std::size_t i = 0; i < N - offset; ++i) {
  6223.                 char c = arr[N - 1 - i];
  6224.                 number += to_int(c) * multiplier;
  6225.                 multiplier *= base;
  6226.             }
  6227.  
  6228.             return number;
  6229.         }
  6230.     }
  6231.  
  6232.     namespace literals {
  6233.         template <char ...c>
  6234.         constexpr auto operator"" _c() {
  6235.             return hana::llong<ic_detail::parse<sizeof...(c)>({c...})>{};
  6236.         }
  6237.     }
  6238.  
  6239.  
  6240.  
  6241.  
  6242.     template <typename T>
  6243.     struct IntegralConstant<integral_constant_tag<T>> {
  6244.         static constexpr bool value = true;
  6245.     };
  6246.  
  6247.     template <typename T, typename C>
  6248.     struct to_impl<integral_constant_tag<T>, C, when<hana::IntegralConstant<C>::value>>
  6249.         : embedding<is_embedded<typename C::value_type, T>::value>
  6250.     {
  6251.         template <typename N>
  6252.         static constexpr auto apply(N const&)
  6253.         { return integral_constant<T, N::value>{}; }
  6254.     };
  6255.  
  6256.  
  6257.  
  6258.  
  6259.     template <typename T>
  6260.     struct eval_if_impl<integral_constant_tag<T>> {
  6261.         template <typename Cond, typename Then, typename Else>
  6262.         static constexpr decltype(auto)
  6263.         apply(Cond const&, Then&& t, Else&& e) {
  6264.             constexpr bool cond = static_cast<bool>(Cond::value);
  6265.             return eval_if_impl::apply(hana::bool_<cond>{},
  6266.                                        static_cast<Then&&>(t),
  6267.                                        static_cast<Else&&>(e));
  6268.         }
  6269.  
  6270.         template <typename Then, typename Else>
  6271.         static constexpr decltype(auto)
  6272.         apply(hana::true_ const&, Then&& t, Else&&)
  6273.         { return hana::eval(static_cast<Then&&>(t)); }
  6274.  
  6275.         template <typename Then, typename Else>
  6276.         static constexpr decltype(auto)
  6277.         apply(hana::false_ const&, Then&&, Else&& e)
  6278.         { return hana::eval(static_cast<Else&&>(e)); }
  6279.     };
  6280.  
  6281.     template <typename T>
  6282.     struct if_impl<integral_constant_tag<T>> {
  6283.         template <typename Cond, typename Then, typename Else>
  6284.         static constexpr decltype(auto)
  6285.         apply(Cond const&, Then&& t, Else&& e) {
  6286.             constexpr bool cond = static_cast<bool>(Cond::value);
  6287.             return if_impl::apply(hana::bool_<cond>{},
  6288.                                   static_cast<Then&&>(t),
  6289.                                   static_cast<Else&&>(e));
  6290.         }
  6291.  
  6292.  
  6293.  
  6294.  
  6295.  
  6296.         template <typename Then, typename Else>
  6297.         static constexpr auto
  6298.         apply(hana::true_ const&, Then&& t, Else&&)
  6299.         { return static_cast<Then&&>(t); }
  6300.  
  6301.         template <typename Then, typename Else>
  6302.         static constexpr auto
  6303.         apply(hana::false_ const&, Then&&, Else&& e)
  6304.         { return static_cast<Else&&>(e); }
  6305.     };
  6306. }}
  6307. # 15 "/us/include/boost_1_64_0/boost/hana/eval_if.hpp" 2
  6308.  
  6309.  
  6310. # 1 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp" 1
  6311. # 17 "/us/include/boost_1_64_0/boost/hana/eval_if.hpp" 2
  6312.  
  6313.  
  6314.  
  6315.  
  6316. # 1 "/us/include/boost_1_64_0/boost/hana/if.hpp" 1
  6317. # 21 "/us/include/boost_1_64_0/boost/hana/eval_if.hpp" 2
  6318.  
  6319.  
  6320.  
  6321.  
  6322.  
  6323. namespace boost { namespace hana {
  6324.  
  6325.     template <typename Cond, typename Then, typename Else>
  6326.     constexpr decltype(auto) eval_if_t::operator()(Cond&& cond, Then&& then_, Else&& else_) const {
  6327.         using Bool = typename hana::tag_of<Cond>::type;
  6328.         using EvalIf = ::std::conditional_t< (hana::Logical<Bool>::value), eval_if_impl<Bool>, ::boost::hana::deleted_implementation >;
  6329.  
  6330.  
  6331.  
  6332.  
  6333.         static_assert(hana::Logical<Bool>::value,
  6334.         "hana::eval_if(cond, then, else) requires 'cond' to be a Logical");
  6335.  
  6336.  
  6337.         return EvalIf::apply(static_cast<Cond&&>(cond),
  6338.                              static_cast<Then&&>(then_),
  6339.                              static_cast<Else&&>(else_));
  6340.     }
  6341.  
  6342.  
  6343.     template <typename L, bool condition>
  6344.     struct eval_if_impl<L, when<condition>> : default_ {
  6345.         template <typename ...Args>
  6346.         static constexpr auto apply(Args&& ...) = delete;
  6347.     };
  6348.  
  6349.  
  6350.  
  6351.  
  6352.     template <typename L>
  6353.     struct eval_if_impl<L, when<std::is_arithmetic<L>::value>> {
  6354.         template <typename Cond, typename T, typename E>
  6355.         static constexpr auto apply(Cond const& cond, T&& t, E&& e) {
  6356.             return cond ? hana::eval(static_cast<T&&>(t))
  6357.                         : hana::eval(static_cast<E&&>(e));
  6358.         }
  6359.     };
  6360.  
  6361.  
  6362.  
  6363.  
  6364.     template <typename C>
  6365.     struct eval_if_impl<C, when<
  6366.         hana::Constant<C>::value &&
  6367.         Logical<typename C::value_type>::value
  6368.     >> {
  6369.         template <typename Then, typename Else>
  6370.         static constexpr decltype(auto)
  6371.         eval_if_helper(hana::true_, Then&& t, Else&&)
  6372.         { return hana::eval(static_cast<Then&&>(t)); }
  6373.  
  6374.         template <typename Then, typename Else>
  6375.         static constexpr decltype(auto)
  6376.         eval_if_helper(hana::false_, Then&&, Else&& e)
  6377.         { return hana::eval(static_cast<Else&&>(e)); }
  6378.  
  6379.         template <typename Cond, typename Then, typename Else>
  6380.         static constexpr decltype(auto) apply(Cond const&, Then&& t, Else&& e) {
  6381.             constexpr auto cond = hana::value<Cond>();
  6382.             constexpr bool truth_value = hana::if_(cond, true, false);
  6383.             return eval_if_helper(hana::bool_<truth_value>{},
  6384.                                   static_cast<Then&&>(t),
  6385.                                   static_cast<Else&&>(e));
  6386.         }
  6387.     };
  6388. }}
  6389. # 19 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp" 2
  6390.  
  6391. # 1 "/us/include/boost_1_64_0/boost/hana/not.hpp" 1
  6392. # 16 "/us/include/boost_1_64_0/boost/hana/not.hpp"
  6393. # 1 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp" 1
  6394. # 16 "/us/include/boost_1_64_0/boost/hana/not.hpp" 2
  6395. # 25 "/us/include/boost_1_64_0/boost/hana/not.hpp"
  6396. namespace boost { namespace hana {
  6397.  
  6398.     template <typename X>
  6399.     constexpr decltype(auto) not_t::operator()(X&& x) const {
  6400.         using Bool = typename hana::tag_of<X>::type;
  6401.         using Not = ::std::conditional_t< (hana::Logical<Bool>::value), hana::not_impl<Bool>, ::boost::hana::deleted_implementation >;
  6402.  
  6403.  
  6404.  
  6405.  
  6406.         static_assert(hana::Logical<Bool>::value,
  6407.         "hana::not_(cond) requires 'cond' to be a Logical");
  6408.  
  6409.  
  6410.         return Not::apply(static_cast<X&&>(x));
  6411.     }
  6412.  
  6413.  
  6414.     template <typename L, bool condition>
  6415.     struct not_impl<L, when<condition>> : hana::default_ {
  6416.         template <typename ...Args>
  6417.         static constexpr auto apply(Args&& ...) = delete;
  6418.     };
  6419.  
  6420.     template <typename L>
  6421.     struct not_impl<L, hana::when<std::is_arithmetic<L>::value>> {
  6422.         template <typename Cond>
  6423.         static constexpr Cond apply(Cond const& cond)
  6424.         { return static_cast<Cond>(cond ? false : true); }
  6425.     };
  6426.  
  6427.     namespace detail {
  6428.         template <typename C, typename X>
  6429.         struct constant_from_not {
  6430.             static constexpr auto value = hana::not_(hana::value<X>());
  6431.             using hana_tag = detail::CanonicalConstant<typename C::value_type>;
  6432.         };
  6433.     }
  6434.  
  6435.     template <typename C>
  6436.     struct not_impl<C, hana::when<
  6437.         hana::Constant<C>::value &&
  6438.         hana::Logical<typename C::value_type>::value
  6439.     >> {
  6440.         template <typename Cond>
  6441.         static constexpr auto apply(Cond const&)
  6442.         { return hana::to<C>(detail::constant_from_not<C, Cond>{}); }
  6443.     };
  6444. }}
  6445. # 20 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp" 2
  6446.  
  6447. # 1 "/us/include/boost_1_64_0/boost/hana/while.hpp" 1
  6448. # 13 "/us/include/boost_1_64_0/boost/hana/while.hpp"
  6449. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/while.hpp" 1
  6450. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/while.hpp"
  6451. namespace boost { namespace hana {
  6452. # 59 "/us/include/boost_1_64_0/boost/hana/fwd/while.hpp"
  6453.     template <typename L, typename = void>
  6454.     struct while_impl : while_impl<L, when<true>> { };
  6455.  
  6456.     struct while_t {
  6457.         template <typename Pred, typename State, typename F>
  6458.         constexpr decltype(auto) operator()(Pred&& pred, State&& state, F&& f) const;
  6459.     };
  6460.  
  6461.     constexpr while_t while_{};
  6462.  
  6463. }}
  6464. # 13 "/us/include/boost_1_64_0/boost/hana/while.hpp" 2
  6465.  
  6466.  
  6467.  
  6468.  
  6469.  
  6470. # 1 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp" 1
  6471. # 18 "/us/include/boost_1_64_0/boost/hana/while.hpp" 2
  6472. # 27 "/us/include/boost_1_64_0/boost/hana/while.hpp"
  6473. namespace boost { namespace hana {
  6474.  
  6475.     template <typename Pred, typename State, typename F>
  6476.     constexpr decltype(auto) while_t::operator()(Pred&& pred, State&& state, F&& f) const {
  6477.         using Cond = decltype(pred(state));
  6478.         using Bool = typename hana::tag_of<Cond>::type;
  6479.         using While = ::std::conditional_t< (hana::Logical<Bool>::value), while_impl<Bool>, ::boost::hana::deleted_implementation >;
  6480.  
  6481.  
  6482.  
  6483.  
  6484.         static_assert(hana::Logical<Bool>::value,
  6485.         "hana::while_(pred, state, f) requires 'pred(state)' to be a Logical");
  6486.  
  6487.  
  6488.         return While::apply(static_cast<Pred&&>(pred),
  6489.                             static_cast<State&&>(state),
  6490.                             static_cast<F&&>(f));
  6491.     }
  6492.  
  6493.  
  6494.     template <typename L, bool condition>
  6495.     struct while_impl<L, hana::when<condition>> : hana::default_ {
  6496.         template <typename ...Args>
  6497.         static constexpr auto apply(Args&& ...) = delete;
  6498.     };
  6499.  
  6500.     template <typename L>
  6501.     struct while_impl<L, hana::when<std::is_arithmetic<L>::value>> {
  6502.         template <typename Pred, typename State, typename F>
  6503.         static auto apply(Pred&& pred, State&& state, F&& f)
  6504.             -> decltype(
  6505.                 true ? f(static_cast<State&&>(state))
  6506.                      : static_cast<State&&>(state)
  6507.             )
  6508.         {
  6509.             if (pred(state)) {
  6510.                 decltype(auto) r = f(static_cast<State&&>(state));
  6511.                 return hana::while_(static_cast<Pred&&>(pred),
  6512.                                     static_cast<decltype(r)&&>(r),
  6513.                                     static_cast<F&&>(f));
  6514.             }
  6515.             else {
  6516.                 return static_cast<State&&>(state);
  6517.             }
  6518.         }
  6519.     };
  6520.  
  6521.     template <typename C>
  6522.     struct while_impl<C, hana::when<
  6523.         hana::Constant<C>::value &&
  6524.         hana::Logical<typename C::value_type>::value
  6525.     >> {
  6526.         template <typename Pred, typename State, typename F>
  6527.         static constexpr State
  6528.         while_helper(hana::false_, Pred&&, State&& state, F&&) {
  6529.             return static_cast<State&&>(state);
  6530.         }
  6531.  
  6532.         template <typename Pred, typename State, typename F>
  6533.         static constexpr decltype(auto)
  6534.         while_helper(hana::true_, Pred&& pred, State&& state, F&& f) {
  6535.             decltype(auto) r = f(static_cast<State&&>(state));
  6536.             return hana::while_(static_cast<Pred&&>(pred),
  6537.                                 static_cast<decltype(r)&&>(r),
  6538.                                 static_cast<F&&>(f));
  6539.         }
  6540.  
  6541.         template <typename Pred, typename State, typename F>
  6542.         static constexpr decltype(auto)
  6543.         apply(Pred&& pred, State&& state, F&& f) {
  6544. # 106 "/us/include/boost_1_64_0/boost/hana/while.hpp"
  6545.             auto cond_ = pred(state);
  6546.             constexpr auto cond = hana::value(cond_);
  6547.             constexpr bool truth_value = hana::if_(cond, true, false);
  6548.             return while_helper(hana::bool_c<truth_value>,
  6549.                                 static_cast<Pred&&>(pred),
  6550.                                 static_cast<State&&>(state),
  6551.                                 static_cast<F&&>(f));
  6552.         }
  6553.     };
  6554. }}
  6555. # 21 "/us/include/boost_1_64_0/boost/hana/concept/logical.hpp" 2
  6556.  
  6557.  
  6558.  
  6559. namespace boost { namespace hana {
  6560.     template <typename L>
  6561.     struct Logical
  6562.         : hana::integral_constant<bool,
  6563.             !is_default<eval_if_impl<typename tag_of<L>::type>>::value &&
  6564.             !is_default<not_impl<typename tag_of<L>::type>>::value &&
  6565.             !is_default<while_impl<typename tag_of<L>::type>>::value
  6566.         >
  6567.     { };
  6568. }}
  6569. # 15 "/us/include/boost_1_64_0/boost/hana/if.hpp" 2
  6570.  
  6571.  
  6572.  
  6573.  
  6574.  
  6575.  
  6576. namespace boost { namespace hana {
  6577.  
  6578.     template <typename Cond, typename Then, typename Else>
  6579.     constexpr decltype(auto) if_t::operator()(Cond&& cond, Then&& then_, Else&& else_) const {
  6580.         using Bool = typename hana::tag_of<Cond>::type;
  6581.         using If = ::std::conditional_t< (hana::Logical<Bool>::value), if_impl<Bool>, ::boost::hana::deleted_implementation >;
  6582.  
  6583.  
  6584.  
  6585.  
  6586.         static_assert(hana::Logical<Bool>::value,
  6587.         "hana::if_(cond, then, else) requires 'cond' to be a Logical");
  6588.  
  6589.  
  6590.         return If::apply(static_cast<Cond&&>(cond),
  6591.                          static_cast<Then&&>(then_),
  6592.                          static_cast<Else&&>(else_));
  6593.     }
  6594.  
  6595.  
  6596.     namespace detail {
  6597.         template <typename T>
  6598.         struct hold {
  6599.             T value;
  6600.             constexpr T&& operator()() && { return static_cast<T&&>(value); }
  6601.         };
  6602.     }
  6603.  
  6604.     template <typename L, bool condition>
  6605.     struct if_impl<L, when<condition>> : default_ {
  6606.         template <typename C, typename T, typename E>
  6607.         static constexpr auto apply(C&& c, T&& t, E&& e) {
  6608.             return hana::eval_if(static_cast<C&&>(c),
  6609.                 detail::hold<T&&>{static_cast<T&&>(t)},
  6610.                 detail::hold<E&&>{static_cast<E&&>(e)}
  6611.             );
  6612.         }
  6613.     };
  6614. }}
  6615. # 16 "/us/include/boost_1_64_0/boost/hana/assert.hpp" 2
  6616.  
  6617.  
  6618.  
  6619. # 1 "/usr/include/c++/5.2.0/cstdio" 1
  6620. # 40 "/usr/include/c++/5.2.0/cstdio" 3
  6621.  
  6622.  
  6623. # 1 "/usr/include/stdio.h" 1 3 4
  6624. # 29 "/usr/include/stdio.h" 3 4
  6625. extern "C" {
  6626.  
  6627.  
  6628.  
  6629.  
  6630. # 1 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 1 3 4
  6631. # 34 "/usr/include/stdio.h" 2 3 4
  6632.  
  6633. # 1 "/usr/include/x86_64-linux-gnu/bits/types.h" 1 3 4
  6634. # 27 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4
  6635. # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
  6636. # 28 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4
  6637.  
  6638.  
  6639. typedef unsigned char __u_char;
  6640. typedef unsigned short int __u_short;
  6641. typedef unsigned int __u_int;
  6642. typedef unsigned long int __u_long;
  6643.  
  6644.  
  6645. typedef signed char __int8_t;
  6646. typedef unsigned char __uint8_t;
  6647. typedef signed short int __int16_t;
  6648. typedef unsigned short int __uint16_t;
  6649. typedef signed int __int32_t;
  6650. typedef unsigned int __uint32_t;
  6651.  
  6652. typedef signed long int __int64_t;
  6653. typedef unsigned long int __uint64_t;
  6654.  
  6655.  
  6656.  
  6657.  
  6658.  
  6659.  
  6660.  
  6661. typedef long int __quad_t;
  6662. typedef unsigned long int __u_quad_t;
  6663. # 121 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4
  6664. # 1 "/usr/include/x86_64-linux-gnu/bits/typesizes.h" 1 3 4
  6665. # 122 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4
  6666.  
  6667.  
  6668. typedef unsigned long int __dev_t;
  6669. typedef unsigned int __uid_t;
  6670. typedef unsigned int __gid_t;
  6671. typedef unsigned long int __ino_t;
  6672. typedef unsigned long int __ino64_t;
  6673. typedef unsigned int __mode_t;
  6674. typedef unsigned long int __nlink_t;
  6675. typedef long int __off_t;
  6676. typedef long int __off64_t;
  6677. typedef int __pid_t;
  6678. typedef struct { int __val[2]; } __fsid_t;
  6679. typedef long int __clock_t;
  6680. typedef unsigned long int __rlim_t;
  6681. typedef unsigned long int __rlim64_t;
  6682. typedef unsigned int __id_t;
  6683. typedef long int __time_t;
  6684. typedef unsigned int __useconds_t;
  6685. typedef long int __suseconds_t;
  6686.  
  6687. typedef int __daddr_t;
  6688. typedef int __key_t;
  6689.  
  6690.  
  6691. typedef int __clockid_t;
  6692.  
  6693.  
  6694. typedef void * __timer_t;
  6695.  
  6696.  
  6697. typedef long int __blksize_t;
  6698.  
  6699.  
  6700.  
  6701.  
  6702. typedef long int __blkcnt_t;
  6703. typedef long int __blkcnt64_t;
  6704.  
  6705.  
  6706. typedef unsigned long int __fsblkcnt_t;
  6707. typedef unsigned long int __fsblkcnt64_t;
  6708.  
  6709.  
  6710. typedef unsigned long int __fsfilcnt_t;
  6711. typedef unsigned long int __fsfilcnt64_t;
  6712.  
  6713.  
  6714. typedef long int __fsword_t;
  6715.  
  6716. typedef long int __ssize_t;
  6717.  
  6718.  
  6719. typedef long int __syscall_slong_t;
  6720.  
  6721. typedef unsigned long int __syscall_ulong_t;
  6722.  
  6723.  
  6724.  
  6725. typedef __off64_t __loff_t;
  6726. typedef __quad_t *__qaddr_t;
  6727. typedef char *__caddr_t;
  6728.  
  6729.  
  6730. typedef long int __intptr_t;
  6731.  
  6732.  
  6733. typedef unsigned int __socklen_t;
  6734. # 36 "/usr/include/stdio.h" 2 3 4
  6735.  
  6736.  
  6737.  
  6738.  
  6739.  
  6740.  
  6741.  
  6742.  
  6743. struct _IO_FILE;
  6744.  
  6745.  
  6746.  
  6747. typedef struct _IO_FILE FILE;
  6748. # 64 "/usr/include/stdio.h" 3 4
  6749. typedef struct _IO_FILE __FILE;
  6750. # 74 "/usr/include/stdio.h" 3 4
  6751. # 1 "/usr/include/libio.h" 1 3 4
  6752. # 31 "/usr/include/libio.h" 3 4
  6753. # 1 "/usr/include/_G_config.h" 1 3 4
  6754. # 15 "/usr/include/_G_config.h" 3 4
  6755. # 1 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 1 3 4
  6756. # 16 "/usr/include/_G_config.h" 2 3 4
  6757.  
  6758.  
  6759.  
  6760.  
  6761. # 1 "/usr/include/wchar.h" 1 3 4
  6762. # 82 "/usr/include/wchar.h" 3 4
  6763. typedef struct
  6764. {
  6765.   int __count;
  6766.   union
  6767.   {
  6768.  
  6769.     unsigned int __wch;
  6770.  
  6771.  
  6772.  
  6773.     char __wchb[4];
  6774.   } __value;
  6775. } __mbstate_t;
  6776. # 21 "/usr/include/_G_config.h" 2 3 4
  6777. typedef struct
  6778. {
  6779.   __off_t __pos;
  6780.   __mbstate_t __state;
  6781. } _G_fpos_t;
  6782. typedef struct
  6783. {
  6784.   __off64_t __pos;
  6785.   __mbstate_t __state;
  6786. } _G_fpos64_t;
  6787. # 32 "/usr/include/libio.h" 2 3 4
  6788. # 49 "/usr/include/libio.h" 3 4
  6789. # 1 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stdarg.h" 1 3 4
  6790. # 30 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stdarg.h" 3 4
  6791. typedef __builtin_va_list va_list;
  6792. # 48 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stdarg.h" 3 4
  6793. typedef __builtin_va_list __gnuc_va_list;
  6794. # 50 "/usr/include/libio.h" 2 3 4
  6795. # 144 "/usr/include/libio.h" 3 4
  6796. struct _IO_jump_t; struct _IO_FILE;
  6797. # 154 "/usr/include/libio.h" 3 4
  6798. typedef void _IO_lock_t;
  6799.  
  6800.  
  6801.  
  6802.  
  6803.  
  6804. struct _IO_marker {
  6805.   struct _IO_marker *_next;
  6806.   struct _IO_FILE *_sbuf;
  6807.  
  6808.  
  6809.  
  6810.   int _pos;
  6811. # 177 "/usr/include/libio.h" 3 4
  6812. };
  6813.  
  6814.  
  6815. enum __codecvt_result
  6816. {
  6817.   __codecvt_ok,
  6818.   __codecvt_partial,
  6819.   __codecvt_error,
  6820.   __codecvt_noconv
  6821. };
  6822. # 245 "/usr/include/libio.h" 3 4
  6823. struct _IO_FILE {
  6824.   int _flags;
  6825.  
  6826.  
  6827.  
  6828.  
  6829.   char* _IO_read_ptr;
  6830.   char* _IO_read_end;
  6831.   char* _IO_read_base;
  6832.   char* _IO_write_base;
  6833.   char* _IO_write_ptr;
  6834.   char* _IO_write_end;
  6835.   char* _IO_buf_base;
  6836.   char* _IO_buf_end;
  6837.  
  6838.   char *_IO_save_base;
  6839.   char *_IO_backup_base;
  6840.   char *_IO_save_end;
  6841.  
  6842.   struct _IO_marker *_markers;
  6843.  
  6844.   struct _IO_FILE *_chain;
  6845.  
  6846.   int _fileno;
  6847.  
  6848.  
  6849.  
  6850.   int _flags2;
  6851.  
  6852.   __off_t _old_offset;
  6853.  
  6854.  
  6855.  
  6856.   unsigned short _cur_column;
  6857.   signed char _vtable_offset;
  6858.   char _shortbuf[1];
  6859.  
  6860.  
  6861.  
  6862.   _IO_lock_t *_lock;
  6863. # 293 "/usr/include/libio.h" 3 4
  6864.   __off64_t _offset;
  6865. # 302 "/usr/include/libio.h" 3 4
  6866.   void *__pad1;
  6867.   void *__pad2;
  6868.   void *__pad3;
  6869.   void *__pad4;
  6870.   size_t __pad5;
  6871.  
  6872.   int _mode;
  6873.  
  6874.   char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
  6875.  
  6876. };
  6877.  
  6878.  
  6879.  
  6880.  
  6881.  
  6882. struct _IO_FILE_plus;
  6883.  
  6884. extern struct _IO_FILE_plus _IO_2_1_stdin_;
  6885. extern struct _IO_FILE_plus _IO_2_1_stdout_;
  6886. extern struct _IO_FILE_plus _IO_2_1_stderr_;
  6887. # 338 "/usr/include/libio.h" 3 4
  6888. typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
  6889.  
  6890.  
  6891.  
  6892.  
  6893.  
  6894.  
  6895.  
  6896. typedef __ssize_t __io_write_fn (void *__cookie, const char *__buf,
  6897.      size_t __n);
  6898.  
  6899.  
  6900.  
  6901.  
  6902.  
  6903.  
  6904.  
  6905. typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);
  6906.  
  6907.  
  6908. typedef int __io_close_fn (void *__cookie);
  6909.  
  6910.  
  6911.  
  6912.  
  6913. typedef __io_read_fn cookie_read_function_t;
  6914. typedef __io_write_fn cookie_write_function_t;
  6915. typedef __io_seek_fn cookie_seek_function_t;
  6916. typedef __io_close_fn cookie_close_function_t;
  6917.  
  6918.  
  6919. typedef struct
  6920. {
  6921.   __io_read_fn *read;
  6922.   __io_write_fn *write;
  6923.   __io_seek_fn *seek;
  6924.   __io_close_fn *close;
  6925. } _IO_cookie_io_functions_t;
  6926. typedef _IO_cookie_io_functions_t cookie_io_functions_t;
  6927.  
  6928. struct _IO_cookie_file;
  6929.  
  6930.  
  6931. extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
  6932.         void *__cookie, _IO_cookie_io_functions_t __fns);
  6933.  
  6934.  
  6935.  
  6936.  
  6937. extern "C" {
  6938.  
  6939.  
  6940. extern int __underflow (_IO_FILE *);
  6941. extern int __uflow (_IO_FILE *);
  6942. extern int __overflow (_IO_FILE *, int);
  6943. # 434 "/usr/include/libio.h" 3 4
  6944. extern int _IO_getc (_IO_FILE *__fp);
  6945. extern int _IO_putc (int __c, _IO_FILE *__fp);
  6946. extern int _IO_feof (_IO_FILE *__fp) throw ();
  6947. extern int _IO_ferror (_IO_FILE *__fp) throw ();
  6948.  
  6949. extern int _IO_peekc_locked (_IO_FILE *__fp);
  6950.  
  6951.  
  6952.  
  6953.  
  6954.  
  6955. extern void _IO_flockfile (_IO_FILE *) throw ();
  6956. extern void _IO_funlockfile (_IO_FILE *) throw ();
  6957. extern int _IO_ftrylockfile (_IO_FILE *) throw ();
  6958. # 464 "/usr/include/libio.h" 3 4
  6959. extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
  6960.    __gnuc_va_list, int *__restrict);
  6961. extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
  6962.     __gnuc_va_list);
  6963. extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t);
  6964. extern size_t _IO_sgetn (_IO_FILE *, void *, size_t);
  6965.  
  6966. extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int);
  6967. extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int);
  6968.  
  6969. extern void _IO_free_backup_area (_IO_FILE *) throw ();
  6970. # 526 "/usr/include/libio.h" 3 4
  6971. }
  6972. # 75 "/usr/include/stdio.h" 2 3 4
  6973.  
  6974.  
  6975.  
  6976.  
  6977. typedef __gnuc_va_list va_list;
  6978. # 90 "/usr/include/stdio.h" 3 4
  6979. typedef __off_t off_t;
  6980.  
  6981.  
  6982.  
  6983.  
  6984.  
  6985.  
  6986. typedef __off64_t off64_t;
  6987.  
  6988.  
  6989.  
  6990.  
  6991. typedef __ssize_t ssize_t;
  6992.  
  6993.  
  6994.  
  6995.  
  6996.  
  6997.  
  6998.  
  6999. typedef _G_fpos_t fpos_t;
  7000.  
  7001.  
  7002.  
  7003.  
  7004.  
  7005. typedef _G_fpos64_t fpos64_t;
  7006. # 164 "/usr/include/stdio.h" 3 4
  7007. # 1 "/usr/include/x86_64-linux-gnu/bits/stdio_lim.h" 1 3 4
  7008. # 165 "/usr/include/stdio.h" 2 3 4
  7009.  
  7010.  
  7011.  
  7012. extern struct _IO_FILE *stdin;
  7013. extern struct _IO_FILE *stdout;
  7014. extern struct _IO_FILE *stderr;
  7015.  
  7016.  
  7017.  
  7018.  
  7019.  
  7020.  
  7021.  
  7022. extern int remove (const char *__filename) throw ();
  7023.  
  7024. extern int rename (const char *__old, const char *__new) throw ();
  7025.  
  7026.  
  7027.  
  7028.  
  7029. extern int renameat (int __oldfd, const char *__old, int __newfd,
  7030.        const char *__new) throw ();
  7031. # 195 "/usr/include/stdio.h" 3 4
  7032. extern FILE *tmpfile (void) ;
  7033. # 205 "/usr/include/stdio.h" 3 4
  7034. extern FILE *tmpfile64 (void) ;
  7035.  
  7036.  
  7037.  
  7038. extern char *tmpnam (char *__s) throw () ;
  7039.  
  7040.  
  7041.  
  7042.  
  7043.  
  7044. extern char *tmpnam_r (char *__s) throw () ;
  7045. # 227 "/usr/include/stdio.h" 3 4
  7046. extern char *tempnam (const char *__dir, const char *__pfx)
  7047.      throw () __attribute__ ((__malloc__)) ;
  7048. # 237 "/usr/include/stdio.h" 3 4
  7049. extern int fclose (FILE *__stream);
  7050.  
  7051.  
  7052.  
  7053.  
  7054. extern int fflush (FILE *__stream);
  7055. # 252 "/usr/include/stdio.h" 3 4
  7056. extern int fflush_unlocked (FILE *__stream);
  7057. # 262 "/usr/include/stdio.h" 3 4
  7058. extern int fcloseall (void);
  7059. # 272 "/usr/include/stdio.h" 3 4
  7060. extern FILE *fopen (const char *__restrict __filename,
  7061.       const char *__restrict __modes) ;
  7062.  
  7063.  
  7064.  
  7065.  
  7066. extern FILE *freopen (const char *__restrict __filename,
  7067.         const char *__restrict __modes,
  7068.         FILE *__restrict __stream) ;
  7069. # 297 "/usr/include/stdio.h" 3 4
  7070. extern FILE *fopen64 (const char *__restrict __filename,
  7071.         const char *__restrict __modes) ;
  7072. extern FILE *freopen64 (const char *__restrict __filename,
  7073.    const char *__restrict __modes,
  7074.    FILE *__restrict __stream) ;
  7075.  
  7076.  
  7077.  
  7078.  
  7079. extern FILE *fdopen (int __fd, const char *__modes) throw () ;
  7080.  
  7081.  
  7082.  
  7083.  
  7084.  
  7085. extern FILE *fopencookie (void *__restrict __magic_cookie,
  7086.      const char *__restrict __modes,
  7087.      _IO_cookie_io_functions_t __io_funcs) throw () ;
  7088.  
  7089.  
  7090.  
  7091.  
  7092. extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
  7093.   throw () ;
  7094.  
  7095.  
  7096.  
  7097.  
  7098. extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) throw () ;
  7099.  
  7100.  
  7101.  
  7102.  
  7103.  
  7104.  
  7105. extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) throw ();
  7106.  
  7107.  
  7108.  
  7109. extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
  7110.       int __modes, size_t __n) throw ();
  7111.  
  7112.  
  7113.  
  7114.  
  7115.  
  7116. extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
  7117.          size_t __size) throw ();
  7118.  
  7119.  
  7120. extern void setlinebuf (FILE *__stream) throw ();
  7121. # 356 "/usr/include/stdio.h" 3 4
  7122. extern int fprintf (FILE *__restrict __stream,
  7123.       const char *__restrict __format, ...);
  7124.  
  7125.  
  7126.  
  7127.  
  7128. extern int printf (const char *__restrict __format, ...);
  7129.  
  7130. extern int sprintf (char *__restrict __s,
  7131.       const char *__restrict __format, ...) throw ();
  7132.  
  7133.  
  7134.  
  7135.  
  7136.  
  7137. extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
  7138.        __gnuc_va_list __arg);
  7139.  
  7140.  
  7141.  
  7142.  
  7143. extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);
  7144.  
  7145. extern int vsprintf (char *__restrict __s, const char *__restrict __format,
  7146.        __gnuc_va_list __arg) throw ();
  7147.  
  7148.  
  7149.  
  7150.  
  7151.  
  7152. extern int snprintf (char *__restrict __s, size_t __maxlen,
  7153.        const char *__restrict __format, ...)
  7154.      throw () __attribute__ ((__format__ (__printf__, 3, 4)));
  7155.  
  7156. extern int vsnprintf (char *__restrict __s, size_t __maxlen,
  7157.         const char *__restrict __format, __gnuc_va_list __arg)
  7158.      throw () __attribute__ ((__format__ (__printf__, 3, 0)));
  7159.  
  7160.  
  7161.  
  7162.  
  7163.  
  7164.  
  7165. extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,
  7166.         __gnuc_va_list __arg)
  7167.      throw () __attribute__ ((__format__ (__printf__, 2, 0))) ;
  7168. extern int __asprintf (char **__restrict __ptr,
  7169.          const char *__restrict __fmt, ...)
  7170.      throw () __attribute__ ((__format__ (__printf__, 2, 3))) ;
  7171. extern int asprintf (char **__restrict __ptr,
  7172.        const char *__restrict __fmt, ...)
  7173.      throw () __attribute__ ((__format__ (__printf__, 2, 3))) ;
  7174.  
  7175.  
  7176.  
  7177.  
  7178. extern int vdprintf (int __fd, const char *__restrict __fmt,
  7179.        __gnuc_va_list __arg)
  7180.      __attribute__ ((__format__ (__printf__, 2, 0)));
  7181. extern int dprintf (int __fd, const char *__restrict __fmt, ...)
  7182.      __attribute__ ((__format__ (__printf__, 2, 3)));
  7183. # 425 "/usr/include/stdio.h" 3 4
  7184. extern int fscanf (FILE *__restrict __stream,
  7185.      const char *__restrict __format, ...) ;
  7186.  
  7187.  
  7188.  
  7189.  
  7190. extern int scanf (const char *__restrict __format, ...) ;
  7191.  
  7192. extern int sscanf (const char *__restrict __s,
  7193.      const char *__restrict __format, ...) throw ();
  7194. # 471 "/usr/include/stdio.h" 3 4
  7195. extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
  7196.       __gnuc_va_list __arg)
  7197.      __attribute__ ((__format__ (__scanf__, 2, 0))) ;
  7198.  
  7199.  
  7200.  
  7201.  
  7202.  
  7203. extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)
  7204.      __attribute__ ((__format__ (__scanf__, 1, 0))) ;
  7205.  
  7206.  
  7207. extern int vsscanf (const char *__restrict __s,
  7208.       const char *__restrict __format, __gnuc_va_list __arg)
  7209.      throw () __attribute__ ((__format__ (__scanf__, 2, 0)));
  7210. # 531 "/usr/include/stdio.h" 3 4
  7211. extern int fgetc (FILE *__stream);
  7212. extern int getc (FILE *__stream);
  7213.  
  7214.  
  7215.  
  7216.  
  7217.  
  7218. extern int getchar (void);
  7219. # 550 "/usr/include/stdio.h" 3 4
  7220. extern int getc_unlocked (FILE *__stream);
  7221. extern int getchar_unlocked (void);
  7222. # 561 "/usr/include/stdio.h" 3 4
  7223. extern int fgetc_unlocked (FILE *__stream);
  7224. # 573 "/usr/include/stdio.h" 3 4
  7225. extern int fputc (int __c, FILE *__stream);
  7226. extern int putc (int __c, FILE *__stream);
  7227.  
  7228.  
  7229.  
  7230.  
  7231.  
  7232. extern int putchar (int __c);
  7233. # 594 "/usr/include/stdio.h" 3 4
  7234. extern int fputc_unlocked (int __c, FILE *__stream);
  7235.  
  7236.  
  7237.  
  7238.  
  7239.  
  7240.  
  7241.  
  7242. extern int putc_unlocked (int __c, FILE *__stream);
  7243. extern int putchar_unlocked (int __c);
  7244.  
  7245.  
  7246.  
  7247.  
  7248.  
  7249.  
  7250. extern int getw (FILE *__stream);
  7251.  
  7252.  
  7253. extern int putw (int __w, FILE *__stream);
  7254. # 622 "/usr/include/stdio.h" 3 4
  7255. extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
  7256.           ;
  7257. # 649 "/usr/include/stdio.h" 3 4
  7258. extern char *fgets_unlocked (char *__restrict __s, int __n,
  7259.         FILE *__restrict __stream) ;
  7260. # 665 "/usr/include/stdio.h" 3 4
  7261. extern __ssize_t __getdelim (char **__restrict __lineptr,
  7262.           size_t *__restrict __n, int __delimiter,
  7263.           FILE *__restrict __stream) ;
  7264. extern __ssize_t getdelim (char **__restrict __lineptr,
  7265.         size_t *__restrict __n, int __delimiter,
  7266.         FILE *__restrict __stream) ;
  7267.  
  7268.  
  7269.  
  7270.  
  7271.  
  7272.  
  7273.  
  7274. extern __ssize_t getline (char **__restrict __lineptr,
  7275.        size_t *__restrict __n,
  7276.        FILE *__restrict __stream) ;
  7277. # 689 "/usr/include/stdio.h" 3 4
  7278. extern int fputs (const char *__restrict __s, FILE *__restrict __stream);
  7279.  
  7280.  
  7281.  
  7282.  
  7283.  
  7284. extern int puts (const char *__s);
  7285.  
  7286.  
  7287.  
  7288.  
  7289.  
  7290.  
  7291. extern int ungetc (int __c, FILE *__stream);
  7292.  
  7293.  
  7294.  
  7295.  
  7296.  
  7297.  
  7298. extern size_t fread (void *__restrict __ptr, size_t __size,
  7299.        size_t __n, FILE *__restrict __stream) ;
  7300.  
  7301.  
  7302.  
  7303.  
  7304. extern size_t fwrite (const void *__restrict __ptr, size_t __size,
  7305.         size_t __n, FILE *__restrict __s);
  7306. # 726 "/usr/include/stdio.h" 3 4
  7307. extern int fputs_unlocked (const char *__restrict __s,
  7308.       FILE *__restrict __stream);
  7309. # 737 "/usr/include/stdio.h" 3 4
  7310. extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
  7311.          size_t __n, FILE *__restrict __stream) ;
  7312. extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
  7313.           size_t __n, FILE *__restrict __stream);
  7314. # 749 "/usr/include/stdio.h" 3 4
  7315. extern int fseek (FILE *__stream, long int __off, int __whence);
  7316.  
  7317.  
  7318.  
  7319.  
  7320. extern long int ftell (FILE *__stream) ;
  7321.  
  7322.  
  7323.  
  7324.  
  7325. extern void rewind (FILE *__stream);
  7326. # 773 "/usr/include/stdio.h" 3 4
  7327. extern int fseeko (FILE *__stream, __off_t __off, int __whence);
  7328.  
  7329.  
  7330.  
  7331.  
  7332. extern __off_t ftello (FILE *__stream) ;
  7333. # 798 "/usr/include/stdio.h" 3 4
  7334. extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
  7335.  
  7336.  
  7337.  
  7338.  
  7339. extern int fsetpos (FILE *__stream, const fpos_t *__pos);
  7340. # 818 "/usr/include/stdio.h" 3 4
  7341. extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
  7342. extern __off64_t ftello64 (FILE *__stream) ;
  7343. extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
  7344. extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos);
  7345.  
  7346.  
  7347.  
  7348.  
  7349. extern void clearerr (FILE *__stream) throw ();
  7350.  
  7351. extern int feof (FILE *__stream) throw () ;
  7352.  
  7353. extern int ferror (FILE *__stream) throw () ;
  7354.  
  7355.  
  7356.  
  7357.  
  7358. extern void clearerr_unlocked (FILE *__stream) throw ();
  7359. extern int feof_unlocked (FILE *__stream) throw () ;
  7360. extern int ferror_unlocked (FILE *__stream) throw () ;
  7361. # 846 "/usr/include/stdio.h" 3 4
  7362. extern void perror (const char *__s);
  7363.  
  7364.  
  7365.  
  7366.  
  7367.  
  7368.  
  7369.  
  7370. # 1 "/usr/include/x86_64-linux-gnu/bits/sys_errlist.h" 1 3 4
  7371. # 26 "/usr/include/x86_64-linux-gnu/bits/sys_errlist.h" 3 4
  7372. extern int sys_nerr;
  7373. extern const char *const sys_errlist[];
  7374.  
  7375.  
  7376. extern int _sys_nerr;
  7377. extern const char *const _sys_errlist[];
  7378. # 854 "/usr/include/stdio.h" 2 3 4
  7379.  
  7380.  
  7381.  
  7382.  
  7383. extern int fileno (FILE *__stream) throw () ;
  7384.  
  7385.  
  7386.  
  7387.  
  7388. extern int fileno_unlocked (FILE *__stream) throw () ;
  7389. # 873 "/usr/include/stdio.h" 3 4
  7390. extern FILE *popen (const char *__command, const char *__modes) ;
  7391.  
  7392.  
  7393.  
  7394.  
  7395.  
  7396. extern int pclose (FILE *__stream);
  7397.  
  7398.  
  7399.  
  7400.  
  7401.  
  7402. extern char *ctermid (char *__s) throw ();
  7403.  
  7404.  
  7405.  
  7406.  
  7407.  
  7408. extern char *cuserid (char *__s);
  7409.  
  7410.  
  7411.  
  7412.  
  7413. struct obstack;
  7414.  
  7415.  
  7416. extern int obstack_printf (struct obstack *__restrict __obstack,
  7417.       const char *__restrict __format, ...)
  7418.      throw () __attribute__ ((__format__ (__printf__, 2, 3)));
  7419. extern int obstack_vprintf (struct obstack *__restrict __obstack,
  7420.        const char *__restrict __format,
  7421.        __gnuc_va_list __args)
  7422.      throw () __attribute__ ((__format__ (__printf__, 2, 0)));
  7423.  
  7424.  
  7425.  
  7426.  
  7427.  
  7428.  
  7429.  
  7430. extern void flockfile (FILE *__stream) throw ();
  7431.  
  7432.  
  7433.  
  7434. extern int ftrylockfile (FILE *__stream) throw () ;
  7435.  
  7436.  
  7437. extern void funlockfile (FILE *__stream) throw ();
  7438. # 943 "/usr/include/stdio.h" 3 4
  7439. }
  7440. # 43 "/usr/include/c++/5.2.0/cstdio" 2 3
  7441. # 96 "/usr/include/c++/5.2.0/cstdio" 3
  7442. namespace std
  7443. {
  7444.   using ::FILE;
  7445.   using ::fpos_t;
  7446.  
  7447.   using ::clearerr;
  7448.   using ::fclose;
  7449.   using ::feof;
  7450.   using ::ferror;
  7451.   using ::fflush;
  7452.   using ::fgetc;
  7453.   using ::fgetpos;
  7454.   using ::fgets;
  7455.   using ::fopen;
  7456.   using ::fprintf;
  7457.   using ::fputc;
  7458.   using ::fputs;
  7459.   using ::fread;
  7460.   using ::freopen;
  7461.   using ::fscanf;
  7462.   using ::fseek;
  7463.   using ::fsetpos;
  7464.   using ::ftell;
  7465.   using ::fwrite;
  7466.   using ::getc;
  7467.   using ::getchar;
  7468.  
  7469.  
  7470.  
  7471.  
  7472.   using ::perror;
  7473.   using ::printf;
  7474.   using ::putc;
  7475.   using ::putchar;
  7476.   using ::puts;
  7477.   using ::remove;
  7478.   using ::rename;
  7479.   using ::rewind;
  7480.   using ::scanf;
  7481.   using ::setbuf;
  7482.   using ::setvbuf;
  7483.   using ::sprintf;
  7484.   using ::sscanf;
  7485.   using ::tmpfile;
  7486.  
  7487.  
  7488.  
  7489.   using ::ungetc;
  7490.   using ::vfprintf;
  7491.   using ::vprintf;
  7492.   using ::vsprintf;
  7493. }
  7494. # 157 "/usr/include/c++/5.2.0/cstdio" 3
  7495. namespace __gnu_cxx
  7496. {
  7497. # 175 "/usr/include/c++/5.2.0/cstdio" 3
  7498.   using ::snprintf;
  7499.   using ::vfscanf;
  7500.   using ::vscanf;
  7501.   using ::vsnprintf;
  7502.   using ::vsscanf;
  7503.  
  7504. }
  7505.  
  7506. namespace std
  7507. {
  7508.   using ::__gnu_cxx::snprintf;
  7509.   using ::__gnu_cxx::vfscanf;
  7510.   using ::__gnu_cxx::vscanf;
  7511.   using ::__gnu_cxx::vsnprintf;
  7512.   using ::__gnu_cxx::vsscanf;
  7513. }
  7514. # 19 "/us/include/boost_1_64_0/boost/hana/assert.hpp" 2
  7515.  
  7516. # 1 "/usr/include/c++/5.2.0/cstdlib" 1
  7517. # 40 "/usr/include/c++/5.2.0/cstdlib" 3
  7518. # 72 "/usr/include/c++/5.2.0/cstdlib" 3
  7519. # 1 "/usr/include/stdlib.h" 1 3 4
  7520. # 32 "/usr/include/stdlib.h" 3 4
  7521. # 1 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 1 3 4
  7522. # 33 "/usr/include/stdlib.h" 2 3 4
  7523.  
  7524. extern "C" {
  7525.  
  7526.  
  7527.  
  7528.  
  7529.  
  7530.  
  7531.  
  7532. # 1 "/usr/include/x86_64-linux-gnu/bits/waitflags.h" 1 3 4
  7533. # 50 "/usr/include/x86_64-linux-gnu/bits/waitflags.h" 3 4
  7534. typedef enum
  7535. {
  7536.   P_ALL,
  7537.   P_PID,
  7538.   P_PGID
  7539. } idtype_t;
  7540. # 42 "/usr/include/stdlib.h" 2 3 4
  7541. # 1 "/usr/include/x86_64-linux-gnu/bits/waitstatus.h" 1 3 4
  7542. # 64 "/usr/include/x86_64-linux-gnu/bits/waitstatus.h" 3 4
  7543. # 1 "/usr/include/endian.h" 1 3 4
  7544. # 36 "/usr/include/endian.h" 3 4
  7545. # 1 "/usr/include/x86_64-linux-gnu/bits/endian.h" 1 3 4
  7546. # 37 "/usr/include/endian.h" 2 3 4
  7547. # 60 "/usr/include/endian.h" 3 4
  7548. # 1 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 1 3 4
  7549. # 28 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 3 4
  7550. # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
  7551. # 29 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 2 3 4
  7552.  
  7553.  
  7554.  
  7555.  
  7556.  
  7557.  
  7558. # 1 "/usr/include/x86_64-linux-gnu/bits/byteswap-16.h" 1 3 4
  7559. # 36 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 2 3 4
  7560. # 61 "/usr/include/endian.h" 2 3 4
  7561. # 65 "/usr/include/x86_64-linux-gnu/bits/waitstatus.h" 2 3 4
  7562.  
  7563. union wait
  7564.   {
  7565.     int w_status;
  7566.     struct
  7567.       {
  7568.  
  7569.  unsigned int __w_termsig:7;
  7570.  unsigned int __w_coredump:1;
  7571.  unsigned int __w_retcode:8;
  7572.  unsigned int:16;
  7573.  
  7574.  
  7575.  
  7576.  
  7577.  
  7578.  
  7579.  
  7580.       } __wait_terminated;
  7581.     struct
  7582.       {
  7583.  
  7584.  unsigned int __w_stopval:8;
  7585.  unsigned int __w_stopsig:8;
  7586.  unsigned int:16;
  7587.  
  7588.  
  7589.  
  7590.  
  7591.  
  7592.  
  7593.       } __wait_stopped;
  7594.   };
  7595. # 43 "/usr/include/stdlib.h" 2 3 4
  7596. # 97 "/usr/include/stdlib.h" 3 4
  7597. typedef struct
  7598.   {
  7599.     int quot;
  7600.     int rem;
  7601.   } div_t;
  7602.  
  7603.  
  7604.  
  7605. typedef struct
  7606.   {
  7607.     long int quot;
  7608.     long int rem;
  7609.   } ldiv_t;
  7610.  
  7611.  
  7612.  
  7613.  
  7614.  
  7615.  
  7616.  
  7617. __extension__ typedef struct
  7618.   {
  7619.     long long int quot;
  7620.     long long int rem;
  7621.   } lldiv_t;
  7622. # 139 "/usr/include/stdlib.h" 3 4
  7623. extern size_t __ctype_get_mb_cur_max (void) throw () ;
  7624.  
  7625.  
  7626.  
  7627.  
  7628. extern double atof (const char *__nptr)
  7629.      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
  7630.  
  7631. extern int atoi (const char *__nptr)
  7632.      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
  7633.  
  7634. extern long int atol (const char *__nptr)
  7635.      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
  7636.  
  7637.  
  7638.  
  7639.  
  7640.  
  7641. __extension__ extern long long int atoll (const char *__nptr)
  7642.      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
  7643.  
  7644.  
  7645.  
  7646.  
  7647.  
  7648. extern double strtod (const char *__restrict __nptr,
  7649.         char **__restrict __endptr)
  7650.      throw () __attribute__ ((__nonnull__ (1)));
  7651.  
  7652.  
  7653.  
  7654.  
  7655.  
  7656. extern float strtof (const char *__restrict __nptr,
  7657.        char **__restrict __endptr) throw () __attribute__ ((__nonnull__ (1)));
  7658.  
  7659. extern long double strtold (const char *__restrict __nptr,
  7660.        char **__restrict __endptr)
  7661.      throw () __attribute__ ((__nonnull__ (1)));
  7662.  
  7663.  
  7664.  
  7665.  
  7666.  
  7667. extern long int strtol (const char *__restrict __nptr,
  7668.    char **__restrict __endptr, int __base)
  7669.      throw () __attribute__ ((__nonnull__ (1)));
  7670.  
  7671. extern unsigned long int strtoul (const char *__restrict __nptr,
  7672.       char **__restrict __endptr, int __base)
  7673.      throw () __attribute__ ((__nonnull__ (1)));
  7674.  
  7675.  
  7676.  
  7677.  
  7678. __extension__
  7679. extern long long int strtoq (const char *__restrict __nptr,
  7680.         char **__restrict __endptr, int __base)
  7681.      throw () __attribute__ ((__nonnull__ (1)));
  7682.  
  7683. __extension__
  7684. extern unsigned long long int strtouq (const char *__restrict __nptr,
  7685.            char **__restrict __endptr, int __base)
  7686.      throw () __attribute__ ((__nonnull__ (1)));
  7687.  
  7688.  
  7689.  
  7690.  
  7691.  
  7692. __extension__
  7693. extern long long int strtoll (const char *__restrict __nptr,
  7694.          char **__restrict __endptr, int __base)
  7695.      throw () __attribute__ ((__nonnull__ (1)));
  7696.  
  7697. __extension__
  7698. extern unsigned long long int strtoull (const char *__restrict __nptr,
  7699.      char **__restrict __endptr, int __base)
  7700.      throw () __attribute__ ((__nonnull__ (1)));
  7701. # 235 "/usr/include/stdlib.h" 3 4
  7702. # 1 "/usr/include/xlocale.h" 1 3 4
  7703. # 27 "/usr/include/xlocale.h" 3 4
  7704. typedef struct __locale_struct
  7705. {
  7706.  
  7707.   struct __locale_data *__locales[13];
  7708.  
  7709.  
  7710.   const unsigned short int *__ctype_b;
  7711.   const int *__ctype_tolower;
  7712.   const int *__ctype_toupper;
  7713.  
  7714.  
  7715.   const char *__names[13];
  7716. } *__locale_t;
  7717.  
  7718.  
  7719. typedef __locale_t locale_t;
  7720. # 236 "/usr/include/stdlib.h" 2 3 4
  7721.  
  7722.  
  7723.  
  7724. extern long int strtol_l (const char *__restrict __nptr,
  7725.      char **__restrict __endptr, int __base,
  7726.      __locale_t __loc) throw () __attribute__ ((__nonnull__ (1, 4)));
  7727.  
  7728. extern unsigned long int strtoul_l (const char *__restrict __nptr,
  7729.         char **__restrict __endptr,
  7730.         int __base, __locale_t __loc)
  7731.      throw () __attribute__ ((__nonnull__ (1, 4)));
  7732.  
  7733. __extension__
  7734. extern long long int strtoll_l (const char *__restrict __nptr,
  7735.     char **__restrict __endptr, int __base,
  7736.     __locale_t __loc)
  7737.      throw () __attribute__ ((__nonnull__ (1, 4)));
  7738.  
  7739. __extension__
  7740. extern unsigned long long int strtoull_l (const char *__restrict __nptr,
  7741.        char **__restrict __endptr,
  7742.        int __base, __locale_t __loc)
  7743.      throw () __attribute__ ((__nonnull__ (1, 4)));
  7744.  
  7745. extern double strtod_l (const char *__restrict __nptr,
  7746.    char **__restrict __endptr, __locale_t __loc)
  7747.      throw () __attribute__ ((__nonnull__ (1, 3)));
  7748.  
  7749. extern float strtof_l (const char *__restrict __nptr,
  7750.          char **__restrict __endptr, __locale_t __loc)
  7751.      throw () __attribute__ ((__nonnull__ (1, 3)));
  7752.  
  7753. extern long double strtold_l (const char *__restrict __nptr,
  7754.          char **__restrict __endptr,
  7755.          __locale_t __loc)
  7756.      throw () __attribute__ ((__nonnull__ (1, 3)));
  7757. # 305 "/usr/include/stdlib.h" 3 4
  7758. extern char *l64a (long int __n) throw () ;
  7759.  
  7760.  
  7761. extern long int a64l (const char *__s)
  7762.      throw () __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
  7763.  
  7764.  
  7765.  
  7766.  
  7767.  
  7768. # 1 "/usr/include/x86_64-linux-gnu/sys/types.h" 1 3 4
  7769. # 27 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
  7770. extern "C" {
  7771.  
  7772.  
  7773.  
  7774.  
  7775.  
  7776. typedef __u_char u_char;
  7777. typedef __u_short u_short;
  7778. typedef __u_int u_int;
  7779. typedef __u_long u_long;
  7780. typedef __quad_t quad_t;
  7781. typedef __u_quad_t u_quad_t;
  7782. typedef __fsid_t fsid_t;
  7783.  
  7784.  
  7785.  
  7786.  
  7787. typedef __loff_t loff_t;
  7788.  
  7789.  
  7790.  
  7791. typedef __ino_t ino_t;
  7792.  
  7793.  
  7794.  
  7795.  
  7796.  
  7797.  
  7798. typedef __ino64_t ino64_t;
  7799.  
  7800.  
  7801.  
  7802.  
  7803. typedef __dev_t dev_t;
  7804.  
  7805.  
  7806.  
  7807.  
  7808. typedef __gid_t gid_t;
  7809.  
  7810.  
  7811.  
  7812.  
  7813. typedef __mode_t mode_t;
  7814.  
  7815.  
  7816.  
  7817.  
  7818. typedef __nlink_t nlink_t;
  7819.  
  7820.  
  7821.  
  7822.  
  7823. typedef __uid_t uid_t;
  7824. # 98 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
  7825. typedef __pid_t pid_t;
  7826.  
  7827.  
  7828.  
  7829.  
  7830.  
  7831. typedef __id_t id_t;
  7832. # 115 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
  7833. typedef __daddr_t daddr_t;
  7834. typedef __caddr_t caddr_t;
  7835.  
  7836.  
  7837.  
  7838.  
  7839.  
  7840. typedef __key_t key_t;
  7841. # 132 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
  7842. # 1 "/usr/include/time.h" 1 3 4
  7843. # 59 "/usr/include/time.h" 3 4
  7844. typedef __clock_t clock_t;
  7845. # 75 "/usr/include/time.h" 3 4
  7846. typedef __time_t time_t;
  7847. # 91 "/usr/include/time.h" 3 4
  7848. typedef __clockid_t clockid_t;
  7849. # 103 "/usr/include/time.h" 3 4
  7850. typedef __timer_t timer_t;
  7851. # 133 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
  7852.  
  7853.  
  7854.  
  7855. typedef __useconds_t useconds_t;
  7856.  
  7857.  
  7858.  
  7859. typedef __suseconds_t suseconds_t;
  7860.  
  7861.  
  7862.  
  7863.  
  7864.  
  7865.  
  7866. # 1 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 1 3 4
  7867. # 147 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
  7868.  
  7869.  
  7870.  
  7871. typedef unsigned long int ulong;
  7872. typedef unsigned short int ushort;
  7873. typedef unsigned int uint;
  7874. # 194 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
  7875. typedef int int8_t __attribute__ ((__mode__ (__QI__)));
  7876. typedef int int16_t __attribute__ ((__mode__ (__HI__)));
  7877. typedef int int32_t __attribute__ ((__mode__ (__SI__)));
  7878. typedef int int64_t __attribute__ ((__mode__ (__DI__)));
  7879.  
  7880.  
  7881. typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
  7882. typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
  7883. typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
  7884. typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));
  7885.  
  7886. typedef int register_t __attribute__ ((__mode__ (__word__)));
  7887. # 219 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
  7888. # 1 "/usr/include/x86_64-linux-gnu/sys/select.h" 1 3 4
  7889. # 30 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
  7890. # 1 "/usr/include/x86_64-linux-gnu/bits/select.h" 1 3 4
  7891. # 22 "/usr/include/x86_64-linux-gnu/bits/select.h" 3 4
  7892. # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
  7893. # 23 "/usr/include/x86_64-linux-gnu/bits/select.h" 2 3 4
  7894. # 31 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
  7895.  
  7896.  
  7897. # 1 "/usr/include/x86_64-linux-gnu/bits/sigset.h" 1 3 4
  7898. # 22 "/usr/include/x86_64-linux-gnu/bits/sigset.h" 3 4
  7899. typedef int __sig_atomic_t;
  7900.  
  7901.  
  7902.  
  7903.  
  7904. typedef struct
  7905.   {
  7906.     unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
  7907.   } __sigset_t;
  7908. # 34 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
  7909.  
  7910.  
  7911.  
  7912. typedef __sigset_t sigset_t;
  7913.  
  7914.  
  7915.  
  7916.  
  7917.  
  7918.  
  7919. # 1 "/usr/include/time.h" 1 3 4
  7920. # 120 "/usr/include/time.h" 3 4
  7921. struct timespec
  7922.   {
  7923.     __time_t tv_sec;
  7924.     __syscall_slong_t tv_nsec;
  7925.   };
  7926. # 44 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
  7927.  
  7928. # 1 "/usr/include/x86_64-linux-gnu/bits/time.h" 1 3 4
  7929. # 30 "/usr/include/x86_64-linux-gnu/bits/time.h" 3 4
  7930. struct timeval
  7931.   {
  7932.     __time_t tv_sec;
  7933.     __suseconds_t tv_usec;
  7934.   };
  7935. # 46 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4
  7936.  
  7937.  
  7938.  
  7939.  
  7940.  
  7941.  
  7942.  
  7943.  
  7944. typedef long int __fd_mask;
  7945. # 64 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
  7946. typedef struct
  7947.   {
  7948.  
  7949.  
  7950.  
  7951.     __fd_mask fds_bits[1024 / (8 * (int) sizeof (__fd_mask))];
  7952.  
  7953.  
  7954.  
  7955.  
  7956.  
  7957.   } fd_set;
  7958.  
  7959.  
  7960.  
  7961.  
  7962.  
  7963.  
  7964. typedef __fd_mask fd_mask;
  7965. # 96 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
  7966. extern "C" {
  7967. # 106 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
  7968. extern int select (int __nfds, fd_set *__restrict __readfds,
  7969.      fd_set *__restrict __writefds,
  7970.      fd_set *__restrict __exceptfds,
  7971.      struct timeval *__restrict __timeout);
  7972. # 118 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
  7973. extern int pselect (int __nfds, fd_set *__restrict __readfds,
  7974.       fd_set *__restrict __writefds,
  7975.       fd_set *__restrict __exceptfds,
  7976.       const struct timespec *__restrict __timeout,
  7977.       const __sigset_t *__restrict __sigmask);
  7978. # 131 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4
  7979. }
  7980. # 220 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
  7981.  
  7982.  
  7983. # 1 "/usr/include/x86_64-linux-gnu/sys/sysmacros.h" 1 3 4
  7984. # 24 "/usr/include/x86_64-linux-gnu/sys/sysmacros.h" 3 4
  7985. extern "C" {
  7986.  
  7987. __extension__
  7988. extern unsigned int gnu_dev_major (unsigned long long int __dev)
  7989.      throw () __attribute__ ((__const__));
  7990. __extension__
  7991. extern unsigned int gnu_dev_minor (unsigned long long int __dev)
  7992.      throw () __attribute__ ((__const__));
  7993. __extension__
  7994. extern unsigned long long int gnu_dev_makedev (unsigned int __major,
  7995.             unsigned int __minor)
  7996.      throw () __attribute__ ((__const__));
  7997. # 58 "/usr/include/x86_64-linux-gnu/sys/sysmacros.h" 3 4
  7998. }
  7999. # 223 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
  8000.  
  8001.  
  8002.  
  8003.  
  8004.  
  8005. typedef __blksize_t blksize_t;
  8006.  
  8007.  
  8008.  
  8009.  
  8010.  
  8011.  
  8012. typedef __blkcnt_t blkcnt_t;
  8013.  
  8014.  
  8015.  
  8016. typedef __fsblkcnt_t fsblkcnt_t;
  8017.  
  8018.  
  8019.  
  8020. typedef __fsfilcnt_t fsfilcnt_t;
  8021. # 262 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4
  8022. typedef __blkcnt64_t blkcnt64_t;
  8023. typedef __fsblkcnt64_t fsblkcnt64_t;
  8024. typedef __fsfilcnt64_t fsfilcnt64_t;
  8025.  
  8026.  
  8027.  
  8028.  
  8029.  
  8030.  
  8031. # 1 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 1 3 4
  8032. # 21 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
  8033. # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4
  8034. # 22 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 2 3 4
  8035. # 60 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
  8036. typedef unsigned long int pthread_t;
  8037.  
  8038.  
  8039. union pthread_attr_t
  8040. {
  8041.   char __size[56];
  8042.   long int __align;
  8043. };
  8044.  
  8045. typedef union pthread_attr_t pthread_attr_t;
  8046.  
  8047.  
  8048.  
  8049.  
  8050.  
  8051. typedef struct __pthread_internal_list
  8052. {
  8053.   struct __pthread_internal_list *__prev;
  8054.   struct __pthread_internal_list *__next;
  8055. } __pthread_list_t;
  8056. # 90 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
  8057. typedef union
  8058. {
  8059.   struct __pthread_mutex_s
  8060.   {
  8061.     int __lock;
  8062.     unsigned int __count;
  8063.     int __owner;
  8064.  
  8065.     unsigned int __nusers;
  8066.  
  8067.  
  8068.  
  8069.     int __kind;
  8070.  
  8071.     short __spins;
  8072.     short __elision;
  8073.     __pthread_list_t __list;
  8074. # 124 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
  8075.   } __data;
  8076.   char __size[40];
  8077.   long int __align;
  8078. } pthread_mutex_t;
  8079.  
  8080. typedef union
  8081. {
  8082.   char __size[4];
  8083.   int __align;
  8084. } pthread_mutexattr_t;
  8085.  
  8086.  
  8087.  
  8088.  
  8089. typedef union
  8090. {
  8091.   struct
  8092.   {
  8093.     int __lock;
  8094.     unsigned int __futex;
  8095.     __extension__ unsigned long long int __total_seq;
  8096.     __extension__ unsigned long long int __wakeup_seq;
  8097.     __extension__ unsigned long long int __woken_seq;
  8098.     void *__mutex;
  8099.     unsigned int __nwaiters;
  8100.     unsigned int __broadcast_seq;
  8101.   } __data;
  8102.   char __size[48];
  8103.   __extension__ long long int __align;
  8104. } pthread_cond_t;
  8105.  
  8106. typedef union
  8107. {
  8108.   char __size[4];
  8109.   int __align;
  8110. } pthread_condattr_t;
  8111.  
  8112.  
  8113.  
  8114. typedef unsigned int pthread_key_t;
  8115.  
  8116.  
  8117.  
  8118. typedef int pthread_once_t;
  8119.  
  8120.  
  8121.  
  8122.  
  8123.  
  8124. typedef union
  8125. {
  8126.  
  8127.   struct
  8128.   {
  8129.     int __lock;
  8130.     unsigned int __nr_readers;
  8131.     unsigned int __readers_wakeup;
  8132.     unsigned int __writer_wakeup;
  8133.     unsigned int __nr_readers_queued;
  8134.     unsigned int __nr_writers_queued;
  8135.     int __writer;
  8136.     int __shared;
  8137.     unsigned long int __pad1;
  8138.     unsigned long int __pad2;
  8139.  
  8140.  
  8141.     unsigned int __flags;
  8142.  
  8143.   } __data;
  8144. # 211 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4
  8145.   char __size[56];
  8146.   long int __align;
  8147. } pthread_rwlock_t;
  8148.  
  8149. typedef union
  8150. {
  8151.   char __size[8];
  8152.   long int __align;
  8153. } pthread_rwlockattr_t;
  8154.  
  8155.  
  8156.  
  8157.  
  8158.  
  8159. typedef volatile int pthread_spinlock_t;
  8160.  
  8161.  
  8162.  
  8163.  
  8164. typedef union
  8165. {
  8166.   char __size[32];
  8167.   long int __align;
  8168. } pthread_barrier_t;
  8169.  
  8170. typedef union
  8171. {
  8172.   char __size[4];
  8173.   int __align;
  8174. } pthread_barrierattr_t;
  8175. # 271 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4
  8176.  
  8177.  
  8178. }
  8179. # 315 "/usr/include/stdlib.h" 2 3 4
  8180.  
  8181.  
  8182.  
  8183.  
  8184.  
  8185.  
  8186. extern long int random (void) throw ();
  8187.  
  8188.  
  8189. extern void srandom (unsigned int __seed) throw ();
  8190.  
  8191.  
  8192.  
  8193.  
  8194.  
  8195. extern char *initstate (unsigned int __seed, char *__statebuf,
  8196.    size_t __statelen) throw () __attribute__ ((__nonnull__ (2)));
  8197.  
  8198.  
  8199.  
  8200. extern char *setstate (char *__statebuf) throw () __attribute__ ((__nonnull__ (1)));
  8201.  
  8202.  
  8203.  
  8204.  
  8205.  
  8206.  
  8207.  
  8208. struct random_data
  8209.   {
  8210.     int32_t *fptr;
  8211.     int32_t *rptr;
  8212.     int32_t *state;
  8213.     int rand_type;
  8214.     int rand_deg;
  8215.     int rand_sep;
  8216.     int32_t *end_ptr;
  8217.   };
  8218.  
  8219. extern int random_r (struct random_data *__restrict __buf,
  8220.        int32_t *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
  8221.  
  8222. extern int srandom_r (unsigned int __seed, struct random_data *__buf)
  8223.      throw () __attribute__ ((__nonnull__ (2)));
  8224.  
  8225. extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
  8226.    size_t __statelen,
  8227.    struct random_data *__restrict __buf)
  8228.      throw () __attribute__ ((__nonnull__ (2, 4)));
  8229.  
  8230. extern int setstate_r (char *__restrict __statebuf,
  8231.          struct random_data *__restrict __buf)
  8232.      throw () __attribute__ ((__nonnull__ (1, 2)));
  8233.  
  8234.  
  8235.  
  8236.  
  8237.  
  8238.  
  8239. extern int rand (void) throw ();
  8240.  
  8241. extern void srand (unsigned int __seed) throw ();
  8242.  
  8243.  
  8244.  
  8245.  
  8246. extern int rand_r (unsigned int *__seed) throw ();
  8247.  
  8248.  
  8249.  
  8250.  
  8251.  
  8252.  
  8253.  
  8254. extern double drand48 (void) throw ();
  8255. extern double erand48 (unsigned short int __xsubi[3]) throw () __attribute__ ((__nonnull__ (1)));
  8256.  
  8257.  
  8258. extern long int lrand48 (void) throw ();
  8259. extern long int nrand48 (unsigned short int __xsubi[3])
  8260.      throw () __attribute__ ((__nonnull__ (1)));
  8261.  
  8262.  
  8263. extern long int mrand48 (void) throw ();
  8264. extern long int jrand48 (unsigned short int __xsubi[3])
  8265.      throw () __attribute__ ((__nonnull__ (1)));
  8266.  
  8267.  
  8268. extern void srand48 (long int __seedval) throw ();
  8269. extern unsigned short int *seed48 (unsigned short int __seed16v[3])
  8270.      throw () __attribute__ ((__nonnull__ (1)));
  8271. extern void lcong48 (unsigned short int __param[7]) throw () __attribute__ ((__nonnull__ (1)));
  8272.  
  8273.  
  8274.  
  8275.  
  8276.  
  8277. struct drand48_data
  8278.   {
  8279.     unsigned short int __x[3];
  8280.     unsigned short int __old_x[3];
  8281.     unsigned short int __c;
  8282.     unsigned short int __init;
  8283.     __extension__ unsigned long long int __a;
  8284.  
  8285.   };
  8286.  
  8287.  
  8288. extern int drand48_r (struct drand48_data *__restrict __buffer,
  8289.         double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
  8290. extern int erand48_r (unsigned short int __xsubi[3],
  8291.         struct drand48_data *__restrict __buffer,
  8292.         double *__restrict __result) throw () __attribute__ ((__nonnull__ (1, 2)));
  8293.  
  8294.  
  8295. extern int lrand48_r (struct drand48_data *__restrict __buffer,
  8296.         long int *__restrict __result)
  8297.      throw () __attribute__ ((__nonnull__ (1, 2)));
  8298. extern int nrand48_r (unsigned short int __xsubi[3],
  8299.         struct drand48_data *__restrict __buffer,
  8300.         long int *__restrict __result)
  8301.      throw () __attribute__ ((__nonnull__ (1, 2)));
  8302.  
  8303.  
  8304. extern int mrand48_r (struct drand48_data *__restrict __buffer,
  8305.         long int *__restrict __result)
  8306.      throw () __attribute__ ((__nonnull__ (1, 2)));
  8307. extern int jrand48_r (unsigned short int __xsubi[3],
  8308.         struct drand48_data *__restrict __buffer,
  8309.         long int *__restrict __result)
  8310.      throw () __attribute__ ((__nonnull__ (1, 2)));
  8311.  
  8312.  
  8313. extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
  8314.      throw () __attribute__ ((__nonnull__ (2)));
  8315.  
  8316. extern int seed48_r (unsigned short int __seed16v[3],
  8317.        struct drand48_data *__buffer) throw () __attribute__ ((__nonnull__ (1, 2)));
  8318.  
  8319. extern int lcong48_r (unsigned short int __param[7],
  8320.         struct drand48_data *__buffer)
  8321.      throw () __attribute__ ((__nonnull__ (1, 2)));
  8322. # 466 "/usr/include/stdlib.h" 3 4
  8323. extern void *malloc (size_t __size) throw () __attribute__ ((__malloc__)) ;
  8324.  
  8325. extern void *calloc (size_t __nmemb, size_t __size)
  8326.      throw () __attribute__ ((__malloc__)) ;
  8327. # 480 "/usr/include/stdlib.h" 3 4
  8328. extern void *realloc (void *__ptr, size_t __size)
  8329.      throw () __attribute__ ((__warn_unused_result__));
  8330.  
  8331. extern void free (void *__ptr) throw ();
  8332.  
  8333.  
  8334.  
  8335.  
  8336. extern void cfree (void *__ptr) throw ();
  8337.  
  8338.  
  8339.  
  8340.  
  8341. # 1 "/usr/include/alloca.h" 1 3 4
  8342. # 24 "/usr/include/alloca.h" 3 4
  8343. # 1 "/usr/include/clang-4053586/lib64/clang/5.0.300080/include/stddef.h" 1 3 4
  8344. # 25 "/usr/include/alloca.h" 2 3 4
  8345.  
  8346. extern "C" {
  8347.  
  8348.  
  8349.  
  8350.  
  8351.  
  8352. extern void *alloca (size_t __size) throw ();
  8353.  
  8354.  
  8355.  
  8356.  
  8357.  
  8358. }
  8359. # 493 "/usr/include/stdlib.h" 2 3 4
  8360.  
  8361.  
  8362.  
  8363.  
  8364.  
  8365. extern void *valloc (size_t __size) throw () __attribute__ ((__malloc__)) ;
  8366.  
  8367.  
  8368.  
  8369.  
  8370. extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
  8371.      throw () __attribute__ ((__nonnull__ (1))) ;
  8372.  
  8373.  
  8374.  
  8375.  
  8376. extern void *aligned_alloc (size_t __alignment, size_t __size)
  8377.      throw () __attribute__ ((__malloc__)) ;
  8378.  
  8379.  
  8380.  
  8381.  
  8382. extern void abort (void) throw () __attribute__ ((__noreturn__));
  8383.  
  8384.  
  8385.  
  8386. extern int atexit (void (*__func) (void)) throw () __attribute__ ((__nonnull__ (1)));
  8387.  
  8388.  
  8389.  
  8390.  
  8391. extern "C++" int at_quick_exit (void (*__func) (void))
  8392.      throw () __asm ("at_quick_exit") __attribute__ ((__nonnull__ (1)));
  8393. # 535 "/usr/include/stdlib.h" 3 4
  8394. extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
  8395.      throw () __attribute__ ((__nonnull__ (1)));
  8396.  
  8397.  
  8398.  
  8399.  
  8400.  
  8401.  
  8402. extern void exit (int __status) throw () __attribute__ ((__noreturn__));
  8403.  
  8404.  
  8405.  
  8406.  
  8407.  
  8408. extern void quick_exit (int __status) throw () __attribute__ ((__noreturn__));
  8409.  
  8410.  
  8411.  
  8412.  
  8413.  
  8414.  
  8415.  
  8416. extern void _Exit (int __status) throw () __attribute__ ((__noreturn__));
  8417.  
  8418.  
  8419.  
  8420.  
  8421.  
  8422.  
  8423. extern char *getenv (const char *__name) throw () __attribute__ ((__nonnull__ (1))) ;
  8424.  
  8425.  
  8426.  
  8427.  
  8428.  
  8429. extern char *secure_getenv (const char *__name)
  8430.      throw () __attribute__ ((__nonnull__ (1))) ;
  8431.  
  8432.  
  8433.  
  8434.  
  8435.  
  8436.  
  8437. extern int putenv (char *__string) throw () __attribute__ ((__nonnull__ (1)));
  8438.  
  8439.  
  8440.  
  8441.  
  8442.  
  8443. extern int setenv (const char *__name, const char *__value, int __replace)
  8444.      throw () __attribute__ ((__nonnull__ (2)));
  8445.  
  8446.  
  8447. extern int unsetenv (const char *__name) throw () __attribute__ ((__nonnull__ (1)));
  8448.  
  8449.  
  8450.  
  8451.  
  8452.  
  8453.  
  8454. extern int clearenv (void) throw ();
  8455. # 606 "/usr/include/stdlib.h" 3 4
  8456. extern char *mktemp (char *__template) throw () __attribute__ ((__nonnull__ (1)));
  8457. # 620 "/usr/include/stdlib.h" 3 4
  8458. extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) ;
  8459. # 630 "/usr/include/stdlib.h" 3 4
  8460. extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) ;
  8461. # 642 "/usr/include/stdlib.h" 3 4
  8462. extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) ;
  8463. # 652 "/usr/include/stdlib.h" 3 4
  8464. extern int mkstemps64 (char *__template, int __suffixlen)
  8465.      __attribute__ ((__nonnull__ (1))) ;
  8466. # 663 "/usr/include/stdlib.h" 3 4
  8467. extern char *mkdtemp (char *__template) throw () __attribute__ ((__nonnull__ (1))) ;
  8468. # 674 "/usr/include/stdlib.h" 3 4
  8469. extern int mkostemp (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ;
  8470. # 684 "/usr/include/stdlib.h" 3 4
  8471. extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ;
  8472. # 694 "/usr/include/stdlib.h" 3 4
  8473. extern int mkostemps (char *__template, int __suffixlen, int __flags)
  8474.      __attribute__ ((__nonnull__ (1))) ;
  8475. # 706 "/usr/include/stdlib.h" 3 4
  8476. extern int mkostemps64 (char *__template, int __suffixlen, int __flags)
  8477.      __attribute__ ((__nonnull__ (1))) ;
  8478. # 717 "/usr/include/stdlib.h" 3 4
  8479. extern int system (const char *__command) ;
  8480.  
  8481.  
  8482.  
  8483.  
  8484.  
  8485.  
  8486. extern char *canonicalize_file_name (const char *__name)
  8487.      throw () __attribute__ ((__nonnull__ (1))) ;
  8488. # 734 "/usr/include/stdlib.h" 3 4
  8489. extern char *realpath (const char *__restrict __name,
  8490.          char *__restrict __resolved) throw () ;
  8491.  
  8492.  
  8493.  
  8494.  
  8495.  
  8496.  
  8497. typedef int (*__compar_fn_t) (const void *, const void *);
  8498.  
  8499.  
  8500. typedef __compar_fn_t comparison_fn_t;
  8501.  
  8502.  
  8503.  
  8504. typedef int (*__compar_d_fn_t) (const void *, const void *, void *);
  8505.  
  8506.  
  8507.  
  8508.  
  8509.  
  8510. extern void *bsearch (const void *__key, const void *__base,
  8511.         size_t __nmemb, size_t __size, __compar_fn_t __compar)
  8512.      __attribute__ ((__nonnull__ (1, 2, 5))) ;
  8513.  
  8514.  
  8515.  
  8516.  
  8517.  
  8518.  
  8519.  
  8520. extern void qsort (void *__base, size_t __nmemb, size_t __size,
  8521.      __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
  8522.  
  8523. extern void qsort_r (void *__base, size_t __nmemb, size_t __size,
  8524.        __compar_d_fn_t __compar, void *__arg)
  8525.   __attribute__ ((__nonnull__ (1, 4)));
  8526.  
  8527.  
  8528.  
  8529.  
  8530. extern int abs (int __x) throw () __attribute__ ((__const__)) ;
  8531. extern long int labs (long int __x) throw () __attribute__ ((__const__)) ;
  8532.  
  8533.  
  8534.  
  8535. __extension__ extern long long int llabs (long long int __x)
  8536.      throw () __attribute__ ((__const__)) ;
  8537.  
  8538.  
  8539.  
  8540.  
  8541.  
  8542.  
  8543.  
  8544. extern div_t div (int __numer, int __denom)
  8545.      throw () __attribute__ ((__const__)) ;
  8546. extern ldiv_t ldiv (long int __numer, long int __denom)
  8547.      throw () __attribute__ ((__const__)) ;
  8548.  
  8549.  
  8550.  
  8551.  
  8552. __extension__ extern lldiv_t lldiv (long long int __numer,
  8553.         long long int __denom)
  8554.      throw () __attribute__ ((__const__)) ;
  8555. # 812 "/usr/include/stdlib.h" 3 4
  8556. extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
  8557.      int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ;
  8558.  
  8559.  
  8560.  
  8561.  
  8562. extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
  8563.      int *__restrict __sign) throw () __attribute__ ((__nonnull__ (3, 4))) ;
  8564.  
  8565.  
  8566.  
  8567.  
  8568. extern char *gcvt (double __value, int __ndigit, char *__buf)
  8569.      throw () __attribute__ ((__nonnull__ (3))) ;
  8570.  
  8571.  
  8572.  
  8573.  
  8574. extern char *qecvt (long double __value, int __ndigit,
  8575.       int *__restrict __decpt, int *__restrict __sign)
  8576.      throw () __attribute__ ((__nonnull__ (3, 4))) ;
  8577. extern char *qfcvt (long double __value, int __ndigit,
  8578.       int *__restrict __decpt, int *__restrict __sign)
  8579.      throw () __attribute__ ((__nonnull__ (3, 4))) ;
  8580. extern char *qgcvt (long double __value, int __ndigit, char *__buf)
  8581.      throw () __attribute__ ((__nonnull__ (3))) ;
  8582.  
  8583.  
  8584.  
  8585.  
  8586. extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
  8587.      int *__restrict __sign, char *__restrict __buf,
  8588.      size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
  8589. extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
  8590.      int *__restrict __sign, char *__restrict __buf,
  8591.      size_t __len) throw () __attribute__ ((__nonnull__ (3, 4, 5)));
  8592.  
  8593. extern int qecvt_r (long double __value, int __ndigit,
  8594.       int *__restrict __decpt, int *__restrict __sign,
  8595.       char *__restrict __buf, size_t __len)
  8596.      throw () __attribute__ ((__nonnull__ (3, 4, 5)));
  8597. extern int qfcvt_r (long double __value, int __ndigit,
  8598.       int *__restrict __decpt, int *__restrict __sign,
  8599.       char *__restrict __buf, size_t __len)
  8600.      throw () __attribute__ ((__nonnull__ (3, 4, 5)));
  8601.  
  8602.  
  8603.  
  8604.  
  8605.  
  8606.  
  8607. extern int mblen (const char *__s, size_t __n) throw ();
  8608.  
  8609.  
  8610. extern int mbtowc (wchar_t *__restrict __pwc,
  8611.      const char *__restrict __s, size_t __n) throw ();
  8612.  
  8613.  
  8614. extern int wctomb (char *__s, wchar_t __wchar) throw ();
  8615.  
  8616.  
  8617.  
  8618. extern size_t mbstowcs (wchar_t *__restrict __pwcs,
  8619.    const char *__restrict __s, size_t __n) throw ();
  8620.  
  8621. extern size_t wcstombs (char *__restrict __s,
  8622.    const wchar_t *__restrict __pwcs, size_t __n)
  8623.      throw ();
  8624. # 888 "/usr/include/stdlib.h" 3 4
  8625. extern int rpmatch (const char *__response) throw () __attribute__ ((__nonnull__ (1))) ;
  8626. # 899 "/usr/include/stdlib.h" 3 4
  8627. extern int getsubopt (char **__restrict __optionp,
  8628.         char *const *__restrict __tokens,
  8629.         char **__restrict __valuep)
  8630.      throw () __attribute__ ((__nonnull__ (1, 2, 3))) ;
  8631.  
  8632.  
  8633.  
  8634.  
  8635.  
  8636. extern void setkey (const char *__key) throw () __attribute__ ((__nonnull__ (1)));
  8637.  
  8638.  
  8639.  
  8640.  
  8641.  
  8642.  
  8643.  
  8644. extern int posix_openpt (int __oflag) ;
  8645.  
  8646.  
  8647.  
  8648.  
  8649.  
  8650.  
  8651.  
  8652. extern int grantpt (int __fd) throw ();
  8653.  
  8654.  
  8655.  
  8656. extern int unlockpt (int __fd) throw ();
  8657.  
  8658.  
  8659.  
  8660.  
  8661. extern char *ptsname (int __fd) throw () ;
  8662.  
  8663.  
  8664.  
  8665.  
  8666.  
  8667.  
  8668. extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
  8669.      throw () __attribute__ ((__nonnull__ (2)));
  8670.  
  8671.  
  8672. extern int getpt (void);
  8673.  
  8674.  
  8675.  
  8676.  
  8677.  
  8678.  
  8679. extern int getloadavg (double __loadavg[], int __nelem)
  8680.      throw () __attribute__ ((__nonnull__ (1)));
  8681.  
  8682.  
  8683.  
  8684. # 1 "/usr/include/x86_64-linux-gnu/bits/stdlib-float.h" 1 3 4
  8685. # 956 "/usr/include/stdlib.h" 2 3 4
  8686. # 968 "/usr/include/stdlib.h" 3 4
  8687. }
  8688. # 73 "/usr/include/c++/5.2.0/cstdlib" 2 3
  8689. # 114 "/usr/include/c++/5.2.0/cstdlib" 3
  8690. namespace std __attribute__ ((__visibility__ ("default")))
  8691. {
  8692.  
  8693.  
  8694.   using ::div_t;
  8695.   using ::ldiv_t;
  8696.  
  8697.   using ::abort;
  8698.   using ::abs;
  8699.   using ::atexit;
  8700.  
  8701.  
  8702.   using ::at_quick_exit;
  8703.  
  8704.  
  8705.   using ::atof;
  8706.   using ::atoi;
  8707.   using ::atol;
  8708.   using ::bsearch;
  8709.   using ::calloc;
  8710.   using ::div;
  8711.   using ::exit;
  8712.   using ::free;
  8713.   using ::getenv;
  8714.   using ::labs;
  8715.   using ::ldiv;
  8716.   using ::malloc;
  8717.  
  8718.   using ::mblen;
  8719.   using ::mbstowcs;
  8720.   using ::mbtowc;
  8721.  
  8722.   using ::qsort;
  8723.  
  8724.  
  8725.   using ::quick_exit;
  8726.  
  8727.  
  8728.   using ::rand;
  8729.   using ::realloc;
  8730.   using ::srand;
  8731.   using ::strtod;
  8732.   using ::strtol;
  8733.   using ::strtoul;
  8734.   using ::system;
  8735.  
  8736.   using ::wcstombs;
  8737.   using ::wctomb;
  8738.  
  8739.  
  8740.  
  8741.   inline long
  8742.   abs(long __i) { return __builtin_labs(__i); }
  8743.  
  8744.   inline ldiv_t
  8745.   div(long __i, long __j) { return ldiv(__i, __j); }
  8746.  
  8747.  
  8748.  
  8749.   inline long long
  8750.   abs(long long __x) { return __builtin_llabs (__x); }
  8751. # 196 "/usr/include/c++/5.2.0/cstdlib" 3
  8752. }
  8753. # 209 "/usr/include/c++/5.2.0/cstdlib" 3
  8754. namespace __gnu_cxx __attribute__ ((__visibility__ ("default")))
  8755. {
  8756.  
  8757.  
  8758.  
  8759.   using ::lldiv_t;
  8760.  
  8761.  
  8762.  
  8763.  
  8764.  
  8765.   using ::_Exit;
  8766.  
  8767.  
  8768.  
  8769.   using ::llabs;
  8770.  
  8771.   inline lldiv_t
  8772.   div(long long __n, long long __d)
  8773.   { lldiv_t __q; __q.quot = __n / __d; __q.rem = __n % __d; return __q; }
  8774.  
  8775.   using ::lldiv;
  8776. # 241 "/usr/include/c++/5.2.0/cstdlib" 3
  8777.   using ::atoll;
  8778.   using ::strtoll;
  8779.   using ::strtoull;
  8780.  
  8781.   using ::strtof;
  8782.   using ::strtold;
  8783.  
  8784.  
  8785. }
  8786.  
  8787. namespace std
  8788. {
  8789.  
  8790.   using ::__gnu_cxx::lldiv_t;
  8791.  
  8792.   using ::__gnu_cxx::_Exit;
  8793.  
  8794.   using ::__gnu_cxx::llabs;
  8795.   using ::__gnu_cxx::div;
  8796.   using ::__gnu_cxx::lldiv;
  8797.  
  8798.   using ::__gnu_cxx::atoll;
  8799.   using ::__gnu_cxx::strtof;
  8800.   using ::__gnu_cxx::strtoll;
  8801.   using ::__gnu_cxx::strtoull;
  8802.   using ::__gnu_cxx::strtold;
  8803. }
  8804. # 20 "/us/include/boost_1_64_0/boost/hana/assert.hpp" 2
  8805. # 16 "test.cpp" 2
  8806.  
  8807. # 1 "/us/include/boost_1_64_0/boost/hana/equal.hpp" 1
  8808. # 16 "/us/include/boost_1_64_0/boost/hana/equal.hpp"
  8809. # 1 "/us/include/boost_1_64_0/boost/hana/all_of.hpp" 1
  8810. # 13 "/us/include/boost_1_64_0/boost/hana/all_of.hpp"
  8811. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/all_of.hpp" 1
  8812. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/all_of.hpp"
  8813. namespace boost { namespace hana {
  8814. # 42 "/us/include/boost_1_64_0/boost/hana/fwd/all_of.hpp"
  8815.     template <typename S, typename = void>
  8816.     struct all_of_impl : all_of_impl<S, when<true>> { };
  8817.  
  8818.     struct all_of_t {
  8819.         template <typename Xs, typename Pred>
  8820.         constexpr auto operator()(Xs&& xs, Pred&& pred) const;
  8821.     };
  8822.  
  8823.     constexpr all_of_t all_of{};
  8824.  
  8825. }}
  8826. # 13 "/us/include/boost_1_64_0/boost/hana/all_of.hpp" 2
  8827.  
  8828.  
  8829. # 1 "/us/include/boost_1_64_0/boost/hana/any_of.hpp" 1
  8830. # 13 "/us/include/boost_1_64_0/boost/hana/any_of.hpp"
  8831. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/any_of.hpp" 1
  8832. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/any_of.hpp"
  8833. namespace boost { namespace hana {
  8834. # 41 "/us/include/boost_1_64_0/boost/hana/fwd/any_of.hpp"
  8835.     template <typename S, typename = void>
  8836.     struct any_of_impl : any_of_impl<S, when<true>> { };
  8837.  
  8838.     struct any_of_t {
  8839.         template <typename Xs, typename Pred>
  8840.         constexpr auto operator()(Xs&& xs, Pred&& pred) const;
  8841.     };
  8842.  
  8843.     constexpr any_of_t any_of{};
  8844.  
  8845. }}
  8846. # 13 "/us/include/boost_1_64_0/boost/hana/any_of.hpp" 2
  8847.  
  8848.  
  8849.  
  8850.  
  8851.  
  8852. # 1 "/us/include/boost_1_64_0/boost/hana/concept/searchable.hpp" 1
  8853. # 13 "/us/include/boost_1_64_0/boost/hana/concept/searchable.hpp"
  8854. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/searchable.hpp" 1
  8855. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/searchable.hpp"
  8856. namespace boost { namespace hana {
  8857. # 139 "/us/include/boost_1_64_0/boost/hana/fwd/concept/searchable.hpp"
  8858.     template <typename S>
  8859.     struct Searchable;
  8860. }}
  8861. # 13 "/us/include/boost_1_64_0/boost/hana/concept/searchable.hpp" 2
  8862.  
  8863.  
  8864. # 1 "/us/include/boost_1_64_0/boost/hana/any_of.hpp" 1
  8865. # 15 "/us/include/boost_1_64_0/boost/hana/concept/searchable.hpp" 2
  8866.  
  8867.  
  8868.  
  8869.  
  8870.  
  8871. # 1 "/us/include/boost_1_64_0/boost/hana/find_if.hpp" 1
  8872. # 13 "/us/include/boost_1_64_0/boost/hana/find_if.hpp"
  8873. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/find_if.hpp" 1
  8874. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/find_if.hpp"
  8875. namespace boost { namespace hana {
  8876. # 45 "/us/include/boost_1_64_0/boost/hana/fwd/find_if.hpp"
  8877.     template <typename S, typename = void>
  8878.     struct find_if_impl : find_if_impl<S, when<true>> { };
  8879.  
  8880.     struct find_if_t {
  8881.         template <typename Xs, typename Pred>
  8882.         constexpr auto operator()(Xs&& xs, Pred&& pred) const;
  8883.     };
  8884.  
  8885.     constexpr find_if_t find_if{};
  8886.  
  8887. }}
  8888. # 13 "/us/include/boost_1_64_0/boost/hana/find_if.hpp" 2
  8889.  
  8890.  
  8891.  
  8892.  
  8893.  
  8894.  
  8895. # 1 "/us/include/boost_1_64_0/boost/hana/concept/searchable.hpp" 1
  8896. # 19 "/us/include/boost_1_64_0/boost/hana/find_if.hpp" 2
  8897.  
  8898.  
  8899.  
  8900.  
  8901.  
  8902.  
  8903. # 1 "/us/include/boost_1_64_0/boost/hana/drop_while.hpp" 1
  8904. # 13 "/us/include/boost_1_64_0/boost/hana/drop_while.hpp"
  8905. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/drop_while.hpp" 1
  8906. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/drop_while.hpp"
  8907. namespace boost { namespace hana {
  8908. # 48 "/us/include/boost_1_64_0/boost/hana/fwd/drop_while.hpp"
  8909.     template <typename It, typename = void>
  8910.     struct drop_while_impl : drop_while_impl<It, when<true>> { };
  8911.  
  8912.     struct drop_while_t {
  8913.         template <typename Xs, typename Pred>
  8914.         constexpr auto operator()(Xs&& xs, Pred&& pred) const;
  8915.     };
  8916.  
  8917.     constexpr drop_while_t drop_while{};
  8918.  
  8919. }}
  8920. # 13 "/us/include/boost_1_64_0/boost/hana/drop_while.hpp" 2
  8921.  
  8922.  
  8923.  
  8924.  
  8925.  
  8926.  
  8927. # 1 "/us/include/boost_1_64_0/boost/hana/detail/first_unsatisfied_index.hpp" 1
  8928. # 20 "/us/include/boost_1_64_0/boost/hana/detail/first_unsatisfied_index.hpp"
  8929. namespace boost { namespace hana { namespace detail {
  8930.     template <bool, typename Pred, typename ...Xs>
  8931.     struct find_tail_size;
  8932.  
  8933.     template <typename Pred, typename X, typename ...Xs>
  8934.     struct find_tail_size<true, Pred, X, Xs...> {
  8935.         static constexpr int value = find_tail_size<
  8936.             static_cast<bool>(hana::value<decltype(std::declval<Pred>()(std::declval<X>()))>()),
  8937.             Pred, Xs...
  8938.         >::value;
  8939.     };
  8940.  
  8941.     template <typename Pred>
  8942.     struct find_tail_size<true, Pred> {
  8943.         static constexpr int value = -1;
  8944.     };
  8945.  
  8946.     template <typename Pred, typename ...Xs>
  8947.     struct find_tail_size<false, Pred, Xs...> {
  8948.         static constexpr int value = sizeof...(Xs);
  8949.     };
  8950.  
  8951.  
  8952.  
  8953.  
  8954.     template <typename Pred>
  8955.     struct first_unsatisfied_index {
  8956.         template <typename ...Xs>
  8957.         constexpr auto operator()(Xs&& ...) const {
  8958.             return hana::size_c<
  8959.                 sizeof...(Xs) - 1 - find_tail_size<true, Pred, Xs&&...>::value
  8960.             >;
  8961.         }
  8962.     };
  8963. } }}
  8964. # 19 "/us/include/boost_1_64_0/boost/hana/drop_while.hpp" 2
  8965.  
  8966.  
  8967.  
  8968. # 1 "/us/include/boost_1_64_0/boost/hana/front.hpp" 1
  8969. # 13 "/us/include/boost_1_64_0/boost/hana/front.hpp"
  8970. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/front.hpp" 1
  8971. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/front.hpp"
  8972. namespace boost { namespace hana {
  8973. # 36 "/us/include/boost_1_64_0/boost/hana/fwd/front.hpp"
  8974.     template <typename It, typename = void>
  8975.     struct front_impl : front_impl<It, when<true>> { };
  8976.  
  8977.     struct front_t {
  8978.         template <typename Xs>
  8979.         constexpr decltype(auto) operator()(Xs&& xs) const;
  8980.     };
  8981.  
  8982.     constexpr front_t front{};
  8983.  
  8984. }}
  8985. # 13 "/us/include/boost_1_64_0/boost/hana/front.hpp" 2
  8986.  
  8987.  
  8988.  
  8989.  
  8990.  
  8991.  
  8992.  
  8993.  
  8994. namespace boost { namespace hana {
  8995.  
  8996.     template <typename Xs>
  8997.     constexpr decltype(auto) front_t::operator()(Xs&& xs) const {
  8998.         using It = typename hana::tag_of<Xs>::type;
  8999.         using Front = ::std::conditional_t< (hana::Iterable<It>::value), front_impl<It>, ::boost::hana::deleted_implementation >;
  9000.  
  9001.  
  9002.  
  9003.  
  9004.         static_assert(hana::Iterable<It>::value,
  9005.         "hana::front(xs) requires 'xs' to be an Iterable");
  9006.  
  9007.  
  9008.         return Front::apply(static_cast<Xs&&>(xs));
  9009.     }
  9010.  
  9011.  
  9012.     template <typename It, bool condition>
  9013.     struct front_impl<It, when<condition>> : default_ {
  9014.         template <typename Xs>
  9015.         static constexpr decltype(auto) apply(Xs&& xs)
  9016.         { return hana::at_c<0>(static_cast<Xs&&>(xs)); }
  9017.     };
  9018. }}
  9019. # 22 "/us/include/boost_1_64_0/boost/hana/drop_while.hpp" 2
  9020.  
  9021.  
  9022. # 1 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 1
  9023. # 13 "/us/include/boost_1_64_0/boost/hana/lazy.hpp"
  9024. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/lazy.hpp" 1
  9025. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/lazy.hpp"
  9026. namespace boost { namespace hana {
  9027. # 85 "/us/include/boost_1_64_0/boost/hana/fwd/lazy.hpp"
  9028.     struct lazy_tag { };
  9029. # 121 "/us/include/boost_1_64_0/boost/hana/fwd/lazy.hpp"
  9030.     constexpr auto make_lazy = make<lazy_tag>;
  9031. }}
  9032. # 13 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
  9033.  
  9034.  
  9035.  
  9036.  
  9037.  
  9038.  
  9039.  
  9040. # 1 "/us/include/boost_1_64_0/boost/hana/detail/operators/monad.hpp" 1
  9041. # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/monad.hpp"
  9042. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/chain.hpp" 1
  9043. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/chain.hpp"
  9044. namespace boost { namespace hana {
  9045. # 55 "/us/include/boost_1_64_0/boost/hana/fwd/chain.hpp"
  9046.     template <typename M, typename = void>
  9047.     struct chain_impl : chain_impl<M, when<true>> { };
  9048.  
  9049.     struct chain_t {
  9050.         template <typename Xs, typename F>
  9051.         constexpr decltype(auto) operator()(Xs&& xs, F&& f) const;
  9052.     };
  9053.  
  9054.     constexpr chain_t chain{};
  9055.  
  9056. }}
  9057. # 15 "/us/include/boost_1_64_0/boost/hana/detail/operators/monad.hpp" 2
  9058.  
  9059.  
  9060.  
  9061.  
  9062.  
  9063. namespace boost { namespace hana { namespace detail {
  9064.     template <typename Tag>
  9065.     struct monad_operators {
  9066.         static constexpr bool value = false;
  9067.     };
  9068.  
  9069.     namespace operators {
  9070.         template <typename Xs, typename F, typename = typename std::enable_if<
  9071.             detail::monad_operators<typename hana::tag_of<Xs>::type>::value
  9072.         >::type>
  9073.         constexpr auto operator|(Xs&& xs, F&& f)
  9074.         { return hana::chain(static_cast<Xs&&>(xs), static_cast<F&&>(f)); }
  9075.     }
  9076. } }}
  9077. # 20 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
  9078.  
  9079. # 1 "/us/include/boost_1_64_0/boost/hana/functional/apply.hpp" 1
  9080. # 16 "/us/include/boost_1_64_0/boost/hana/functional/apply.hpp"
  9081. namespace boost { namespace hana {
  9082. # 44 "/us/include/boost_1_64_0/boost/hana/functional/apply.hpp"
  9083.     struct apply_t {
  9084.         template <typename F, typename... Args>
  9085.         constexpr auto operator()(F&& f, Args&&... args) const ->
  9086.             decltype(static_cast<F&&>(f)(static_cast<Args&&>(args)...))
  9087.         {
  9088.             return static_cast<F&&>(f)(static_cast<Args&&>(args)...);
  9089.         }
  9090.  
  9091.         template <typename Base, typename T, typename Derived>
  9092.         constexpr auto operator()(T Base::*pmd, Derived&& ref) const ->
  9093.             decltype(static_cast<Derived&&>(ref).*pmd)
  9094.         {
  9095.             return static_cast<Derived&&>(ref).*pmd;
  9096.         }
  9097.  
  9098.         template <typename PMD, typename Pointer>
  9099.         constexpr auto operator()(PMD pmd, Pointer&& ptr) const ->
  9100.             decltype((*static_cast<Pointer&&>(ptr)).*pmd)
  9101.         {
  9102.             return (*static_cast<Pointer&&>(ptr)).*pmd;
  9103.         }
  9104.  
  9105.         template <typename Base, typename T, typename Derived, typename... Args>
  9106.         constexpr auto operator()(T Base::*pmf, Derived&& ref, Args&&... args) const ->
  9107.             decltype((static_cast<Derived&&>(ref).*pmf)(static_cast<Args&&>(args)...))
  9108.         {
  9109.             return (static_cast<Derived&&>(ref).*pmf)(static_cast<Args&&>(args)...);
  9110.         }
  9111.  
  9112.         template <typename PMF, typename Pointer, typename... Args>
  9113.         constexpr auto operator()(PMF pmf, Pointer&& ptr, Args&& ...args) const ->
  9114.             decltype(((*static_cast<Pointer&&>(ptr)).*pmf)(static_cast<Args&&>(args)...))
  9115.         {
  9116.             return ((*static_cast<Pointer&&>(ptr)).*pmf)(static_cast<Args&&>(args)...);
  9117.         }
  9118.     };
  9119.  
  9120.     constexpr apply_t apply{};
  9121.  
  9122. }}
  9123. # 21 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
  9124.  
  9125. # 1 "/us/include/boost_1_64_0/boost/hana/functional/compose.hpp" 1
  9126. # 14 "/us/include/boost_1_64_0/boost/hana/functional/compose.hpp"
  9127. # 1 "/us/include/boost_1_64_0/boost/hana/detail/create.hpp" 1
  9128. # 17 "/us/include/boost_1_64_0/boost/hana/detail/create.hpp"
  9129. namespace boost { namespace hana { namespace detail {
  9130.  
  9131.  
  9132.  
  9133.     template <template <typename ...> class T>
  9134.     struct create {
  9135.         template <typename ...X>
  9136.         constexpr T<typename detail::decay<X>::type...>
  9137.         operator()(X&& ...x) const {
  9138.             return T<typename detail::decay<X>::type...>{
  9139.                 static_cast<X&&>(x)...
  9140.             };
  9141.         }
  9142.     };
  9143. } }}
  9144. # 14 "/us/include/boost_1_64_0/boost/hana/functional/compose.hpp" 2
  9145.  
  9146.  
  9147.  
  9148.  
  9149.  
  9150.  
  9151. namespace boost { namespace hana {
  9152. # 64 "/us/include/boost_1_64_0/boost/hana/functional/compose.hpp"
  9153.     template <typename F, typename G>
  9154.     struct _compose {
  9155.         F f; G g;
  9156.  
  9157.         template <typename X, typename ...Xs>
  9158.         constexpr decltype(auto) operator()(X&& x, Xs&& ...xs) const& {
  9159.             return f(
  9160.                 g(static_cast<X&&>(x)),
  9161.                 static_cast<Xs&&>(xs)...
  9162.             );
  9163.         }
  9164.  
  9165.         template <typename X, typename ...Xs>
  9166.         constexpr decltype(auto) operator()(X&& x, Xs&& ...xs) & {
  9167.             return f(
  9168.                 g(static_cast<X&&>(x)),
  9169.                 static_cast<Xs&&>(xs)...
  9170.             );
  9171.         }
  9172.  
  9173.         template <typename X, typename ...Xs>
  9174.         constexpr decltype(auto) operator()(X&& x, Xs&& ...xs) && {
  9175.             return std::move(f)(
  9176.                 std::move(g)(static_cast<X&&>(x)),
  9177.                 static_cast<Xs&&>(xs)...
  9178.             );
  9179.         }
  9180.     };
  9181.  
  9182.     struct _make_compose {
  9183.         template <typename F, typename G, typename ...H>
  9184.         constexpr decltype(auto) operator()(F&& f, G&& g, H&& ...h) const {
  9185.             return detail::variadic::foldl1(detail::create<_compose>{},
  9186.                 static_cast<F&&>(f),
  9187.                 static_cast<G&&>(g),
  9188.                 static_cast<H&&>(h)...
  9189.             );
  9190.         }
  9191.     };
  9192.  
  9193.     constexpr _make_compose compose{};
  9194.  
  9195. }}
  9196. # 22 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
  9197.  
  9198. # 1 "/us/include/boost_1_64_0/boost/hana/functional/on.hpp" 1
  9199. # 15 "/us/include/boost_1_64_0/boost/hana/functional/on.hpp"
  9200. # 1 "/us/include/boost_1_64_0/boost/hana/functional/infix.hpp" 1
  9201. # 16 "/us/include/boost_1_64_0/boost/hana/functional/infix.hpp"
  9202. # 1 "/us/include/boost_1_64_0/boost/hana/functional/reverse_partial.hpp" 1
  9203. # 21 "/us/include/boost_1_64_0/boost/hana/functional/reverse_partial.hpp"
  9204. namespace boost { namespace hana {
  9205. # 48 "/us/include/boost_1_64_0/boost/hana/functional/reverse_partial.hpp"
  9206.     template <typename Indices, typename F, typename ...X>
  9207.     struct reverse_partial_t;
  9208.  
  9209.     struct make_reverse_partial_t {
  9210.         struct secret { };
  9211.         template <typename F, typename ...X>
  9212.         constexpr reverse_partial_t<
  9213.             std::make_index_sequence<sizeof...(X)>,
  9214.             typename detail::decay<F>::type,
  9215.             typename detail::decay<X>::type...
  9216.         > operator()(F&& f, X&& ...x) const {
  9217.             return {secret{}, static_cast<F&&>(f), static_cast<X&&>(x)...};
  9218.         }
  9219.     };
  9220.  
  9221.     template <std::size_t ...n, typename F, typename ...X>
  9222.     struct reverse_partial_t<std::index_sequence<n...>, F, X...> {
  9223.         reverse_partial_t() = default;
  9224.  
  9225.         template <typename ...T>
  9226.         constexpr reverse_partial_t(make_reverse_partial_t::secret, T&& ...t)
  9227.             : storage_{static_cast<T&&>(t)...}
  9228.         { }
  9229.  
  9230.         basic_tuple<F, X...> storage_;
  9231.  
  9232.         template <typename ...Y>
  9233.         constexpr decltype(auto) operator()(Y&& ...y) const& {
  9234.             return hana::at_c<0>(storage_)(
  9235.                 static_cast<Y&&>(y)...,
  9236.                 hana::at_c<n+1>(storage_)...
  9237.             );
  9238.         }
  9239.  
  9240.         template <typename ...Y>
  9241.         constexpr decltype(auto) operator()(Y&& ...y) & {
  9242.             return hana::at_c<0>(storage_)(
  9243.                 static_cast<Y&&>(y)...,
  9244.                 hana::at_c<n+1>(storage_)...
  9245.             );
  9246.         }
  9247.  
  9248.         template <typename ...Y>
  9249.         constexpr decltype(auto) operator()(Y&& ...y) && {
  9250.             return static_cast<F&&>(hana::at_c<0>(storage_))(
  9251.                 static_cast<Y&&>(y)...,
  9252.                 static_cast<X&&>(hana::at_c<n+1>(storage_))...
  9253.             );
  9254.         }
  9255.     };
  9256.  
  9257.     constexpr make_reverse_partial_t reverse_partial{};
  9258.  
  9259. }}
  9260. # 16 "/us/include/boost_1_64_0/boost/hana/functional/infix.hpp" 2
  9261.  
  9262.  
  9263.  
  9264.  
  9265.  
  9266.  
  9267. namespace boost { namespace hana {
  9268. # 83 "/us/include/boost_1_64_0/boost/hana/functional/infix.hpp"
  9269.     namespace infix_detail {
  9270.  
  9271.  
  9272.         template <bool left, bool right, typename F>
  9273.         struct infix_t {
  9274.             F f;
  9275.  
  9276.             template <typename ...X>
  9277.             constexpr decltype(auto) operator()(X&& ...x) const&
  9278.             { return f(static_cast<X&&>(x)...); }
  9279.  
  9280.             template <typename ...X>
  9281.             constexpr decltype(auto) operator()(X&& ...x) &
  9282.             { return f(static_cast<X&&>(x)...); }
  9283.  
  9284.             template <typename ...X>
  9285.             constexpr decltype(auto) operator()(X&& ...x) &&
  9286.             { return std::move(f)(static_cast<X&&>(x)...); }
  9287.         };
  9288.  
  9289.         template <bool left, bool right>
  9290.         struct make_infix {
  9291.             template <typename F>
  9292.             constexpr infix_t<left, right, typename detail::decay<F>::type>
  9293.             operator()(F&& f) const { return {static_cast<F&&>(f)}; }
  9294.         };
  9295.  
  9296.         template <bool left, bool right>
  9297.         struct Infix;
  9298.         struct Object;
  9299.  
  9300.         template <typename T>
  9301.         struct dispatch { using type = Object; };
  9302.  
  9303.         template <bool left, bool right, typename F>
  9304.         struct dispatch<infix_t<left, right, F>> {
  9305.             using type = Infix<left, right>;
  9306.         };
  9307.  
  9308.         template <typename, typename>
  9309.         struct bind_infix;
  9310.  
  9311.  
  9312.         template <>
  9313.         struct bind_infix<Infix<false, false>, Object> {
  9314.             template <typename F, typename Y>
  9315.             static constexpr decltype(auto) apply(F&& f, Y&& y) {
  9316.                 return make_infix<false, true>{}(
  9317.                     hana::reverse_partial(
  9318.                         static_cast<F&&>(f), static_cast<Y&&>(y)
  9319.                     )
  9320.                 );
  9321.             }
  9322.         };
  9323.  
  9324.  
  9325.         template <>
  9326.         struct bind_infix<Infix<true, false>, Object> {
  9327.             template <typename F, typename Y>
  9328.             static constexpr decltype(auto) apply(F&& f, Y&& y) {
  9329.                 return static_cast<F&&>(f)(static_cast<Y&&>(y));
  9330.             }
  9331.         };
  9332.  
  9333.  
  9334.         template <>
  9335.         struct bind_infix<Object, Infix<false, false>> {
  9336.             template <typename X, typename F>
  9337.             static constexpr decltype(auto) apply(X&& x, F&& f) {
  9338.                 return make_infix<true, false>{}(
  9339.                     hana::partial(static_cast<F&&>(f), static_cast<X&&>(x))
  9340.                 );
  9341.             }
  9342.         };
  9343.  
  9344.  
  9345.         template <>
  9346.         struct bind_infix<Object, Infix<false, true>> {
  9347.             template <typename X, typename F>
  9348.             static constexpr decltype(auto) apply(X&& x, F&& f) {
  9349.                 return static_cast<F&&>(f)(static_cast<X&&>(x));
  9350.             }
  9351.         };
  9352.  
  9353.         template <typename T>
  9354.         using strip = typename std::remove_cv<
  9355.             typename std::remove_reference<T>::type
  9356.         >::type;
  9357.  
  9358.         template <typename X, typename Y>
  9359.         constexpr decltype(auto) operator^(X&& x, Y&& y) {
  9360.             return bind_infix<
  9361.                 typename dispatch<strip<X>>::type,
  9362.                 typename dispatch<strip<Y>>::type
  9363.             >::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
  9364.         }
  9365.     }
  9366.  
  9367.     constexpr infix_detail::make_infix<false, false> infix{};
  9368.  
  9369. }}
  9370. # 15 "/us/include/boost_1_64_0/boost/hana/functional/on.hpp" 2
  9371.  
  9372.  
  9373.  
  9374.  
  9375.  
  9376. namespace boost { namespace hana {
  9377. # 60 "/us/include/boost_1_64_0/boost/hana/functional/on.hpp"
  9378.     template <typename F, typename G>
  9379.     struct on_t {
  9380.         F f; G g;
  9381.         template <typename ...X>
  9382.         constexpr decltype(auto) operator()(X&& ...x) const& {
  9383.             return f(g(static_cast<X&&>(x))...);
  9384.         }
  9385.  
  9386.         template <typename ...X>
  9387.         constexpr decltype(auto) operator()(X&& ...x) & {
  9388.             return f(g(static_cast<X&&>(x))...);
  9389.         }
  9390.  
  9391.         template <typename ...X>
  9392.         constexpr decltype(auto) operator()(X&& ...x) && {
  9393.             return std::move(f)(g(static_cast<X&&>(x))...);
  9394.         }
  9395.     };
  9396.  
  9397.     constexpr auto on = infix(detail::create<on_t>{});
  9398.  
  9399. }}
  9400. # 23 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
  9401.  
  9402. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/ap.hpp" 1
  9403. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/ap.hpp"
  9404. namespace boost { namespace hana {
  9405. # 67 "/us/include/boost_1_64_0/boost/hana/fwd/ap.hpp"
  9406.     template <typename A, typename = void>
  9407.     struct ap_impl : ap_impl<A, when<true>> { };
  9408.  
  9409.     struct ap_t {
  9410.         template <typename F, typename X>
  9411.         constexpr decltype(auto) operator()(F&& f, X&& x) const;
  9412.  
  9413.         template <typename F, typename ...Xs>
  9414.         constexpr decltype(auto) operator()(F&& f, Xs&& ...xs) const;
  9415.     };
  9416.  
  9417.     constexpr ap_t ap{};
  9418.  
  9419. }}
  9420. # 24 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
  9421.  
  9422. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/duplicate.hpp" 1
  9423. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/duplicate.hpp"
  9424. namespace boost { namespace hana {
  9425. # 45 "/us/include/boost_1_64_0/boost/hana/fwd/duplicate.hpp"
  9426.     template <typename W, typename = void>
  9427.     struct duplicate_impl : duplicate_impl<W, when<true>> { };
  9428.  
  9429.     struct duplicate_t {
  9430.         template <typename W_>
  9431.         constexpr decltype(auto) operator()(W_&& w) const;
  9432.     };
  9433.  
  9434.     constexpr duplicate_t duplicate{};
  9435.  
  9436. }}
  9437. # 25 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
  9438.  
  9439.  
  9440. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/extend.hpp" 1
  9441. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/extend.hpp"
  9442. namespace boost { namespace hana {
  9443. # 50 "/us/include/boost_1_64_0/boost/hana/fwd/extend.hpp"
  9444.     template <typename W, typename = void>
  9445.     struct extend_impl : extend_impl<W, when<true>> { };
  9446.  
  9447.     struct extend_t {
  9448.         template <typename W_, typename F>
  9449.         constexpr decltype(auto) operator()(W_&& w, F&& f) const;
  9450.     };
  9451.  
  9452.     constexpr extend_t extend{};
  9453.  
  9454. }}
  9455. # 27 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
  9456.  
  9457. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/extract.hpp" 1
  9458. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/extract.hpp"
  9459. namespace boost { namespace hana {
  9460. # 46 "/us/include/boost_1_64_0/boost/hana/fwd/extract.hpp"
  9461.     template <typename W, typename = void>
  9462.     struct extract_impl : extract_impl<W, when<true>> { };
  9463.  
  9464.     struct extract_t {
  9465.         template <typename W_>
  9466.         constexpr decltype(auto) operator()(W_&& w) const;
  9467.     };
  9468.  
  9469.     constexpr extract_t extract{};
  9470.  
  9471. }}
  9472. # 28 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
  9473.  
  9474. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/flatten.hpp" 1
  9475. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/flatten.hpp"
  9476. namespace boost { namespace hana {
  9477. # 51 "/us/include/boost_1_64_0/boost/hana/fwd/flatten.hpp"
  9478.     template <typename M, typename = void>
  9479.     struct flatten_impl : flatten_impl<M, when<true>> { };
  9480.  
  9481.     struct flatten_t {
  9482.         template <typename Xs>
  9483.         constexpr auto operator()(Xs&& xs) const;
  9484.     };
  9485.  
  9486.     constexpr flatten_t flatten{};
  9487.  
  9488. }}
  9489. # 29 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
  9490.  
  9491. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/lift.hpp" 1
  9492. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/lift.hpp"
  9493. namespace boost { namespace hana {
  9494. # 48 "/us/include/boost_1_64_0/boost/hana/fwd/lift.hpp"
  9495.     template <typename A, typename = void>
  9496.     struct lift_impl : lift_impl<A, when<true>> { };
  9497.  
  9498.     template <typename A>
  9499.     struct lift_t;
  9500.  
  9501.     template <typename A>
  9502.     constexpr lift_t<A> lift{};
  9503.  
  9504. }}
  9505. # 30 "/us/include/boost_1_64_0/boost/hana/lazy.hpp" 2
  9506.  
  9507.  
  9508.  
  9509.  
  9510.  
  9511.  
  9512.  
  9513.  
  9514. namespace boost { namespace hana {
  9515.  
  9516.  
  9517.  
  9518.     template <typename Indices, typename F, typename ...Args>
  9519.     struct lazy_apply_t;
  9520.  
  9521.     namespace detail { struct lazy_secret { }; }
  9522.  
  9523.     template <std::size_t ...n, typename F, typename ...Args>
  9524.     struct lazy_apply_t<std::index_sequence<n...>, F, Args...>
  9525.         : detail::operators::adl<>
  9526.     {
  9527.         template <typename ...T>
  9528.         constexpr lazy_apply_t(detail::lazy_secret, T&& ...t)
  9529.             : storage_{static_cast<T&&>(t)...}
  9530.         { }
  9531.  
  9532.         basic_tuple<F, Args...> storage_;
  9533.         using hana_tag = lazy_tag;
  9534.     };
  9535.  
  9536.     template <typename X>
  9537.     struct lazy_value_t : detail::operators::adl<> {
  9538.         template <typename Y>
  9539.         constexpr lazy_value_t(detail::lazy_secret, Y&& y)
  9540.             : storage_{static_cast<Y&&>(y)}
  9541.         { }
  9542.  
  9543.         basic_tuple<X> storage_;
  9544.         using hana_tag = lazy_tag;
  9545.  
  9546.  
  9547.         template <typename ...Args>
  9548.         constexpr lazy_apply_t<
  9549.             std::make_index_sequence<sizeof...(Args)>,
  9550.             X, typename detail::decay<Args>::type...
  9551.         > operator()(Args&& ...args) const& {
  9552.             return {detail::lazy_secret{},
  9553.                     hana::at_c<0>(storage_), static_cast<Args&&>(args)...};
  9554.         }
  9555.  
  9556.         template <typename ...Args>
  9557.         constexpr lazy_apply_t<
  9558.             std::make_index_sequence<sizeof...(Args)>,
  9559.             X, typename detail::decay<Args>::type...
  9560.         > operator()(Args&& ...args) && {
  9561.             return {detail::lazy_secret{},
  9562.                 static_cast<X&&>(hana::at_c<0>(storage_)),
  9563.                 static_cast<Args&&>(args)...
  9564.             };
  9565.         }
  9566.     };
  9567.  
  9568.  
  9569.  
  9570.  
  9571.     template <>
  9572.     struct make_impl<lazy_tag> {
  9573.         template <typename X>
  9574.         static constexpr lazy_value_t<typename detail::decay<X>::type> apply(X&& x) {
  9575.             return {detail::lazy_secret{}, static_cast<X&&>(x)};
  9576.         }
  9577.     };
  9578.  
  9579.  
  9580.  
  9581.  
  9582.     namespace detail {
  9583.         template <>
  9584.         struct monad_operators<lazy_tag> { static constexpr bool value = true; };
  9585.     }
  9586.  
  9587.  
  9588.  
  9589.  
  9590.     template <>
  9591.     struct eval_impl<lazy_tag> {
  9592.  
  9593.         template <std::size_t ...n, typename F, typename ...Args>
  9594.         static constexpr decltype(auto)
  9595.         apply(lazy_apply_t<std::index_sequence<n...>, F, Args...> const& expr) {
  9596.             return hana::at_c<0>(expr.storage_)(
  9597.                 hana::at_c<n+1>(expr.storage_)...
  9598.             );
  9599.         }
  9600.  
  9601.         template <std::size_t ...n, typename F, typename ...Args>
  9602.         static constexpr decltype(auto)
  9603.         apply(lazy_apply_t<std::index_sequence<n...>, F, Args...>& expr) {
  9604.             return hana::at_c<0>(expr.storage_)(
  9605.                 hana::at_c<n+1>(expr.storage_)...
  9606.             );
  9607.         }
  9608.  
  9609.         template <std::size_t ...n, typename F, typename ...Args>
  9610.         static constexpr decltype(auto)
  9611.         apply(lazy_apply_t<std::index_sequence<n...>, F, Args...>&& expr) {
  9612.             return static_cast<F&&>(hana::at_c<0>(expr.storage_))(
  9613.                 static_cast<Args&&>(hana::at_c<n+1>(expr.storage_))...
  9614.             );
  9615.         }
  9616.  
  9617.  
  9618.         template <typename X>
  9619.         static constexpr X const& apply(lazy_value_t<X> const& expr)
  9620.         { return hana::at_c<0>(expr.storage_); }
  9621.  
  9622.         template <typename X>
  9623.         static constexpr X& apply(lazy_value_t<X>& expr)
  9624.         { return hana::at_c<0>(expr.storage_); }
  9625.  
  9626.         template <typename X>
  9627.         static constexpr X apply(lazy_value_t<X>&& expr)
  9628.         { return static_cast<X&&>(hana::at_c<0>(expr.storage_)); }
  9629.     };
  9630.  
  9631.  
  9632.  
  9633.  
  9634.     template <>
  9635.     struct transform_impl<lazy_tag> {
  9636.         template <typename Expr, typename F>
  9637.         static constexpr auto apply(Expr&& expr, F&& f) {
  9638.             return hana::make_lazy(hana::compose(static_cast<F&&>(f), hana::eval))(
  9639.                 static_cast<Expr&&>(expr)
  9640.             );
  9641.         }
  9642.     };
  9643.  
  9644.  
  9645.  
  9646.  
  9647.     template <>
  9648.     struct lift_impl<lazy_tag> {
  9649.         template <typename X>
  9650.         static constexpr lazy_value_t<typename detail::decay<X>::type>
  9651.         apply(X&& x) {
  9652.             return {detail::lazy_secret{}, static_cast<X&&>(x)};
  9653.         }
  9654.     };
  9655.  
  9656.     template <>
  9657.     struct ap_impl<lazy_tag> {
  9658.         template <typename F, typename X>
  9659.         static constexpr decltype(auto) apply(F&& f, X&& x) {
  9660.             return hana::make_lazy(hana::on(hana::apply, hana::eval))(
  9661.                 static_cast<F&&>(f), static_cast<X&&>(x)
  9662.             );
  9663.         }
  9664.     };
  9665.  
  9666.  
  9667.  
  9668.  
  9669.     template <>
  9670.     struct flatten_impl<lazy_tag> {
  9671.         template <typename Expr>
  9672.         static constexpr decltype(auto) apply(Expr&& expr) {
  9673.             return hana::make_lazy(hana::compose(hana::eval, hana::eval))(
  9674.                 static_cast<Expr&&>(expr)
  9675.             );
  9676.         }
  9677.     };
  9678.  
  9679.  
  9680.  
  9681.  
  9682.     template <>
  9683.     struct extract_impl<lazy_tag> {
  9684.         template <typename Expr>
  9685.         static constexpr decltype(auto) apply(Expr&& expr)
  9686.         { return hana::eval(static_cast<Expr&&>(expr)); }
  9687.     };
  9688.  
  9689.     template <>
  9690.     struct duplicate_impl<lazy_tag> {
  9691.         template <typename Expr>
  9692.         static constexpr decltype(auto) apply(Expr&& expr)
  9693.         { return hana::make_lazy(static_cast<Expr&&>(expr)); }
  9694.     };
  9695.  
  9696.     template <>
  9697.     struct extend_impl<lazy_tag> {
  9698.         template <typename Expr, typename F>
  9699.         static constexpr decltype(auto) apply(Expr&& expr, F&& f) {
  9700.             return hana::make_lazy(static_cast<F&&>(f))(static_cast<Expr&&>(expr));
  9701.         }
  9702.     };
  9703. }}
  9704. # 24 "/us/include/boost_1_64_0/boost/hana/drop_while.hpp" 2
  9705.  
  9706.  
  9707.  
  9708. namespace boost { namespace hana {
  9709.  
  9710.     template <typename Xs, typename Pred>
  9711.     constexpr auto drop_while_t::operator()(Xs&& xs, Pred&& pred) const {
  9712.         using It = typename hana::tag_of<Xs>::type;
  9713.         using DropWhile = ::std::conditional_t< (hana::Iterable<It>::value), drop_while_impl<It>, ::boost::hana::deleted_implementation >;
  9714.  
  9715.  
  9716.  
  9717.  
  9718.         static_assert(hana::Iterable<It>::value,
  9719.         "hana::drop_while(xs, pred) requires 'xs' to be an Iterable");
  9720.  
  9721.  
  9722.         return DropWhile::apply(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred));
  9723.     }
  9724.  
  9725.  
  9726.     namespace iterable_detail {
  9727.         struct drop_while_helper {
  9728.             struct next {
  9729.                 template <typename Xs, typename Pred>
  9730.                 constexpr decltype(auto) operator()(Xs&& xs, Pred&& pred) const {
  9731.                     return hana::drop_while(
  9732.                         hana::drop_front(static_cast<Xs&&>(xs)),
  9733.                         static_cast<Pred&&>(pred)
  9734.                     );
  9735.                 }
  9736.             };
  9737.  
  9738.             template <typename Xs, typename Pred>
  9739.             constexpr decltype(auto) operator()(Xs&& xs, Pred&& pred) const {
  9740.                 return hana::eval_if(pred(hana::front(xs)),
  9741.                     hana::make_lazy(next{})(xs, pred),
  9742.                     hana::make_lazy(xs)
  9743.                 );
  9744.             }
  9745.         };
  9746.     }
  9747.  
  9748.     template <typename It, bool condition>
  9749.     struct drop_while_impl<It, when<condition>> : default_ {
  9750.         template <typename Xs, typename Pred>
  9751.         static constexpr auto apply(Xs&& xs, Pred&& pred) {
  9752.             return hana::eval_if(hana::is_empty(xs),
  9753.                 hana::make_lazy(xs),
  9754.                 hana::make_lazy(iterable_detail::drop_while_helper{})(
  9755.                                             xs, static_cast<Pred&&>(pred))
  9756.             );
  9757.         }
  9758.     };
  9759.  
  9760.     template <typename S>
  9761.     struct drop_while_impl<S, when<hana::Foldable<S>::value>> {
  9762.         template <typename Xs, typename Pred>
  9763.         static constexpr auto apply(Xs&& xs, Pred&&) {
  9764.             using FirstUnsatisfied = decltype(
  9765.                 hana::unpack(static_cast<Xs&&>(xs),
  9766.                              detail::first_unsatisfied_index<Pred&&>{})
  9767.             );
  9768.             return hana::drop_front(static_cast<Xs&&>(xs),
  9769.                                     FirstUnsatisfied{});
  9770.         }
  9771.     };
  9772. }}
  9773. # 25 "/us/include/boost_1_64_0/boost/hana/find_if.hpp" 2
  9774.  
  9775.  
  9776.  
  9777.  
  9778.  
  9779.  
  9780.  
  9781. # 1 "/us/include/boost_1_64_0/boost/hana/optional.hpp" 1
  9782. # 13 "/us/include/boost_1_64_0/boost/hana/optional.hpp"
  9783. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp" 1
  9784. # 18 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
  9785. namespace boost { namespace hana {
  9786. # 275 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
  9787.     template <typename ...T>
  9788.     struct optional;
  9789.  
  9790.  
  9791.  
  9792.  
  9793.     struct optional_tag { };
  9794. # 308 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
  9795.     constexpr auto make_optional = make<optional_tag>;
  9796. # 322 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
  9797.     struct make_just_t {
  9798.         template <typename T>
  9799.         constexpr auto operator()(T&&) const;
  9800.     };
  9801.  
  9802.     constexpr make_just_t just{};
  9803. # 340 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
  9804.     template <>
  9805.     struct optional<> : detail::operators::adl<optional<>> {
  9806.  
  9807.         constexpr optional() = default;
  9808.         constexpr optional(optional const&) = default;
  9809.         constexpr optional(optional&&) = default;
  9810.  
  9811.  
  9812.         constexpr optional& operator=(optional const&) = default;
  9813.         constexpr optional& operator=(optional&&) = default;
  9814.  
  9815.  
  9816.         constexpr decltype(nullptr) operator->() const { return nullptr; }
  9817.  
  9818.         template <typename ...dummy>
  9819.         constexpr auto value() const;
  9820.  
  9821.         template <typename ...dummy>
  9822.         constexpr auto operator*() const;
  9823.  
  9824.         template <typename U>
  9825.         constexpr U&& value_or(U&& u) const;
  9826.     };
  9827.  
  9828.     constexpr optional<> nothing{};
  9829. # 401 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
  9830.     struct maybe_t {
  9831.         template <typename Def, typename F, typename T>
  9832.         constexpr decltype(auto) operator()(Def&&, F&& f, optional<T> const& m) const
  9833.         { return static_cast<F&&>(f)(m.value_); }
  9834.  
  9835.         template <typename Def, typename F, typename T>
  9836.         constexpr decltype(auto) operator()(Def&&, F&& f, optional<T>& m) const
  9837.         { return static_cast<F&&>(f)(m.value_); }
  9838.  
  9839.         template <typename Def, typename F, typename T>
  9840.         constexpr decltype(auto) operator()(Def&&, F&& f, optional<T>&& m) const
  9841.         { return static_cast<F&&>(f)(static_cast<optional<T>&&>(m).value_); }
  9842.  
  9843.         template <typename Def, typename F>
  9844.         constexpr Def operator()(Def&& def, F&&, optional<> const&) const
  9845.         { return static_cast<Def&&>(def); }
  9846.     };
  9847.  
  9848.     constexpr maybe_t maybe{};
  9849. # 455 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
  9850.     struct sfinae_t {
  9851.         template <typename F>
  9852.         constexpr decltype(auto) operator()(F&& f) const;
  9853.     };
  9854.  
  9855.     constexpr sfinae_t sfinae{};
  9856. # 478 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
  9857.     struct is_just_t {
  9858.         template <typename ...T>
  9859.         constexpr auto operator()(optional<T...> const&) const;
  9860.     };
  9861.  
  9862.     constexpr is_just_t is_just{};
  9863. # 501 "/us/include/boost_1_64_0/boost/hana/fwd/optional.hpp"
  9864.     struct is_nothing_t {
  9865.         template <typename ...T>
  9866.         constexpr auto operator()(optional<T...> const&) const;
  9867.     };
  9868.  
  9869.     constexpr is_nothing_t is_nothing{};
  9870.  
  9871. }}
  9872. # 13 "/us/include/boost_1_64_0/boost/hana/optional.hpp" 2
  9873. # 27 "/us/include/boost_1_64_0/boost/hana/optional.hpp"
  9874. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concat.hpp" 1
  9875. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/concat.hpp"
  9876. namespace boost { namespace hana {
  9877. # 51 "/us/include/boost_1_64_0/boost/hana/fwd/concat.hpp"
  9878.     template <typename M, typename = void>
  9879.     struct concat_impl : concat_impl<M, when<true>> { };
  9880.  
  9881.     struct concat_t {
  9882.         template <typename Xs, typename Ys>
  9883.         constexpr auto operator()(Xs&& xs, Ys&& ys) const;
  9884.     };
  9885.  
  9886.     constexpr concat_t concat{};
  9887.  
  9888. }}
  9889. # 27 "/us/include/boost_1_64_0/boost/hana/optional.hpp" 2
  9890.  
  9891.  
  9892. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/empty.hpp" 1
  9893. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/empty.hpp"
  9894. namespace boost { namespace hana {
  9895. # 40 "/us/include/boost_1_64_0/boost/hana/fwd/empty.hpp"
  9896.     template <typename M, typename = void>
  9897.     struct empty_impl : empty_impl<M, when<true>> { };
  9898.  
  9899.     template <typename M>
  9900.     struct empty_t;
  9901.  
  9902.     template <typename M>
  9903.     constexpr empty_t<M> empty{};
  9904.  
  9905. }}
  9906. # 29 "/us/include/boost_1_64_0/boost/hana/optional.hpp" 2
  9907.  
  9908.  
  9909.  
  9910.  
  9911.  
  9912.  
  9913.  
  9914. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp" 1
  9915. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
  9916. namespace boost { namespace hana {
  9917.  
  9918.  
  9919.  
  9920.  
  9921.  
  9922.  
  9923.     template <typename T>
  9924.     struct basic_type;
  9925. # 114 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
  9926.     template <typename T>
  9927.     struct type_impl;
  9928.  
  9929.     template <typename T>
  9930.     using type = typename type_impl<T>::_;
  9931.  
  9932.  
  9933.  
  9934.  
  9935.     struct type_tag { };
  9936.  
  9937.  
  9938.  
  9939.     template <typename T>
  9940.     constexpr type<T> type_c{};
  9941. # 192 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
  9942.     struct decltype_t {
  9943.         template <typename T>
  9944.         constexpr auto operator()(T&&) const;
  9945.     };
  9946.  
  9947.     constexpr decltype_t decltype_{};
  9948. # 235 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
  9949.     struct typeid_t {
  9950.         template <typename T>
  9951.         constexpr auto operator()(T&&) const;
  9952.     };
  9953.  
  9954.     constexpr typeid_t typeid_{};
  9955. # 262 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
  9956.     constexpr auto make_type = hana::make<type_tag>;
  9957. # 295 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
  9958.     struct sizeof_t {
  9959.         template <typename T>
  9960.         constexpr auto operator()(T&&) const;
  9961.     };
  9962.  
  9963.     constexpr sizeof_t sizeof_{};
  9964. # 331 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
  9965.     struct alignof_t {
  9966.         template <typename T>
  9967.         constexpr auto operator()(T&&) const;
  9968.     };
  9969.  
  9970.     constexpr alignof_t alignof_{};
  9971. # 375 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
  9972.     struct is_valid_t {
  9973.         template <typename F>
  9974.         constexpr auto operator()(F&&) const;
  9975.  
  9976.         template <typename F, typename ...Args>
  9977.         constexpr auto operator()(F&&, Args&&...) const;
  9978.     };
  9979.  
  9980.     constexpr is_valid_t is_valid{};
  9981. # 412 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
  9982.     template <template <typename ...> class F>
  9983.     struct template_t;
  9984.  
  9985.     template <template <typename ...> class F>
  9986.     constexpr template_t<F> template_{};
  9987. # 439 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
  9988.     template <template <typename ...> class f>
  9989.     struct metafunction_t;
  9990.  
  9991.     template <template <typename ...> class f>
  9992.     constexpr metafunction_t<f> metafunction{};
  9993. # 466 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
  9994.     template <typename F>
  9995.     struct metafunction_class_t
  9996.         : metafunction_t<F::template apply>
  9997.     { };
  9998.  
  9999.     template <typename F>
  10000.     constexpr metafunction_class_t<F> metafunction_class{};
  10001. # 512 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
  10002.     template <typename F>
  10003.     struct integral_t;
  10004.  
  10005.     struct make_integral_t {
  10006.         template <typename F>
  10007.         constexpr integral_t<F> operator()(F const&) const
  10008.         { return {}; }
  10009.     };
  10010.  
  10011.     constexpr make_integral_t integral{};
  10012. # 531 "/us/include/boost_1_64_0/boost/hana/fwd/type.hpp"
  10013.     template <template <typename ...> class F>
  10014.     constexpr auto trait = hana::integral(hana::metafunction<F>);
  10015. }}
  10016. # 36 "/us/include/boost_1_64_0/boost/hana/optional.hpp" 2
  10017.  
  10018.  
  10019.  
  10020.  
  10021.  
  10022.  
  10023.  
  10024.  
  10025. namespace boost { namespace hana {
  10026.  
  10027.  
  10028.  
  10029.     namespace detail {
  10030.         template <typename T, typename = typename hana::tag_of<T>::type>
  10031.         struct nested_type { };
  10032.  
  10033.         template <typename T>
  10034.         struct nested_type<T, type_tag> { using type = typename T::type; };
  10035.     }
  10036.  
  10037.     template <typename T>
  10038.     struct optional<T> : detail::operators::adl<>, detail::nested_type<T> {
  10039.  
  10040.         constexpr optional() = default;
  10041.         constexpr optional(optional const&) = default;
  10042.         constexpr optional(optional&&) = default;
  10043.  
  10044.         constexpr optional(T const& t)
  10045.             : value_(t)
  10046.         { }
  10047.  
  10048.         constexpr optional(T&& t)
  10049.             : value_(static_cast<T&&>(t))
  10050.         { }
  10051.  
  10052.  
  10053.         constexpr optional& operator=(optional const&) = default;
  10054.         constexpr optional& operator=(optional&&) = default;
  10055.  
  10056.  
  10057.         constexpr T const* operator->() const { return &value_; }
  10058.         constexpr T* operator->() { return &value_; }
  10059.  
  10060.         constexpr T& value() & { return value_; }
  10061.         constexpr T const& value() const& { return value_; }
  10062.         constexpr T&& value() && { return static_cast<T&&>(value_); }
  10063.         constexpr T const&& value() const&& { return static_cast<T const&&>(value_); }
  10064.  
  10065.         constexpr T& operator*() & { return value_; }
  10066.         constexpr T const& operator*() const& { return value_; }
  10067.         constexpr T&& operator*() && { return static_cast<T&&>(value_); }
  10068.         constexpr T const&& operator*() const&& { return static_cast<T const&&>(value_); }
  10069.  
  10070.         template <typename U> constexpr T& value_or(U&&) & { return value_; }
  10071.         template <typename U> constexpr T const& value_or(U&&) const& { return value_; }
  10072.         template <typename U> constexpr T&& value_or(U&&) && { return static_cast<T&&>(value_); }
  10073.         template <typename U> constexpr T const&& value_or(U&&) const&& { return static_cast<T const&&>(value_); }
  10074.  
  10075.  
  10076.  
  10077.         T value_;
  10078.     };
  10079.  
  10080.  
  10081.     template <typename ...dummy>
  10082.     constexpr auto optional<>::value() const {
  10083.         static_assert(detail::wrong<dummy...>{},
  10084.         "hana::optional::value() requires a non-empty optional");
  10085.     }
  10086.  
  10087.     template <typename ...dummy>
  10088.     constexpr auto optional<>::operator*() const {
  10089.         static_assert(detail::wrong<dummy...>{},
  10090.         "hana::optional::operator* requires a non-empty optional");
  10091.     }
  10092.  
  10093.     template <typename U>
  10094.     constexpr U&& optional<>::value_or(U&& u) const {
  10095.         return static_cast<U&&>(u);
  10096.     }
  10097.  
  10098.     template <typename T>
  10099.     constexpr auto make_just_t::operator()(T&& t) const {
  10100.         return hana::optional<typename detail::decay<T>::type>(static_cast<T&&>(t));
  10101.     }
  10102.  
  10103.  
  10104.     template <typename ...T>
  10105.     struct tag_of<optional<T...>> {
  10106.         using type = optional_tag;
  10107.     };
  10108.  
  10109.  
  10110.  
  10111.  
  10112.     template <>
  10113.     struct make_impl<optional_tag> {
  10114.         template <typename X>
  10115.         static constexpr auto apply(X&& x)
  10116.         { return hana::just(static_cast<X&&>(x)); }
  10117.  
  10118.         static constexpr auto apply()
  10119.         { return hana::nothing; }
  10120.     };
  10121.  
  10122.  
  10123.  
  10124.  
  10125.     namespace detail {
  10126.         template <>
  10127.         struct comparable_operators<optional_tag> {
  10128.             static constexpr bool value = true;
  10129.         };
  10130.         template <>
  10131.         struct orderable_operators<optional_tag> {
  10132.             static constexpr bool value = true;
  10133.         };
  10134.         template <>
  10135.         struct monad_operators<optional_tag> {
  10136.             static constexpr bool value = true;
  10137.         };
  10138.     }
  10139.  
  10140.  
  10141.  
  10142.  
  10143.  
  10144.     template <typename ...T>
  10145.     constexpr auto is_just_t::operator()(optional<T...> const&) const
  10146.     { return hana::bool_c<sizeof...(T) != 0>; }
  10147.  
  10148.     template <typename ...T>
  10149.     constexpr auto is_nothing_t::operator()(optional<T...> const&) const
  10150.     { return hana::bool_c<sizeof...(T) == 0>; }
  10151.  
  10152.  
  10153.  
  10154.  
  10155.  
  10156.     namespace detail {
  10157.         struct sfinae_impl {
  10158.             template <typename F, typename ...X, typename = decltype(
  10159.                 std::declval<F>()(std::declval<X>()...)
  10160.             )>
  10161.             constexpr decltype(auto) operator()(int, F&& f, X&& ...x) const {
  10162.                 using Return = decltype(static_cast<F&&>(f)(static_cast<X&&>(x)...));
  10163.                 static_assert(!std::is_same<Return, void>::value,
  10164.                 "hana::sfinae(f)(args...) requires f(args...) to be non-void");
  10165.  
  10166.                 return hana::just(static_cast<F&&>(f)(static_cast<X&&>(x)...));
  10167.             }
  10168.  
  10169.             template <typename F, typename ...X>
  10170.             constexpr auto operator()(long, F&&, X&& ...) const
  10171.             { return hana::nothing; }
  10172.         };
  10173.     }
  10174.  
  10175.  
  10176.     template <typename F>
  10177.     constexpr decltype(auto) sfinae_t::operator()(F&& f) const {
  10178.         return hana::partial(detail::sfinae_impl{}, int{},
  10179.                              static_cast<F&&>(f));
  10180.     }
  10181.  
  10182.  
  10183.  
  10184.  
  10185.  
  10186.     template <>
  10187.     struct equal_impl<optional_tag, optional_tag> {
  10188.         template <typename T, typename U>
  10189.         static constexpr auto apply(hana::optional<T> const& t, hana::optional<U> const& u)
  10190.         { return hana::equal(t.value_, u.value_); }
  10191.  
  10192.         static constexpr hana::true_ apply(hana::optional<> const&, hana::optional<> const&)
  10193.         { return {}; }
  10194.  
  10195.         template <typename T, typename U>
  10196.         static constexpr hana::false_ apply(T const&, U const&)
  10197.         { return {}; }
  10198.     };
  10199.  
  10200.  
  10201.  
  10202.  
  10203.     template <>
  10204.     struct less_impl<optional_tag, optional_tag> {
  10205.         template <typename T>
  10206.         static constexpr hana::true_ apply(hana::optional<> const&, hana::optional<T> const&)
  10207.         { return {}; }
  10208.  
  10209.         static constexpr hana::false_ apply(hana::optional<> const&, hana::optional<> const&)
  10210.         { return {}; }
  10211.  
  10212.         template <typename T>
  10213.         static constexpr hana::false_ apply(hana::optional<T> const&, hana::optional<> const&)
  10214.         { return {}; }
  10215.  
  10216.         template <typename T, typename U>
  10217.         static constexpr auto apply(hana::optional<T> const& x, hana::optional<U> const& y)
  10218.         { return hana::less(x.value_, y.value_); }
  10219.     };
  10220.  
  10221.  
  10222.  
  10223.  
  10224.     template <>
  10225.     struct transform_impl<optional_tag> {
  10226.         template <typename F>
  10227.         static constexpr auto apply(optional<> const&, F&&)
  10228.         { return hana::nothing; }
  10229.  
  10230.         template <typename T, typename F>
  10231.         static constexpr auto apply(optional<T> const& opt, F&& f)
  10232.         { return hana::just(static_cast<F&&>(f)(opt.value_)); }
  10233.  
  10234.         template <typename T, typename F>
  10235.         static constexpr auto apply(optional<T>& opt, F&& f)
  10236.         { return hana::just(static_cast<F&&>(f)(opt.value_)); }
  10237.  
  10238.         template <typename T, typename F>
  10239.         static constexpr auto apply(optional<T>&& opt, F&& f)
  10240.         { return hana::just(static_cast<F&&>(f)(static_cast<T&&>(opt.value_))); }
  10241.     };
  10242.  
  10243.  
  10244.  
  10245.  
  10246.     template <>
  10247.     struct lift_impl<optional_tag> {
  10248.         template <typename X>
  10249.         static constexpr auto apply(X&& x)
  10250.         { return hana::just(static_cast<X&&>(x)); }
  10251.     };
  10252.  
  10253.     template <>
  10254.     struct ap_impl<optional_tag> {
  10255.         template <typename F, typename X>
  10256.         static constexpr auto ap_helper(F&&, X&&, ...)
  10257.         { return hana::nothing; }
  10258.  
  10259.         template <typename F, typename X>
  10260.         static constexpr auto ap_helper(F&& f, X&& x, hana::true_, hana::true_)
  10261.         { return hana::just(static_cast<F&&>(f).value_(static_cast<X&&>(x).value_)); }
  10262.  
  10263.         template <typename F, typename X>
  10264.         static constexpr auto apply(F&& f, X&& x) {
  10265.             return ap_impl::ap_helper(static_cast<F&&>(f), static_cast<X&&>(x),
  10266.                                       hana::is_just(f), hana::is_just(x));
  10267.         }
  10268.     };
  10269.  
  10270.  
  10271.  
  10272.  
  10273.     template <>
  10274.     struct flatten_impl<optional_tag> {
  10275.         static constexpr auto apply(optional<> const&)
  10276.         { return hana::nothing; }
  10277.  
  10278.         static constexpr auto apply(optional<optional<>> const&)
  10279.         { return hana::nothing; }
  10280.  
  10281.         template <typename T>
  10282.         static constexpr auto apply(optional<optional<T>> const& opt)
  10283.         { return hana::just(opt.value_.value_); }
  10284.  
  10285.         template <typename T>
  10286.         static constexpr auto apply(optional<optional<T>>&& opt)
  10287.         { return hana::just(static_cast<T&&>(opt.value_.value_)); }
  10288.     };
  10289.  
  10290.  
  10291.  
  10292.  
  10293.     template <>
  10294.     struct concat_impl<optional_tag> {
  10295.         template <typename Y>
  10296.         static constexpr auto apply(hana::optional<>&, Y&& y)
  10297.         { return static_cast<Y&&>(y); }
  10298.  
  10299.         template <typename Y>
  10300.         static constexpr auto apply(hana::optional<>&&, Y&& y)
  10301.         { return static_cast<Y&&>(y); }
  10302.  
  10303.         template <typename Y>
  10304.         static constexpr auto apply(hana::optional<> const&, Y&& y)
  10305.         { return static_cast<Y&&>(y); }
  10306.  
  10307.         template <typename X, typename Y>
  10308.         static constexpr auto apply(X&& x, Y&&)
  10309.         { return static_cast<X&&>(x); }
  10310.     };
  10311.  
  10312.     template <>
  10313.     struct empty_impl<optional_tag> {
  10314.         static constexpr auto apply()
  10315.         { return hana::nothing; }
  10316.     };
  10317.  
  10318.  
  10319.  
  10320.  
  10321.     template <>
  10322.     struct unpack_impl<optional_tag> {
  10323.         template <typename T, typename F>
  10324.         static constexpr decltype(auto) apply(optional<T>&& opt, F&& f)
  10325.         { return static_cast<F&&>(f)(static_cast<T&&>(opt.value_)); }
  10326.  
  10327.         template <typename T, typename F>
  10328.         static constexpr decltype(auto) apply(optional<T> const& opt, F&& f)
  10329.         { return static_cast<F&&>(f)(opt.value_); }
  10330.  
  10331.         template <typename T, typename F>
  10332.         static constexpr decltype(auto) apply(optional<T>& opt, F&& f)
  10333.         { return static_cast<F&&>(f)(opt.value_); }
  10334.  
  10335.         template <typename F>
  10336.         static constexpr decltype(auto) apply(optional<> const&, F&& f)
  10337.         { return static_cast<F&&>(f)(); }
  10338.     };
  10339.  
  10340.  
  10341.  
  10342.  
  10343.     namespace detail {
  10344.         template <bool>
  10345.         struct optional_find_if {
  10346.             template <typename T>
  10347.             static constexpr auto apply(T const&)
  10348.             { return hana::nothing; }
  10349.         };
  10350.  
  10351.         template <>
  10352.         struct optional_find_if<true> {
  10353.             template <typename T>
  10354.             static constexpr auto apply(T&& t)
  10355.             { return hana::just(static_cast<T&&>(t)); }
  10356.         };
  10357.     }
  10358.  
  10359.     template <>
  10360.     struct find_if_impl<optional_tag> {
  10361.         template <typename T, typename Pred>
  10362.         static constexpr auto apply(hana::optional<T> const& opt, Pred&& pred) {
  10363.             constexpr bool found = decltype(static_cast<Pred&&>(pred)(opt.value_))::value;
  10364.             return detail::optional_find_if<found>::apply(opt.value_);
  10365.         }
  10366.  
  10367.         template <typename T, typename Pred>
  10368.         static constexpr auto apply(hana::optional<T>& opt, Pred&& pred) {
  10369.             constexpr bool found = decltype(static_cast<Pred&&>(pred)(opt.value_))::value;
  10370.             return detail::optional_find_if<found>::apply(opt.value_);
  10371.         }
  10372.  
  10373.         template <typename T, typename Pred>
  10374.         static constexpr auto apply(hana::optional<T>&& opt, Pred&& pred) {
  10375.             constexpr bool found = decltype(
  10376.                 static_cast<Pred&&>(pred)(static_cast<T&&>(opt.value_))
  10377.             )::value;
  10378.             return detail::optional_find_if<found>::apply(static_cast<T&&>(opt.value_));
  10379.         }
  10380.  
  10381.         template <typename Pred>
  10382.         static constexpr auto apply(hana::optional<> const&, Pred&&)
  10383.         { return hana::nothing; }
  10384.     };
  10385.  
  10386.     template <>
  10387.     struct any_of_impl<optional_tag> {
  10388.         template <typename T, typename Pred>
  10389.         static constexpr auto apply(hana::optional<T> const& opt, Pred&& pred)
  10390.         { return static_cast<Pred&&>(pred)(opt.value_); }
  10391.  
  10392.         template <typename Pred>
  10393.         static constexpr hana::false_ apply(hana::optional<> const&, Pred&&)
  10394.         { return {}; }
  10395.     };
  10396. }}
  10397. # 32 "/us/include/boost_1_64_0/boost/hana/find_if.hpp" 2
  10398.  
  10399.  
  10400. # 1 "/us/include/boost_1_64_0/boost/hana/transform.hpp" 1
  10401. # 16 "/us/include/boost_1_64_0/boost/hana/transform.hpp"
  10402. # 1 "/us/include/boost_1_64_0/boost/hana/concept/functor.hpp" 1
  10403. # 13 "/us/include/boost_1_64_0/boost/hana/concept/functor.hpp"
  10404. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/functor.hpp" 1
  10405. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/functor.hpp"
  10406. namespace boost { namespace hana {
  10407. # 135 "/us/include/boost_1_64_0/boost/hana/fwd/concept/functor.hpp"
  10408.     template <typename F>
  10409.     struct Functor;
  10410. }}
  10411. # 13 "/us/include/boost_1_64_0/boost/hana/concept/functor.hpp" 2
  10412.  
  10413.  
  10414. # 1 "/us/include/boost_1_64_0/boost/hana/adjust_if.hpp" 1
  10415. # 13 "/us/include/boost_1_64_0/boost/hana/adjust_if.hpp"
  10416. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/adjust_if.hpp" 1
  10417. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/adjust_if.hpp"
  10418. namespace boost { namespace hana {
  10419. # 57 "/us/include/boost_1_64_0/boost/hana/fwd/adjust_if.hpp"
  10420.     template <typename Xs, typename = void>
  10421.     struct adjust_if_impl : adjust_if_impl<Xs, when<true>> { };
  10422.  
  10423.     struct adjust_if_t {
  10424.         template <typename Xs, typename Pred, typename F>
  10425.         constexpr auto operator()(Xs&& xs, Pred const& pred, F const& f) const;
  10426.     };
  10427.  
  10428.     constexpr adjust_if_t adjust_if{};
  10429.  
  10430. }}
  10431. # 13 "/us/include/boost_1_64_0/boost/hana/adjust_if.hpp" 2
  10432.  
  10433.  
  10434.  
  10435. # 1 "/us/include/boost_1_64_0/boost/hana/concept/functor.hpp" 1
  10436. # 16 "/us/include/boost_1_64_0/boost/hana/adjust_if.hpp" 2
  10437.  
  10438.  
  10439.  
  10440.  
  10441. # 1 "/us/include/boost_1_64_0/boost/hana/transform.hpp" 1
  10442. # 20 "/us/include/boost_1_64_0/boost/hana/adjust_if.hpp" 2
  10443.  
  10444.  
  10445.  
  10446. namespace boost { namespace hana {
  10447.  
  10448.     template <typename Xs, typename Pred, typename F>
  10449.     constexpr auto adjust_if_t::operator()(Xs&& xs, Pred const& pred, F const& f) const {
  10450.         using S = typename hana::tag_of<Xs>::type;
  10451.         using AdjustIf = ::std::conditional_t< (hana::Functor<S>::value), adjust_if_impl<S>, ::boost::hana::deleted_implementation >;
  10452.  
  10453.  
  10454.  
  10455.  
  10456.         static_assert(hana::Functor<S>::value,
  10457.         "hana::adjust_if(xs, pred, f) requires 'xs' to be a Functor");
  10458.  
  10459.  
  10460.         return AdjustIf::apply(static_cast<Xs&&>(xs), pred, f);
  10461.     }
  10462.  
  10463.  
  10464.     namespace detail {
  10465.         template <typename Pred, typename F>
  10466.         struct apply_if {
  10467.             Pred const& pred;
  10468.             F const& f;
  10469.  
  10470.             template <typename X>
  10471.             constexpr decltype(auto) helper(bool cond, X&& x) const
  10472.             { return cond ? f(static_cast<X&&>(x)) : static_cast<X&&>(x); }
  10473.  
  10474.             template <typename X>
  10475.             constexpr decltype(auto) helper(hana::true_, X&& x) const
  10476.             { return f(static_cast<X&&>(x)); }
  10477.  
  10478.             template <typename X>
  10479.             constexpr decltype(auto) helper(hana::false_, X&& x) const
  10480.             { return static_cast<X&&>(x); }
  10481.  
  10482.  
  10483.             template <typename X>
  10484.             constexpr decltype(auto) operator()(X&& x) const {
  10485.                 auto cond = hana::if_(pred(x), hana::true_c, hana::false_c);
  10486.                 return this->helper(cond, static_cast<X&&>(x));
  10487.             }
  10488.         };
  10489.     }
  10490.  
  10491.     template <typename Fun, bool condition>
  10492.     struct adjust_if_impl<Fun, when<condition>> : default_ {
  10493.         template <typename Xs, typename Pred, typename F>
  10494.         static constexpr auto apply(Xs&& xs, Pred const& pred, F const& f) {
  10495.             return hana::transform(static_cast<Xs&&>(xs),
  10496.                                    detail::apply_if<Pred, F>{pred, f});
  10497.         }
  10498.     };
  10499. }}
  10500. # 15 "/us/include/boost_1_64_0/boost/hana/concept/functor.hpp" 2
  10501.  
  10502.  
  10503.  
  10504.  
  10505.  
  10506. # 1 "/us/include/boost_1_64_0/boost/hana/transform.hpp" 1
  10507. # 20 "/us/include/boost_1_64_0/boost/hana/concept/functor.hpp" 2
  10508.  
  10509.  
  10510.  
  10511. namespace boost { namespace hana {
  10512.     template <typename F>
  10513.     struct Functor
  10514.         : hana::integral_constant<bool,
  10515.             !is_default<transform_impl<typename tag_of<F>::type>>::value ||
  10516.             !is_default<adjust_if_impl<typename tag_of<F>::type>>::value
  10517.         >
  10518.     { };
  10519. }}
  10520. # 16 "/us/include/boost_1_64_0/boost/hana/transform.hpp" 2
  10521.  
  10522.  
  10523.  
  10524.  
  10525.  
  10526. # 1 "/us/include/boost_1_64_0/boost/hana/functional/always.hpp" 1
  10527. # 19 "/us/include/boost_1_64_0/boost/hana/functional/always.hpp"
  10528. namespace boost { namespace hana {
  10529. # 43 "/us/include/boost_1_64_0/boost/hana/functional/always.hpp"
  10530.     template <typename T>
  10531.     struct _always {
  10532.         T val_;
  10533.  
  10534.         template <typename ...Args>
  10535.         constexpr T const& operator()(Args const& ...) const&
  10536.         { return val_; }
  10537.  
  10538.         template <typename ...Args>
  10539.         constexpr T& operator()(Args const& ...) &
  10540.         { return val_; }
  10541.  
  10542.         template <typename ...Args>
  10543.         constexpr T operator()(Args const& ...) &&
  10544.         { return std::move(val_); }
  10545.     };
  10546.  
  10547.     constexpr detail::create<_always> always{};
  10548.  
  10549. }}
  10550. # 21 "/us/include/boost_1_64_0/boost/hana/transform.hpp" 2
  10551.  
  10552.  
  10553.  
  10554.  
  10555.  
  10556. namespace boost { namespace hana {
  10557.  
  10558.     template <typename Xs, typename F>
  10559.     constexpr auto transform_t::operator()(Xs&& xs, F&& f) const {
  10560.         using S = typename hana::tag_of<Xs>::type;
  10561.         using Transform = ::std::conditional_t< (hana::Functor<S>::value), transform_impl<S>, ::boost::hana::deleted_implementation >;
  10562.  
  10563.  
  10564.  
  10565.  
  10566.         static_assert(hana::Functor<S>::value,
  10567.         "hana::transform(xs, f) requires 'xs' to be a Functor");
  10568.  
  10569.  
  10570.         return Transform::apply(static_cast<Xs&&>(xs), static_cast<F&&>(f));
  10571.     }
  10572.  
  10573.  
  10574.     template <typename Fun, bool condition>
  10575.     struct transform_impl<Fun, when<condition>> : default_ {
  10576.         template <typename Xs, typename F>
  10577.         static constexpr auto apply(Xs&& xs, F&& f) {
  10578.             return hana::adjust_if(static_cast<Xs&&>(xs),
  10579.                                    hana::always(hana::true_c),
  10580.                                    static_cast<F&&>(f));
  10581.         }
  10582.     };
  10583.  
  10584.     template <typename S>
  10585.     struct transform_impl<S, when<Sequence<S>::value>> {
  10586.  
  10587.         template <typename F>
  10588.         struct transformer {
  10589.             F f;
  10590.             template <typename ...Xs>
  10591.             constexpr auto operator()(Xs&& ...xs) const {
  10592.                 return hana::make<S>((*f)(static_cast<Xs&&>(xs))...);
  10593.             }
  10594.         };
  10595.  
  10596.  
  10597.         template <typename Xs, typename F>
  10598.         static constexpr auto apply(Xs&& xs, F&& f) {
  10599.  
  10600.             return hana::unpack(static_cast<Xs&&>(xs),
  10601.                                 transformer<decltype(&f)>{&f});
  10602.         }
  10603.     };
  10604. }}
  10605. # 34 "/us/include/boost_1_64_0/boost/hana/find_if.hpp" 2
  10606.  
  10607.  
  10608.  
  10609.  
  10610.  
  10611.  
  10612. namespace boost { namespace hana {
  10613.  
  10614.     template <typename Xs, typename Pred>
  10615.     constexpr auto find_if_t::operator()(Xs&& xs, Pred&& pred) const {
  10616.         using S = typename hana::tag_of<Xs>::type;
  10617.         using FindIf = ::std::conditional_t< (hana::Searchable<S>::value), find_if_impl<S>, ::boost::hana::deleted_implementation >;
  10618.  
  10619.  
  10620.  
  10621.  
  10622.         static_assert(hana::Searchable<S>::value,
  10623.         "hana::find_if(xs, pred) requires 'xs' to be a Searchable");
  10624.  
  10625.  
  10626.         return FindIf::apply(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred));
  10627.     }
  10628.  
  10629.  
  10630.     template <typename S, bool condition>
  10631.     struct find_if_impl<S, when<condition>> : default_ {
  10632.         template <typename ...Args>
  10633.         static constexpr auto apply(Args&& ...) = delete;
  10634.     };
  10635.  
  10636.     namespace detail {
  10637.         template <typename Xs, typename Pred, std::size_t i, std::size_t N, bool Done>
  10638.         struct advance_until;
  10639.  
  10640.         template <typename Xs, typename Pred, std::size_t i, std::size_t N>
  10641.         struct advance_until<Xs, Pred, i, N, false>
  10642.             : advance_until<Xs, Pred, i + 1, N, static_cast<bool>(detail::decay<decltype(
  10643.                 std::declval<Pred>()(hana::at_c<i>(std::declval<Xs>()))
  10644.             )>::type::value)>
  10645.         { };
  10646.  
  10647.         template <typename Xs, typename Pred, std::size_t N>
  10648.         struct advance_until<Xs, Pred, N, N, false> {
  10649.             template <typename Ys>
  10650.             static constexpr auto apply(Ys&&) {
  10651.                 return hana::nothing;
  10652.             }
  10653.         };
  10654.  
  10655.         template <typename Xs, typename Pred, std::size_t i, std::size_t N>
  10656.         struct advance_until<Xs, Pred, i, N, true> {
  10657.             template <typename Ys>
  10658.             static constexpr auto apply(Ys&& ys) {
  10659.                 return hana::just(hana::at_c<i - 1>(static_cast<Ys&&>(ys)));
  10660.             }
  10661.         };
  10662.     }
  10663.  
  10664.     template <typename S>
  10665.     struct find_if_impl<S, when<Sequence<S>::value>> {
  10666.         template <typename Xs, typename Pred>
  10667.         static constexpr auto apply(Xs&& xs, Pred&&) {
  10668.             constexpr std::size_t N = decltype(hana::length(xs))::value;
  10669.             return detail::advance_until<Xs&&, Pred&&, 0, N, false>::apply(
  10670.                 static_cast<Xs&&>(xs)
  10671.             );
  10672.         }
  10673.     };
  10674.  
  10675.     template <typename It>
  10676.     struct find_if_impl<It, when<hana::Iterable<It>::value && !Sequence<It>::value>> {
  10677.         template <typename Xs, typename Pred>
  10678.         static constexpr auto find_if_helper(Xs&& xs, Pred&& pred, hana::true_) {
  10679.             return hana::just(hana::front(
  10680.                 hana::drop_while(static_cast<Xs&&>(xs),
  10681.                     hana::compose(hana::not_, static_cast<Pred&&>(pred)))
  10682.             ));
  10683.         }
  10684.  
  10685.         template <typename Xs, typename Pred>
  10686.         static constexpr auto find_if_helper(Xs&&, Pred&&, hana::false_) {
  10687.             return hana::nothing;
  10688.         }
  10689.  
  10690.         template <typename Xs, typename Pred>
  10691.         static constexpr auto apply(Xs&& xs, Pred&& pred) {
  10692.             constexpr bool found = !decltype(
  10693.                 hana::is_empty(hana::drop_while(static_cast<Xs&&>(xs),
  10694.                     hana::compose(hana::not_, static_cast<Pred&&>(pred))))
  10695.             )::value;
  10696.             return find_if_impl::find_if_helper(static_cast<Xs&&>(xs),
  10697.                                                 static_cast<Pred&&>(pred),
  10698.                                                 hana::bool_<found>{});
  10699.         }
  10700.     };
  10701.  
  10702.     template <typename T, std::size_t N>
  10703.     struct find_if_impl<T[N]> {
  10704.         template <typename Xs>
  10705.         static constexpr auto find_if_helper(Xs&&, hana::false_)
  10706.         { return hana::nothing; }
  10707.  
  10708.         template <typename Xs>
  10709.         static constexpr auto find_if_helper(Xs&& xs, hana::true_)
  10710.         { return hana::just(static_cast<Xs&&>(xs)[0]); }
  10711.  
  10712.         template <typename Xs, typename Pred>
  10713.         static constexpr auto apply(Xs&& xs, Pred&& pred) {
  10714.             return find_if_helper(static_cast<Xs&&>(xs),
  10715.                 hana::bool_c<decltype(
  10716.                     static_cast<Pred&&>(pred)(static_cast<Xs&&>(xs)[0])
  10717.                 )::value>
  10718.             );
  10719.         }
  10720.     };
  10721.  
  10722.     namespace struct_detail {
  10723.         template <typename X>
  10724.         struct get_member {
  10725.             X x;
  10726.             template <typename Member>
  10727.             constexpr decltype(auto) operator()(Member&& member) && {
  10728.                 return hana::second(static_cast<Member&&>(member))(
  10729.                     static_cast<X&&>(x)
  10730.                 );
  10731.             }
  10732.         };
  10733.     }
  10734.  
  10735.     template <typename S>
  10736.     struct find_if_impl<S, when<hana::Struct<S>::value>> {
  10737.         template <typename X, typename Pred>
  10738.         static constexpr decltype(auto) apply(X&& x, Pred&& pred) {
  10739.             return hana::transform(
  10740.                 hana::find_if(hana::accessors<S>(),
  10741.                     hana::compose(static_cast<Pred&&>(pred), hana::first)
  10742.                 ),
  10743.                 struct_detail::get_member<X>{static_cast<X&&>(x)}
  10744.             );
  10745.         }
  10746.     };
  10747. }}
  10748. # 20 "/us/include/boost_1_64_0/boost/hana/concept/searchable.hpp" 2
  10749.  
  10750.  
  10751.  
  10752. namespace boost { namespace hana {
  10753.     template <typename S>
  10754.     struct Searchable
  10755.         : hana::integral_constant<bool,
  10756.             !is_default<any_of_impl<typename tag_of<S>::type>>::value &&
  10757.             !is_default<find_if_impl<typename tag_of<S>::type>>::value
  10758.         >
  10759.     { };
  10760. }}
  10761. # 18 "/us/include/boost_1_64_0/boost/hana/any_of.hpp" 2
  10762. # 34 "/us/include/boost_1_64_0/boost/hana/any_of.hpp"
  10763. namespace boost { namespace hana {
  10764.  
  10765.     template <typename Xs, typename Pred>
  10766.     constexpr auto any_of_t::operator()(Xs&& xs, Pred&& pred) const {
  10767.         using S = typename hana::tag_of<Xs>::type;
  10768.         using AnyOf = ::std::conditional_t< (hana::Searchable<S>::value), any_of_impl<S>, ::boost::hana::deleted_implementation >;
  10769.  
  10770.  
  10771.  
  10772.  
  10773.         static_assert(hana::Searchable<S>::value,
  10774.         "hana::any_of(xs, pred) requires 'xs' to be a Searchable");
  10775.  
  10776.  
  10777.         return AnyOf::apply(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred));
  10778.     }
  10779.  
  10780.  
  10781.     template <typename S, bool condition>
  10782.     struct any_of_impl<S, when<condition>> : default_ {
  10783.         template <typename ...Args>
  10784.         static constexpr auto apply(Args&& ...) = delete;
  10785.     };
  10786.  
  10787.     template <typename S>
  10788.     struct any_of_impl<S, when<Sequence<S>::value>> {
  10789.  
  10790.         template <std::size_t k, std::size_t Len>
  10791.         struct any_of_helper {
  10792.             template <typename Xs, typename Pred>
  10793.             static constexpr auto apply(bool prev_cond, Xs&& xs, Pred&& pred) {
  10794.                 return prev_cond ? hana::true_c
  10795.                     : any_of_impl::any_of_helper<k + 1, Len>::apply(
  10796.                         hana::if_(pred(hana::at_c<k>(xs)), hana::true_c, hana::false_c),
  10797.                         static_cast<Xs&&>(xs),
  10798.                         static_cast<Pred&&>(pred)
  10799.                     );
  10800.             }
  10801.  
  10802.             template <typename Xs, typename Pred>
  10803.             static constexpr auto apply(hana::true_, Xs&&, Pred&&)
  10804.             { return hana::true_c; }
  10805.  
  10806.             template <typename Xs, typename Pred>
  10807.             static constexpr auto apply(hana::false_, Xs&& xs, Pred&& pred) {
  10808.                 auto cond = hana::if_(pred(hana::at_c<k>(xs)), hana::true_c,
  10809.                                                                hana::false_c);
  10810.                 return any_of_impl::any_of_helper<k + 1, Len>::apply(cond,
  10811.                                         static_cast<Xs&&>(xs),
  10812.                                         static_cast<Pred&&>(pred));
  10813.             }
  10814.         };
  10815.  
  10816.         template <std::size_t Len>
  10817.         struct any_of_helper<Len, Len> {
  10818.             template <typename Cond, typename Xs, typename Pred>
  10819.             static constexpr auto apply(Cond cond, Xs&&, Pred&&)
  10820.             { return cond; }
  10821.         };
  10822.  
  10823.         template <typename Xs, typename Pred>
  10824.         static constexpr auto apply(Xs&& xs, Pred&& pred) {
  10825.             constexpr std::size_t len = decltype(hana::length(xs))::value;
  10826.             return any_of_impl::any_of_helper<0, len>::apply(hana::false_c,
  10827.                                             static_cast<Xs&&>(xs),
  10828.                                             static_cast<Pred&&>(pred));
  10829.         }
  10830.  
  10831.     };
  10832.  
  10833.     template <typename It>
  10834.     struct any_of_impl<It, when<
  10835.         hana::Iterable<It>::value &&
  10836.         !Sequence<It>::value
  10837.     >> {
  10838.         template <typename Xs, typename Pred>
  10839.         static constexpr auto lazy_any_of_helper(hana::false_, bool prev_cond, Xs&& xs, Pred&& pred) {
  10840.             decltype(auto) tail = hana::drop_front(static_cast<Xs&&>(xs));
  10841.             constexpr bool done = decltype(hana::is_empty(tail))::value;
  10842.             return prev_cond ? hana::true_c
  10843.                 : lazy_any_of_helper(hana::bool_<done>{},
  10844.                     hana::if_(pred(hana::front(xs)), hana::true_{}, hana::false_{}),
  10845.                     static_cast<decltype(tail)&&>(tail),
  10846.                     static_cast<Pred&&>(pred)
  10847.                 );
  10848.         }
  10849.  
  10850.         template <typename Xs, typename Pred>
  10851.         static constexpr auto lazy_any_of_helper(hana::false_, hana::true_, Xs&&, Pred&&)
  10852.         { return hana::true_c; }
  10853.  
  10854.         template <typename Xs, typename Pred>
  10855.         static constexpr auto lazy_any_of_helper(hana::false_, hana::false_, Xs&& xs, Pred&& pred) {
  10856.             constexpr bool done = decltype(hana::is_empty(hana::drop_front(xs)))::value;
  10857.             return lazy_any_of_helper(hana::bool_c<done>,
  10858.                 hana::if_(pred(hana::front(xs)), hana::true_c, hana::false_c),
  10859.                 hana::drop_front(static_cast<Xs&&>(xs)),
  10860.                 static_cast<Pred&&>(pred)
  10861.             );
  10862.         }
  10863.  
  10864.         template <typename Cond, typename Xs, typename Pred>
  10865.         static constexpr auto lazy_any_of_helper(hana::true_, Cond cond, Xs&&, Pred&&)
  10866.         { return cond; }
  10867.  
  10868.         template <typename Xs, typename Pred>
  10869.         static constexpr auto apply(Xs&& xs, Pred&& pred) {
  10870.             constexpr bool done = decltype(hana::is_empty(xs))::value;
  10871.             return lazy_any_of_helper(hana::bool_c<done>, hana::false_c,
  10872.                                       static_cast<Xs&&>(xs),
  10873.                                       static_cast<Pred&&>(pred));
  10874.         }
  10875.     };
  10876.  
  10877.     template <typename T, std::size_t N>
  10878.     struct any_of_impl<T[N]> {
  10879.         template <typename Xs, typename Pred>
  10880.         static constexpr bool any_of_helper(bool cond, Xs&& xs, Pred&& pred) {
  10881.             if (cond) return true;
  10882.             for (std::size_t i = 1; i < N; ++i)
  10883.                 if (pred(static_cast<Xs&&>(xs)[i]))
  10884.                     return true;
  10885.             return false;
  10886.         }
  10887.  
  10888.  
  10889.  
  10890.  
  10891.  
  10892.         template <typename Xs, typename Pred>
  10893.         static constexpr auto
  10894.         any_of_helper(hana::true_, Xs&& , Pred&&)
  10895.         { return hana::true_c; }
  10896.  
  10897.         template <typename Xs, typename Pred>
  10898.         static constexpr auto
  10899.         any_of_helper(hana::false_, Xs&&, Pred&&)
  10900.         { return hana::false_c; }
  10901.  
  10902.         template <typename Xs, typename Pred>
  10903.         static constexpr auto apply(Xs&& xs, Pred&& pred) {
  10904.             auto cond = hana::if_(pred(static_cast<Xs&&>(xs)[0]), hana::true_c,
  10905.                                                                   hana::false_c);
  10906.             return any_of_helper(cond, static_cast<Xs&&>(xs),
  10907.                                        static_cast<Pred&&>(pred));
  10908.         }
  10909.     };
  10910.  
  10911.     template <typename S>
  10912.     struct any_of_impl<S, when<hana::Struct<S>::value>> {
  10913.         template <typename X, typename Pred>
  10914.         static constexpr decltype(auto) apply(X const&, Pred&& pred) {
  10915.             return hana::any_of(hana::accessors<S>(),
  10916.                     hana::compose(static_cast<Pred&&>(pred), hana::first));
  10917.         }
  10918.     };
  10919. }}
  10920. # 15 "/us/include/boost_1_64_0/boost/hana/all_of.hpp" 2
  10921.  
  10922.  
  10923.  
  10924.  
  10925.  
  10926.  
  10927.  
  10928.  
  10929. namespace boost { namespace hana {
  10930.  
  10931.     template <typename Xs, typename Pred>
  10932.     constexpr auto all_of_t::operator()(Xs&& xs, Pred&& pred) const {
  10933.         using S = typename hana::tag_of<Xs>::type;
  10934.         using AllOf = ::std::conditional_t< (hana::Searchable<S>::value), all_of_impl<S>, ::boost::hana::deleted_implementation >;
  10935.  
  10936.  
  10937.  
  10938.  
  10939.         static_assert(hana::Searchable<S>::value,
  10940.         "hana::all_of(xs, pred) requires 'xs' to be a Searchable");
  10941.  
  10942.  
  10943.         return AllOf::apply(static_cast<Xs&&>(xs), static_cast<Pred&&>(pred));
  10944.     }
  10945.  
  10946.  
  10947.     template <typename S, bool condition>
  10948.     struct all_of_impl<S, when<condition>> : default_ {
  10949.         template <typename Xs, typename Pred>
  10950.         static constexpr auto apply(Xs&& xs, Pred&& pred) {
  10951.             return hana::not_(hana::any_of(static_cast<Xs&&>(xs),
  10952.                     hana::compose(hana::not_, static_cast<Pred&&>(pred))));
  10953.         }
  10954.     };
  10955. }}
  10956. # 16 "/us/include/boost_1_64_0/boost/hana/equal.hpp" 2
  10957.  
  10958. # 1 "/us/include/boost_1_64_0/boost/hana/and.hpp" 1
  10959. # 22 "/us/include/boost_1_64_0/boost/hana/and.hpp"
  10960. namespace boost { namespace hana {
  10961.  
  10962.     template <typename X, typename Y>
  10963.     constexpr decltype(auto) and_t::operator()(X&& x, Y&& y) const {
  10964.         using Bool = typename hana::tag_of<X>::type;
  10965.         using And = ::std::conditional_t< (hana::Logical<Bool>::value), and_impl<Bool>, ::boost::hana::deleted_implementation >;
  10966.  
  10967.  
  10968.  
  10969.  
  10970.         static_assert(hana::Logical<Bool>::value,
  10971.         "hana::and_(x, y) requires 'x' to be a Logical");
  10972.  
  10973.  
  10974.         return And::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
  10975.     }
  10976.  
  10977.     template <typename X, typename ...Y>
  10978.     constexpr decltype(auto) and_t::operator()(X&& x, Y&& ...y) const {
  10979.         return detail::variadic::foldl1(
  10980.             *this,
  10981.             static_cast<X&&>(x),
  10982.             static_cast<Y&&>(y)...
  10983.         );
  10984.     }
  10985.  
  10986.  
  10987.     template <typename L, bool condition>
  10988.     struct and_impl<L, when<condition>> : default_ {
  10989.         template <typename X, typename Y>
  10990.         static constexpr decltype(auto) apply(X&& x, Y&& y) {
  10991.             return hana::if_(x, static_cast<Y&&>(y), x);
  10992.         }
  10993.     };
  10994. }}
  10995. # 17 "/us/include/boost_1_64_0/boost/hana/equal.hpp" 2
  10996.  
  10997.  
  10998.  
  10999. # 1 "/us/include/boost_1_64_0/boost/hana/concept/comparable.hpp" 1
  11000. # 13 "/us/include/boost_1_64_0/boost/hana/concept/comparable.hpp"
  11001. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/comparable.hpp" 1
  11002. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/comparable.hpp"
  11003. namespace boost { namespace hana {
  11004. # 156 "/us/include/boost_1_64_0/boost/hana/fwd/concept/comparable.hpp"
  11005.     template <typename T>
  11006.     struct Comparable;
  11007. }}
  11008. # 13 "/us/include/boost_1_64_0/boost/hana/concept/comparable.hpp" 2
  11009.  
  11010.  
  11011.  
  11012.  
  11013.  
  11014.  
  11015. # 1 "/us/include/boost_1_64_0/boost/hana/equal.hpp" 1
  11016. # 19 "/us/include/boost_1_64_0/boost/hana/concept/comparable.hpp" 2
  11017.  
  11018.  
  11019.  
  11020. namespace boost { namespace hana {
  11021.     template <typename T>
  11022.     struct Comparable
  11023.         : hana::integral_constant<bool,
  11024.             !is_default<equal_impl<typename tag_of<T>::type,
  11025.                                    typename tag_of<T>::type>>::value
  11026.         >
  11027.     { };
  11028. }}
  11029. # 20 "/us/include/boost_1_64_0/boost/hana/equal.hpp" 2
  11030. # 31 "/us/include/boost_1_64_0/boost/hana/equal.hpp"
  11031. # 1 "/us/include/boost_1_64_0/boost/hana/detail/concepts.hpp" 1
  11032. # 20 "/us/include/boost_1_64_0/boost/hana/detail/concepts.hpp"
  11033. namespace boost { namespace hana { namespace detail {
  11034.  
  11035.  
  11036.  
  11037.  
  11038.     template <typename T, typename U = T, typename = void>
  11039.     struct EqualityComparable : std::false_type { };
  11040.  
  11041.     template <typename T>
  11042.     struct EqualityComparable<T, T, detail::void_t<
  11043.         decltype(static_cast<T&&>(*(T*)0) == static_cast<T&&>(*(T*)0) ? 0:0),
  11044.         decltype(static_cast<T&&>(*(T*)0) != static_cast<T&&>(*(T*)0) ? 0:0)
  11045.     >> : std::true_type { };
  11046.  
  11047.     template <typename T, typename U>
  11048.     struct EqualityComparable<T, U, typename std::enable_if<
  11049.         !std::is_same<T, U>::value, detail::void_t<
  11050.             decltype(static_cast<T&&>(*(T*)0) == static_cast<U&&>(*(U*)0) ? 0:0),
  11051.             decltype(static_cast<U&&>(*(U*)0) == static_cast<T&&>(*(T*)0) ? 0:0),
  11052.             decltype(static_cast<T&&>(*(T*)0) != static_cast<U&&>(*(U*)0) ? 0:0),
  11053.             decltype(static_cast<U&&>(*(U*)0) != static_cast<T&&>(*(T*)0) ? 0:0),
  11054.             typename detail::std_common_type<T, U>::type
  11055.     >>::type> : std::integral_constant<bool,
  11056.         EqualityComparable<T>::value &&
  11057.         EqualityComparable<U>::value &&
  11058.         EqualityComparable<typename detail::std_common_type<T, U>::type>::value
  11059.     > { };
  11060.  
  11061.  
  11062.  
  11063.  
  11064.  
  11065.     template <typename T, typename U = T, typename = void>
  11066.     struct LessThanComparable : std::false_type { };
  11067.  
  11068.     template <typename T>
  11069.     struct LessThanComparable<T, T, detail::void_t<
  11070.         decltype(static_cast<T&&>(*(T*)0) < static_cast<T&&>(*(T*)0) ? 0:0)
  11071.     >> : std::true_type { };
  11072.  
  11073.     template <typename T, typename U>
  11074.     struct LessThanComparable<T, U, std::enable_if_t<
  11075.         !std::is_same<T, U>::value,
  11076.         detail::void_t<
  11077.             decltype(static_cast<T&&>(*(T*)0) < static_cast<U&&>(*(U*)0) ? 0:0),
  11078.             decltype(static_cast<U&&>(*(U*)0) < static_cast<T&&>(*(T*)0) ? 0:0),
  11079.             typename detail::std_common_type<T, U>::type
  11080.         >
  11081.     >>
  11082.         : std::integral_constant<bool,
  11083.             LessThanComparable<T>::value &&
  11084.             LessThanComparable<U>::value &&
  11085.             LessThanComparable<typename detail::std_common_type<T, U>::type>::value
  11086.         >
  11087.     { };
  11088.  
  11089. } }}
  11090. # 31 "/us/include/boost_1_64_0/boost/hana/equal.hpp" 2
  11091.  
  11092. # 1 "/us/include/boost_1_64_0/boost/hana/detail/has_common_embedding.hpp" 1
  11093. # 21 "/us/include/boost_1_64_0/boost/hana/detail/has_common_embedding.hpp"
  11094. namespace boost { namespace hana { namespace detail {
  11095.     template <template <typename...> class Concept, typename T, typename U, typename = void>
  11096.     struct has_common_embedding_impl : std::false_type { };
  11097.  
  11098.     template <template <typename...> class Concept, typename T, typename U>
  11099.     struct has_common_embedding_impl<Concept, T, U, detail::void_t<
  11100.         typename common<T, U>::type
  11101.     >> {
  11102.         using Common = typename common<T, U>::type;
  11103.         using type = std::integral_constant<bool,
  11104.             Concept<T>::value &&
  11105.             Concept<U>::value &&
  11106.             Concept<Common>::value &&
  11107.             is_embedded<T, Common>::value &&
  11108.             is_embedded<U, Common>::value
  11109.         >;
  11110.     };
  11111.  
  11112.  
  11113.  
  11114.  
  11115.  
  11116.  
  11117.  
  11118.     template <template <typename...> class Concept, typename T, typename U>
  11119.     using has_common_embedding = typename has_common_embedding_impl<Concept, T, U>::type;
  11120.  
  11121.     template <template <typename...> class Concept, typename T, typename U>
  11122.     struct has_nontrivial_common_embedding_impl
  11123.         : has_common_embedding_impl<Concept, T, U>
  11124.     { };
  11125.  
  11126.     template <template <typename...> class Concept, typename T>
  11127.     struct has_nontrivial_common_embedding_impl<Concept, T, T>
  11128.         : std::false_type
  11129.     { };
  11130.  
  11131.  
  11132.  
  11133.  
  11134.  
  11135.  
  11136.  
  11137.     template <template <typename...> class Concept, typename T, typename U>
  11138.     using has_nontrivial_common_embedding =
  11139.         typename has_nontrivial_common_embedding_impl<Concept, T, U>::type;
  11140. } }}
  11141. # 32 "/us/include/boost_1_64_0/boost/hana/equal.hpp" 2
  11142.  
  11143. # 1 "/us/include/boost_1_64_0/boost/hana/detail/nested_to.hpp" 1
  11144. # 19 "/us/include/boost_1_64_0/boost/hana/detail/nested_to.hpp"
  11145. namespace boost { namespace hana { namespace detail {
  11146.  
  11147.     template <typename Algorithm>
  11148.     template <typename X>
  11149.     constexpr decltype(auto) nested_to_t<Algorithm>::operator()(X&& x) const
  11150.     { return hana::partial(Algorithm{}, static_cast<X&&>(x)); }
  11151.  
  11152. } }}
  11153. # 33 "/us/include/boost_1_64_0/boost/hana/equal.hpp" 2
  11154. # 43 "/us/include/boost_1_64_0/boost/hana/equal.hpp"
  11155. namespace boost { namespace hana {
  11156.  
  11157.     template <typename X, typename Y>
  11158.     constexpr auto equal_t::operator()(X&& x, Y&& y) const {
  11159.         using T = typename hana::tag_of<X>::type;
  11160.         using U = typename hana::tag_of<Y>::type;
  11161.         using Equal = equal_impl<T, U>;
  11162.         return Equal::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
  11163.     }
  11164.  
  11165.  
  11166.     template <typename T, typename U, bool condition>
  11167.     struct equal_impl<T, U, when<condition>> : default_ {
  11168.         template <typename X, typename Y>
  11169.         static constexpr auto apply(X const&, Y const&) {
  11170.  
  11171.             using T_ = typename hana::tag_of<X>::type;
  11172.             static_assert(!hana::is_convertible<T_, U>::value &&
  11173.                           !hana::is_convertible<U, T_>::value,
  11174.             "No default implementation of hana::equal is provided for related "
  11175.             "types that can't be safely embedded into a common type, because "
  11176.             "those are most likely programming errors. If this is really what "
  11177.             "you want, you can manually convert both objects to a common "
  11178.             "Comparable type before performing the comparison. If you think "
  11179.             "you have made your types Comparable but you see this, perhaps you "
  11180.             "forgot to define some of the necessary methods for an automatic "
  11181.             "model of Comparable to kick in. A possible culprit is defining "
  11182.             "'operator==' but not 'operator!='.");
  11183.  
  11184.             return hana::false_c;
  11185.         }
  11186.     };
  11187.  
  11188.  
  11189.     template <typename T, typename U>
  11190.     struct equal_impl<T, U, when<
  11191.         detail::has_nontrivial_common_embedding<Comparable, T, U>::value &&
  11192.         !detail::EqualityComparable<T, U>::value
  11193.     >> {
  11194.         using C = typename hana::common<T, U>::type;
  11195.         template <typename X, typename Y>
  11196.         static constexpr auto apply(X&& x, Y&& y) {
  11197.             return hana::equal(hana::to<C>(static_cast<X&&>(x)),
  11198.                                hana::to<C>(static_cast<Y&&>(y)));
  11199.         }
  11200.     };
  11201.  
  11202.  
  11203.  
  11204.  
  11205.     template <typename T, typename U>
  11206.     struct equal_impl<T, U, when<detail::EqualityComparable<T, U>::value>> {
  11207.         template <typename X, typename Y>
  11208.         static constexpr auto apply(X&& x, Y&& y)
  11209.         { return static_cast<X&&>(x) == static_cast<Y&&>(y); }
  11210.     };
  11211.  
  11212.  
  11213.  
  11214.  
  11215.     template <typename C>
  11216.     struct equal_impl<C, C, when<
  11217.         hana::Constant<C>::value &&
  11218.         Comparable<typename C::value_type>::value
  11219.     >> {
  11220.         template <typename X, typename Y>
  11221.         static constexpr auto apply(X const&, Y const&) {
  11222.             constexpr auto eq = hana::equal(hana::value<X>(), hana::value<Y>());
  11223.             constexpr bool truth_value = hana::if_(eq, true, false);
  11224.             return hana::bool_<truth_value>{};
  11225.         }
  11226.     };
  11227.  
  11228.  
  11229.  
  11230.  
  11231.     template <typename T, typename U>
  11232.     struct equal_impl<T, U, when<hana::Product<T>::value && hana::Product<U>::value>> {
  11233.         template <typename X, typename Y>
  11234.         static constexpr auto apply(X const& x, Y const& y) {
  11235.             return hana::and_(
  11236.                 hana::equal(hana::first(x), hana::first(y)),
  11237.                 hana::equal(hana::second(x), hana::second(y))
  11238.             );
  11239.         }
  11240.     };
  11241.  
  11242.  
  11243.  
  11244.  
  11245.     namespace detail {
  11246.         template <typename Xs, typename Ys, std::size_t Length>
  11247.         struct compare_finite_sequences {
  11248.             Xs const& xs;
  11249.             Ys const& ys;
  11250.  
  11251.             template <std::size_t i>
  11252.             constexpr auto apply(hana::false_, hana::true_) const {
  11253.                 return compare_finite_sequences::apply<i+1>(
  11254.                     hana::bool_<i+1 == Length>{},
  11255.                     hana::if_(hana::equal(hana::at_c<i>(xs), hana::at_c<i>(ys)),
  11256.                               hana::true_c, hana::false_c)
  11257.                 );
  11258.             }
  11259.  
  11260.             template <std::size_t i>
  11261.             constexpr auto apply(hana::false_, hana::false_) const
  11262.             { return hana::false_c; }
  11263.  
  11264.             template <std::size_t i, typename Result>
  11265.             constexpr auto apply(hana::true_, Result r) const
  11266.             { return r; }
  11267.  
  11268.             template <std::size_t i>
  11269.             constexpr bool apply(hana::false_, bool b) const {
  11270.                 return b && compare_finite_sequences::apply<i+1>(
  11271.                     hana::bool_<i+1 == Length>{},
  11272.                     hana::if_(hana::equal(hana::at_c<i>(xs), hana::at_c<i>(ys)),
  11273.                               hana::true_c, hana::false_c)
  11274.                 );
  11275.             }
  11276.         };
  11277.     }
  11278.  
  11279.     template <typename T, typename U>
  11280.     struct equal_impl<T, U, when<Sequence<T>::value && hana::Sequence<U>::value>> {
  11281.         template <typename Xs, typename Ys>
  11282.         static constexpr auto apply(Xs const& xs, Ys const& ys) {
  11283.             constexpr std::size_t xs_size = decltype(hana::length(xs))::value;
  11284.             constexpr std::size_t ys_size = decltype(hana::length(ys))::value;
  11285.             detail::compare_finite_sequences<Xs, Ys, xs_size> comp{xs, ys};
  11286.             return comp.template apply<0>(hana::bool_<xs_size == 0>{},
  11287.                                           hana::bool_<xs_size == ys_size>{});
  11288.         }
  11289.     };
  11290.  
  11291.     namespace detail {
  11292.         template <typename X, typename Y>
  11293.         struct compare_struct_members {
  11294.             X const& x;
  11295.             Y const& y;
  11296.  
  11297.             template <typename Member>
  11298.             constexpr auto operator()(Member&& member) const {
  11299.                 auto accessor = hana::second(static_cast<Member&&>(member));
  11300.                 return hana::equal(accessor(x), accessor(y));
  11301.             }
  11302.         };
  11303.     }
  11304.  
  11305.     template <typename S>
  11306.     struct equal_impl<S, S, when<hana::Struct<S>::value>> {
  11307.         template <typename X, typename Y>
  11308.         static constexpr auto apply(X const& x, Y const& y) {
  11309.             return hana::all_of(hana::accessors<S>(),
  11310.                 detail::compare_struct_members<X, Y>{x, y});
  11311.         }
  11312.     };
  11313. }}
  11314. # 18 "test.cpp" 2
  11315.  
  11316. # 1 "/us/include/boost_1_64_0/boost/hana/less.hpp" 1
  11317. # 18 "/us/include/boost_1_64_0/boost/hana/less.hpp"
  11318. # 1 "/us/include/boost_1_64_0/boost/hana/concept/orderable.hpp" 1
  11319. # 13 "/us/include/boost_1_64_0/boost/hana/concept/orderable.hpp"
  11320. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/orderable.hpp" 1
  11321. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/orderable.hpp"
  11322. namespace boost { namespace hana {
  11323. # 183 "/us/include/boost_1_64_0/boost/hana/fwd/concept/orderable.hpp"
  11324.     template <typename Ord>
  11325.     struct Orderable;
  11326. }}
  11327. # 13 "/us/include/boost_1_64_0/boost/hana/concept/orderable.hpp" 2
  11328.  
  11329.  
  11330.  
  11331.  
  11332.  
  11333.  
  11334. # 1 "/us/include/boost_1_64_0/boost/hana/less.hpp" 1
  11335. # 19 "/us/include/boost_1_64_0/boost/hana/concept/orderable.hpp" 2
  11336.  
  11337.  
  11338.  
  11339. namespace boost { namespace hana {
  11340.     template <typename Ord>
  11341.     struct Orderable
  11342.         : hana::integral_constant<bool,
  11343.             !is_default<less_impl<typename tag_of<Ord>::type,
  11344.                                   typename tag_of<Ord>::type>>::value
  11345.         >
  11346.     { };
  11347. }}
  11348. # 18 "/us/include/boost_1_64_0/boost/hana/less.hpp" 2
  11349. # 27 "/us/include/boost_1_64_0/boost/hana/less.hpp"
  11350. # 1 "/us/include/boost_1_64_0/boost/hana/detail/nested_than.hpp" 1
  11351. # 16 "/us/include/boost_1_64_0/boost/hana/detail/nested_than.hpp"
  11352. # 1 "/us/include/boost_1_64_0/boost/hana/functional/flip.hpp" 1
  11353. # 19 "/us/include/boost_1_64_0/boost/hana/functional/flip.hpp"
  11354. namespace boost { namespace hana {
  11355. # 37 "/us/include/boost_1_64_0/boost/hana/functional/flip.hpp"
  11356.     template <typename F>
  11357.     struct flip_t {
  11358.         F f;
  11359.  
  11360.         template <typename X, typename Y, typename ...Z>
  11361.         constexpr decltype(auto) operator()(X&& x, Y&& y, Z&& ...z) const& {
  11362.             return f(
  11363.                 static_cast<Y&&>(y),
  11364.                 static_cast<X&&>(x),
  11365.                 static_cast<Z&&>(z)...
  11366.             );
  11367.         }
  11368.  
  11369.         template <typename X, typename Y, typename ...Z>
  11370.         constexpr decltype(auto) operator()(X&& x, Y&& y, Z&& ...z) & {
  11371.             return f(
  11372.                 static_cast<Y&&>(y),
  11373.                 static_cast<X&&>(x),
  11374.                 static_cast<Z&&>(z)...
  11375.             );
  11376.         }
  11377.  
  11378.         template <typename X, typename Y, typename ...Z>
  11379.         constexpr decltype(auto) operator()(X&& x, Y&& y, Z&& ...z) && {
  11380.             return std::move(f)(
  11381.                 static_cast<Y&&>(y),
  11382.                 static_cast<X&&>(x),
  11383.                 static_cast<Z&&>(z)...
  11384.             );
  11385.         }
  11386.     };
  11387.  
  11388.     constexpr detail::create<flip_t> flip{};
  11389.  
  11390. }}
  11391. # 16 "/us/include/boost_1_64_0/boost/hana/detail/nested_than.hpp" 2
  11392.  
  11393.  
  11394.  
  11395.  
  11396. namespace boost { namespace hana { namespace detail {
  11397.  
  11398.     template <typename Algorithm>
  11399.     template <typename X>
  11400.     constexpr decltype(auto) nested_than_t<Algorithm>::operator()(X&& x) const
  11401.     { return hana::partial(hana::flip(Algorithm{}), static_cast<X&&>(x)); }
  11402.  
  11403. } }}
  11404. # 27 "/us/include/boost_1_64_0/boost/hana/less.hpp" 2
  11405.  
  11406.  
  11407.  
  11408.  
  11409. # 1 "/us/include/boost_1_64_0/boost/hana/less_equal.hpp" 1
  11410. # 22 "/us/include/boost_1_64_0/boost/hana/less_equal.hpp"
  11411. # 1 "/us/include/boost_1_64_0/boost/hana/less.hpp" 1
  11412. # 22 "/us/include/boost_1_64_0/boost/hana/less_equal.hpp" 2
  11413.  
  11414.  
  11415.  
  11416.  
  11417.  
  11418.  
  11419. namespace boost { namespace hana {
  11420.  
  11421.     template <typename X, typename Y>
  11422.     constexpr auto less_equal_t::operator()(X&& x, Y&& y) const {
  11423.         using T = typename hana::tag_of<X>::type;
  11424.         using U = typename hana::tag_of<Y>::type;
  11425.         using LessEqual = ::std::conditional_t< (hana::Orderable<T>::value && hana::Orderable<U>::value), decltype(less_equal_impl<T, U>{}), ::boost::hana::deleted_implementation >;
  11426.  
  11427.  
  11428.  
  11429.  
  11430.  
  11431.  
  11432.         static_assert(hana::Orderable<T>::value,
  11433.         "hana::less_equal(x, y) requires 'x' to be Orderable");
  11434.  
  11435.         static_assert(hana::Orderable<U>::value,
  11436.         "hana::less_equal(x, y) requires 'y' to be Orderable");
  11437.  
  11438.  
  11439.         return LessEqual::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
  11440.     }
  11441.  
  11442.  
  11443.     template <typename T, typename U, bool condition>
  11444.     struct less_equal_impl<T, U, when<condition>> : default_ {
  11445.         template <typename X, typename Y>
  11446.         static constexpr decltype(auto) apply(X&& x, Y&& y) {
  11447.             return hana::not_(hana::less(static_cast<Y&&>(y),
  11448.                                          static_cast<X&&>(x)));
  11449.         }
  11450.     };
  11451.  
  11452.  
  11453.     template <typename T, typename U>
  11454.     struct less_equal_impl<T, U, when<
  11455.         detail::has_nontrivial_common_embedding<Orderable, T, U>::value
  11456.     >> {
  11457.         using C = typename hana::common<T, U>::type;
  11458.         template <typename X, typename Y>
  11459.         static constexpr decltype(auto) apply(X&& x, Y&& y) {
  11460.             return hana::less_equal(hana::to<C>(static_cast<X&&>(x)),
  11461.                                     hana::to<C>(static_cast<Y&&>(y)));
  11462.         }
  11463.     };
  11464. }}
  11465. # 31 "/us/include/boost_1_64_0/boost/hana/less.hpp" 2
  11466.  
  11467. # 1 "/us/include/boost_1_64_0/boost/hana/lexicographical_compare.hpp" 1
  11468. # 13 "/us/include/boost_1_64_0/boost/hana/lexicographical_compare.hpp"
  11469. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/lexicographical_compare.hpp" 1
  11470. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/lexicographical_compare.hpp"
  11471. namespace boost { namespace hana {
  11472. # 78 "/us/include/boost_1_64_0/boost/hana/fwd/lexicographical_compare.hpp"
  11473.     template <typename T, typename = void>
  11474.     struct lexicographical_compare_impl : lexicographical_compare_impl<T, when<true>> { };
  11475.  
  11476.     struct lexicographical_compare_t {
  11477.         template <typename Xs, typename Ys>
  11478.         constexpr auto operator()(Xs const& xs, Ys const& ys) const;
  11479.  
  11480.         template <typename Xs, typename Ys, typename Pred>
  11481.         constexpr auto operator()(Xs const& xs, Ys const& ys, Pred const& pred) const;
  11482.     };
  11483.  
  11484.     constexpr lexicographical_compare_t lexicographical_compare{};
  11485.  
  11486. }}
  11487. # 13 "/us/include/boost_1_64_0/boost/hana/lexicographical_compare.hpp" 2
  11488. # 23 "/us/include/boost_1_64_0/boost/hana/lexicographical_compare.hpp"
  11489. # 1 "/us/include/boost_1_64_0/boost/hana/less.hpp" 1
  11490. # 23 "/us/include/boost_1_64_0/boost/hana/lexicographical_compare.hpp" 2
  11491.  
  11492.  
  11493.  
  11494. namespace boost { namespace hana {
  11495.  
  11496.     template <typename Xs, typename Ys>
  11497.     constexpr auto lexicographical_compare_t::operator()(Xs const& xs, Ys const& ys) const {
  11498.         return hana::lexicographical_compare(xs, ys, hana::less);
  11499.     }
  11500.  
  11501.     template <typename Xs, typename Ys, typename Pred>
  11502.     constexpr auto lexicographical_compare_t::operator()(Xs const& xs, Ys const& ys, Pred const& pred) const {
  11503.         using It1 = typename hana::tag_of<Xs>::type;
  11504.         using It2 = typename hana::tag_of<Ys>::type;
  11505.         using LexicographicalCompare = ::std::conditional_t< (hana::Iterable<It1>::value && hana::Iterable<It2>::value), lexicographical_compare_impl<It1>, ::boost::hana::deleted_implementation >;
  11506.  
  11507.  
  11508.  
  11509.  
  11510.  
  11511.  
  11512.         static_assert(hana::Iterable<It1>::value,
  11513.         "hana::lexicographical_compare(xs, ys, pred) requires 'xs' to be Iterable");
  11514.  
  11515.         static_assert(hana::Iterable<It2>::value,
  11516.         "hana::lexicographical_compare(xs, ys, pred) requires 'ys' to be Iterable");
  11517.  
  11518.  
  11519.         return LexicographicalCompare::apply(xs, ys, pred);
  11520.     }
  11521.  
  11522.  
  11523.     template <typename It, bool condition>
  11524.     struct lexicographical_compare_impl<It, when<condition>> : default_ {
  11525.         template <typename Xs, typename Ys, typename Pred>
  11526.         static constexpr auto
  11527.         helper2(Xs const&, Ys const&, Pred const&, hana::true_)
  11528.         { return hana::false_c; }
  11529.  
  11530.         template <typename Xs, typename Ys, typename Pred>
  11531.         static constexpr auto
  11532.         helper2(Xs const& xs, Ys const& ys, Pred const& pred, hana::false_)
  11533.         { return apply(hana::drop_front(xs), hana::drop_front(ys), pred); }
  11534.  
  11535.         template <typename Xs, typename Ys, typename Pred>
  11536.         static constexpr auto
  11537.         helper2(Xs const& xs, Ys const& ys, Pred const& pred, bool is_greater)
  11538.         { return is_greater ? false : apply(hana::drop_front(xs), hana::drop_front(ys), pred); }
  11539.  
  11540.  
  11541.         template <typename Xs, typename Ys, typename Pred>
  11542.         static constexpr auto
  11543.         helper1(Xs const&, Ys const&, Pred const&, hana::true_)
  11544.         { return hana::true_c; }
  11545.  
  11546.         template <typename Xs, typename Ys, typename Pred>
  11547.         static constexpr auto
  11548.         helper1(Xs const& xs, Ys const& ys, Pred const& pred, hana::false_)
  11549.         { return helper2(xs, ys, pred, hana::if_(pred(hana::front(ys), hana::front(xs)), hana::true_c, hana::false_c)); }
  11550.  
  11551.         template <typename Xs, typename Ys, typename Pred>
  11552.         static constexpr auto
  11553.         helper1(Xs const& xs, Ys const& ys, Pred const& pred, bool is_less)
  11554.         { return is_less ? true : helper2(xs, ys, pred, hana::if_(pred(hana::front(ys), hana::front(xs)), hana::true_c, hana::false_c)); }
  11555.  
  11556.  
  11557.         template <typename Xs, typename Ys, typename Pred>
  11558.         static constexpr auto
  11559.         helper(Xs const&, Ys const& ys, Pred const&, hana::true_)
  11560.         { return hana::not_(hana::is_empty(ys)); }
  11561.  
  11562.         template <typename Xs, typename Ys, typename Pred>
  11563.         static constexpr auto
  11564.         helper(Xs const& xs, Ys const& ys, Pred const& pred, hana::false_)
  11565.         { return helper1(xs, ys, pred, hana::if_(pred(hana::front(xs), hana::front(ys)), hana::true_c, hana::false_c)); }
  11566.  
  11567.  
  11568.         template <typename Xs, typename Ys, typename Pred>
  11569.         static constexpr auto apply(Xs const& xs, Ys const& ys, Pred const& pred) {
  11570.             return helper(xs, ys, pred, hana::bool_c<
  11571.                 decltype(hana::is_empty(xs))::value ||
  11572.                 decltype(hana::is_empty(ys))::value
  11573.             >);
  11574.         }
  11575.     };
  11576. }}
  11577. # 32 "/us/include/boost_1_64_0/boost/hana/less.hpp" 2
  11578.  
  11579. # 1 "/us/include/boost_1_64_0/boost/hana/or.hpp" 1
  11580. # 22 "/us/include/boost_1_64_0/boost/hana/or.hpp"
  11581. namespace boost { namespace hana {
  11582.  
  11583.     template <typename X, typename Y>
  11584.     constexpr decltype(auto) or_t::operator()(X&& x, Y&& y) const {
  11585.         using Bool = typename hana::tag_of<X>::type;
  11586.         using Or = ::std::conditional_t< (hana::Logical<Bool>::value), or_impl<Bool>, ::boost::hana::deleted_implementation >;
  11587.  
  11588.  
  11589.  
  11590.  
  11591.         static_assert(hana::Logical<Bool>::value,
  11592.         "hana::or_(x, y) requires 'x' to be a Logical");
  11593.  
  11594.  
  11595.         return Or::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
  11596.     }
  11597.  
  11598.     template <typename X, typename ...Y>
  11599.     constexpr decltype(auto) or_t::operator()(X&& x, Y&& ...y) const {
  11600.         return detail::variadic::foldl1(
  11601.             *this,
  11602.             static_cast<X&&>(x),
  11603.             static_cast<Y&&>(y)...
  11604.         );
  11605.     }
  11606.  
  11607.  
  11608.     template <typename L, bool condition>
  11609.     struct or_impl<L, when<condition>> : hana::default_ {
  11610.         template <typename X, typename Y>
  11611.         static constexpr decltype(auto) apply(X&& x, Y&& y) {
  11612.  
  11613.  
  11614.  
  11615.             return hana::if_(x, x, static_cast<Y&&>(y));
  11616.         }
  11617.     };
  11618. }}
  11619. # 33 "/us/include/boost_1_64_0/boost/hana/less.hpp" 2
  11620.  
  11621.  
  11622.  
  11623.  
  11624.  
  11625. namespace boost { namespace hana {
  11626.  
  11627.     template <typename X, typename Y>
  11628.     constexpr auto less_t::operator()(X&& x, Y&& y) const {
  11629.         using T = typename hana::tag_of<X>::type;
  11630.         using U = typename hana::tag_of<Y>::type;
  11631.         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 >;
  11632.  
  11633.  
  11634.  
  11635.  
  11636.  
  11637.  
  11638.         static_assert(hana::Orderable<T>::value,
  11639.         "hana::less(x, y) requires 'x' to be Orderable");
  11640.  
  11641.         static_assert(hana::Orderable<U>::value,
  11642.         "hana::less(x, y) requires 'y' to be Orderable");
  11643.  
  11644.         static_assert(!is_default<less_impl<T, U>>::value,
  11645.         "hana::less(x, y) requires 'x' and 'y' to be embeddable "
  11646.         "in a common Orderable");
  11647.  
  11648.  
  11649.         return Less::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
  11650.     }
  11651.  
  11652.  
  11653.     template <typename T, typename U, bool condition>
  11654.     struct less_impl<T, U, when<condition>> : default_ {
  11655.         template <typename ...Args>
  11656.         static constexpr auto apply(Args&& ...) = delete;
  11657.     };
  11658.  
  11659.  
  11660.     template <typename T, typename U>
  11661.     struct less_impl<T, U, when<
  11662.         detail::has_nontrivial_common_embedding<Orderable, T, U>::value &&
  11663.         !detail::LessThanComparable<T, U>::value
  11664.     >> {
  11665.         using C = typename hana::common<T, U>::type;
  11666.         template <typename X, typename Y>
  11667.         static constexpr decltype(auto) apply(X&& x, Y&& y) {
  11668.             return hana::less(hana::to<C>(static_cast<X&&>(x)),
  11669.                               hana::to<C>(static_cast<Y&&>(y)));
  11670.         }
  11671.     };
  11672.  
  11673.  
  11674.  
  11675.  
  11676.     template <typename T, typename U>
  11677.     struct less_impl<T, U, when<detail::LessThanComparable<T, U>::value>> {
  11678.         template <typename X, typename Y>
  11679.         static constexpr decltype(auto) apply(X&& x, Y&& y)
  11680.         { return static_cast<X&&>(x) < static_cast<Y&&>(y); }
  11681.     };
  11682.  
  11683.  
  11684.  
  11685.  
  11686.     template <typename C>
  11687.     struct less_impl<C, C, when<
  11688.         hana::Constant<C>::value &&
  11689.         Orderable<typename C::value_type>::value
  11690.     >> {
  11691.         template <typename X, typename Y>
  11692.         static constexpr auto apply(X const&, Y const&) {
  11693.             constexpr auto is_less = hana::less(hana::value<X>(), hana::value<Y>());
  11694.             constexpr bool truth_value = hana::if_(is_less, true, false);
  11695.             return hana::bool_c<truth_value>;
  11696.         }
  11697.     };
  11698.  
  11699.  
  11700.  
  11701.  
  11702.     template <typename T, typename U>
  11703.     struct less_impl<T, U, when<hana::Product<T>::value && hana::Product<U>::value>> {
  11704.         template <typename X, typename Y>
  11705.         static constexpr decltype(auto) apply(X const& x, Y const& y) {
  11706.             return hana::or_(
  11707.                 hana::less(hana::first(x), hana::first(y)),
  11708.                 hana::and_(
  11709.                     hana::less_equal(hana::first(x), hana::first(y)),
  11710.                     hana::less(hana::second(x), hana::second(y))
  11711.                 )
  11712.             );
  11713.         }
  11714.     };
  11715.  
  11716.  
  11717.  
  11718.  
  11719.     template <typename T, typename U>
  11720.     struct less_impl<T, U, when<
  11721.         hana::Sequence<T>::value && hana::Sequence<U>::value
  11722.     >> {
  11723.         template <typename Xs, typename Ys>
  11724.         static constexpr auto apply(Xs const& xs, Ys const& ys)
  11725.         { return hana::lexicographical_compare(xs, ys); }
  11726.     };
  11727. }}
  11728. # 20 "test.cpp" 2
  11729. # 1 "/us/include/boost_1_64_0/boost/hana/minus.hpp" 1
  11730. # 16 "/us/include/boost_1_64_0/boost/hana/minus.hpp"
  11731. # 1 "/us/include/boost_1_64_0/boost/hana/concept/group.hpp" 1
  11732. # 13 "/us/include/boost_1_64_0/boost/hana/concept/group.hpp"
  11733. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/group.hpp" 1
  11734. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/group.hpp"
  11735. namespace boost { namespace hana {
  11736. # 107 "/us/include/boost_1_64_0/boost/hana/fwd/concept/group.hpp"
  11737.     template <typename G>
  11738.     struct Group;
  11739. }}
  11740. # 13 "/us/include/boost_1_64_0/boost/hana/concept/group.hpp" 2
  11741.  
  11742.  
  11743.  
  11744.  
  11745.  
  11746.  
  11747. # 1 "/us/include/boost_1_64_0/boost/hana/minus.hpp" 1
  11748. # 19 "/us/include/boost_1_64_0/boost/hana/concept/group.hpp" 2
  11749.  
  11750. # 1 "/us/include/boost_1_64_0/boost/hana/negate.hpp" 1
  11751. # 15 "/us/include/boost_1_64_0/boost/hana/negate.hpp"
  11752. # 1 "/us/include/boost_1_64_0/boost/hana/concept/group.hpp" 1
  11753. # 15 "/us/include/boost_1_64_0/boost/hana/negate.hpp" 2
  11754.  
  11755.  
  11756.  
  11757.  
  11758. # 1 "/us/include/boost_1_64_0/boost/hana/zero.hpp" 1
  11759. # 13 "/us/include/boost_1_64_0/boost/hana/zero.hpp"
  11760. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/zero.hpp" 1
  11761. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/zero.hpp"
  11762. namespace boost { namespace hana {
  11763. # 34 "/us/include/boost_1_64_0/boost/hana/fwd/zero.hpp"
  11764.     template <typename M, typename = void>
  11765.     struct zero_impl : zero_impl<M, when<true>> { };
  11766.  
  11767.     template <typename M>
  11768.     struct zero_t;
  11769.  
  11770.     template <typename M>
  11771.     constexpr zero_t<M> zero{};
  11772.  
  11773. }}
  11774. # 13 "/us/include/boost_1_64_0/boost/hana/zero.hpp" 2
  11775.  
  11776.  
  11777.  
  11778. # 1 "/us/include/boost_1_64_0/boost/hana/concept/monoid.hpp" 1
  11779. # 13 "/us/include/boost_1_64_0/boost/hana/concept/monoid.hpp"
  11780. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/monoid.hpp" 1
  11781. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/monoid.hpp"
  11782. namespace boost { namespace hana {
  11783. # 97 "/us/include/boost_1_64_0/boost/hana/fwd/concept/monoid.hpp"
  11784.     template <typename M>
  11785.     struct Monoid;
  11786. }}
  11787. # 13 "/us/include/boost_1_64_0/boost/hana/concept/monoid.hpp" 2
  11788.  
  11789.  
  11790.  
  11791.  
  11792.  
  11793.  
  11794. # 1 "/us/include/boost_1_64_0/boost/hana/plus.hpp" 1
  11795. # 16 "/us/include/boost_1_64_0/boost/hana/plus.hpp"
  11796. # 1 "/us/include/boost_1_64_0/boost/hana/concept/monoid.hpp" 1
  11797. # 16 "/us/include/boost_1_64_0/boost/hana/plus.hpp" 2
  11798. # 27 "/us/include/boost_1_64_0/boost/hana/plus.hpp"
  11799. namespace boost { namespace hana {
  11800.  
  11801.     template <typename X, typename Y>
  11802.     constexpr decltype(auto) plus_t::operator()(X&& x, Y&& y) const {
  11803.         using T = typename hana::tag_of<X>::type;
  11804.         using U = typename hana::tag_of<Y>::type;
  11805.         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 >;
  11806.  
  11807.  
  11808.  
  11809.  
  11810.  
  11811.  
  11812.         static_assert(hana::Monoid<T>::value,
  11813.         "hana::plus(x, y) requires 'x' to be a Monoid");
  11814.  
  11815.         static_assert(hana::Monoid<U>::value,
  11816.         "hana::plus(x, y) requires 'y' to be a Monoid");
  11817.  
  11818.         static_assert(!is_default<plus_impl<T, U>>::value,
  11819.         "hana::plus(x, y) requires 'x' and 'y' to be embeddable "
  11820.         "in a common Monoid");
  11821.  
  11822.  
  11823.         return Plus::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
  11824.     }
  11825.  
  11826.  
  11827.     template <typename T, typename U, bool condition>
  11828.     struct plus_impl<T, U, when<condition>> : default_ {
  11829.         template <typename ...Args>
  11830.         static constexpr auto apply(Args&& ...) = delete;
  11831.     };
  11832.  
  11833.  
  11834.     template <typename T, typename U>
  11835.     struct plus_impl<T, U, when<
  11836.         detail::has_nontrivial_common_embedding<Monoid, T, U>::value
  11837.     >> {
  11838.         using C = typename common<T, U>::type;
  11839.         template <typename X, typename Y>
  11840.         static constexpr decltype(auto) apply(X&& x, Y&& y) {
  11841.             return hana::plus(hana::to<C>(static_cast<X&&>(x)),
  11842.                               hana::to<C>(static_cast<Y&&>(y)));
  11843.         }
  11844.     };
  11845.  
  11846.  
  11847.  
  11848.  
  11849.     template <typename T>
  11850.     struct plus_impl<T, T, when<
  11851.         std::is_arithmetic<T>::value &&
  11852.         !std::is_same<T, bool>::value
  11853.     >> {
  11854.         template <typename X, typename Y>
  11855.         static constexpr decltype(auto) apply(X&& x, Y&& y)
  11856.         { return static_cast<X&&>(x) + static_cast<Y&&>(y); }
  11857.     };
  11858.  
  11859.  
  11860.  
  11861.  
  11862.     namespace detail {
  11863.         template <typename C, typename X, typename Y>
  11864.         struct constant_from_plus {
  11865.             static constexpr auto value = hana::plus(hana::value<X>(), hana::value<Y>());
  11866.             using hana_tag = detail::CanonicalConstant<typename C::value_type>;
  11867.         };
  11868.     }
  11869.  
  11870.     template <typename C>
  11871.     struct plus_impl<C, C, when<
  11872.         hana::Constant<C>::value &&
  11873.         Monoid<typename C::value_type>::value
  11874.     >> {
  11875.         template <typename X, typename Y>
  11876.         static constexpr decltype(auto) apply(X const&, Y const&)
  11877.         { return hana::to<C>(detail::constant_from_plus<C, X, Y>{}); }
  11878.     };
  11879. }}
  11880. # 19 "/us/include/boost_1_64_0/boost/hana/concept/monoid.hpp" 2
  11881.  
  11882. # 1 "/us/include/boost_1_64_0/boost/hana/zero.hpp" 1
  11883. # 20 "/us/include/boost_1_64_0/boost/hana/concept/monoid.hpp" 2
  11884.  
  11885.  
  11886.  
  11887. namespace boost { namespace hana {
  11888.     template <typename M>
  11889.     struct Monoid
  11890.         : hana::integral_constant<bool,
  11891.             !is_default<zero_impl<typename tag_of<M>::type>>::value &&
  11892.             !is_default<plus_impl<typename tag_of<M>::type,
  11893.                                   typename tag_of<M>::type>>::value
  11894.         >
  11895.     { };
  11896. }}
  11897. # 16 "/us/include/boost_1_64_0/boost/hana/zero.hpp" 2
  11898. # 25 "/us/include/boost_1_64_0/boost/hana/zero.hpp"
  11899. namespace boost { namespace hana {
  11900.     template <typename M>
  11901.     struct zero_t {
  11902.  
  11903.         static_assert(hana::Monoid<M>::value,
  11904.         "hana::zero<M>() requires 'M' to be a Monoid");
  11905.  
  11906.  
  11907.         constexpr decltype(auto) operator()() const {
  11908.             using Zero = ::std::conditional_t< (hana::Monoid<M>::value), zero_impl<M>, ::boost::hana::deleted_implementation >;
  11909.  
  11910.  
  11911.  
  11912.             return Zero::apply();
  11913.         }
  11914.     };
  11915.  
  11916.     template <typename M, bool condition>
  11917.     struct zero_impl<M, when<condition>> : default_ {
  11918.         template <typename ...Args>
  11919.         static constexpr auto apply(Args&& ...) = delete;
  11920.     };
  11921.  
  11922.  
  11923.  
  11924.  
  11925.     template <typename T>
  11926.     struct zero_impl<T, when<
  11927.         std::is_arithmetic<T>::value &&
  11928.         !std::is_same<T, bool>::value
  11929.     >> {
  11930.         static constexpr T apply()
  11931.         { return static_cast<T>(0); }
  11932.     };
  11933.  
  11934.  
  11935.  
  11936.  
  11937.     namespace detail {
  11938.         template <typename C>
  11939.         struct constant_from_zero {
  11940.             static constexpr auto value = hana::zero<typename C::value_type>();
  11941.             using hana_tag = detail::CanonicalConstant<typename C::value_type>;
  11942.         };
  11943.     }
  11944.  
  11945.     template <typename C>
  11946.     struct zero_impl<C, when<
  11947.         hana::Constant<C>::value &&
  11948.         Monoid<typename C::value_type>::value
  11949.     >> {
  11950.         static constexpr decltype(auto) apply()
  11951.         { return hana::to<C>(detail::constant_from_zero<C>{}); }
  11952.     };
  11953. }}
  11954. # 19 "/us/include/boost_1_64_0/boost/hana/negate.hpp" 2
  11955.  
  11956.  
  11957.  
  11958.  
  11959.  
  11960. namespace boost { namespace hana {
  11961.  
  11962.     template <typename X>
  11963.     constexpr decltype(auto) negate_t::operator()(X&& x) const {
  11964.         using G = typename hana::tag_of<X>::type;
  11965.         using Negate = ::std::conditional_t< (hana::Group<G>::value), negate_impl<G>, ::boost::hana::deleted_implementation >;
  11966.  
  11967.  
  11968.  
  11969.  
  11970.         static_assert(hana::Group<G>::value,
  11971.         "hana::negate(x) requires 'x' to be in a Group");
  11972.  
  11973.  
  11974.         return Negate::apply(static_cast<X&&>(x));
  11975.     }
  11976.  
  11977.  
  11978.     template <typename T, bool condition>
  11979.     struct negate_impl<T, when<condition>> : default_ {
  11980.         template <typename X>
  11981.         static constexpr decltype(auto) apply(X&& x)
  11982.         { return hana::minus(hana::zero<T>(), static_cast<X&&>(x)); }
  11983.     };
  11984.  
  11985.  
  11986.  
  11987.  
  11988.     template <typename T>
  11989.     struct negate_impl<T, when<std::is_arithmetic<T>::value &&
  11990.                                !std::is_same<bool, T>::value>> {
  11991.         template <typename X>
  11992.         static constexpr decltype(auto) apply(X&& x)
  11993.         { return -static_cast<X&&>(x); }
  11994.     };
  11995. }}
  11996. # 20 "/us/include/boost_1_64_0/boost/hana/concept/group.hpp" 2
  11997.  
  11998.  
  11999.  
  12000. namespace boost { namespace hana {
  12001.     template <typename G>
  12002.     struct Group
  12003.         : hana::integral_constant<bool,
  12004.             !is_default<negate_impl<typename tag_of<G>::type>>::value ||
  12005.             !is_default<minus_impl<typename tag_of<G>::type,
  12006.                                    typename tag_of<G>::type>>::value
  12007.         >
  12008.     { };
  12009. }}
  12010. # 16 "/us/include/boost_1_64_0/boost/hana/minus.hpp" 2
  12011. # 30 "/us/include/boost_1_64_0/boost/hana/minus.hpp"
  12012. namespace boost { namespace hana {
  12013.  
  12014.     template <typename X, typename Y>
  12015.     constexpr decltype(auto) minus_t::operator()(X&& x, Y&& y) const {
  12016.         using T = typename hana::tag_of<X>::type;
  12017.         using U = typename hana::tag_of<Y>::type;
  12018.         using Minus = ::std::conditional_t< (hana::Group<T>::value && hana::Group<U>::value), decltype(minus_impl<T, U>{}), ::boost::hana::deleted_implementation >;
  12019.  
  12020.  
  12021.  
  12022.  
  12023.  
  12024.         static_assert(hana::Group<T>::value,
  12025.         "hana::minus(x, y) requires 'x' to be in a Group");
  12026.  
  12027.         static_assert(hana::Group<U>::value,
  12028.         "hana::minus(x, y) requires 'y' to be in a Group");
  12029.  
  12030.  
  12031.         return Minus::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
  12032.     }
  12033.  
  12034.  
  12035.     template <typename T, typename U, bool condition>
  12036.     struct minus_impl<T, U, when<condition>> : default_ {
  12037.         template <typename ...Args>
  12038.         static constexpr auto apply(Args&& ...) = delete;
  12039.     };
  12040.  
  12041.     template <typename T, bool condition>
  12042.     struct minus_impl<T, T, when<condition>> : default_ {
  12043.         template <typename X, typename Y>
  12044.         static constexpr decltype(auto) apply(X&& x, Y&& y) {
  12045.             return hana::plus(static_cast<X&&>(x),
  12046.                               hana::negate(static_cast<Y&&>(y)));
  12047.         }
  12048.     };
  12049.  
  12050.  
  12051.     template <typename T, typename U>
  12052.     struct minus_impl<T, U, when<
  12053.         detail::has_nontrivial_common_embedding<Group, T, U>::value
  12054.     >> {
  12055.         using C = typename common<T, U>::type;
  12056.         template <typename X, typename Y>
  12057.         static constexpr decltype(auto) apply(X&& x, Y&& y) {
  12058.             return hana::minus(hana::to<C>(static_cast<X&&>(x)),
  12059.                                hana::to<C>(static_cast<Y&&>(y)));
  12060.         }
  12061.     };
  12062.  
  12063.  
  12064.  
  12065.  
  12066.     template <typename T>
  12067.     struct minus_impl<T, T, when<std::is_arithmetic<T>::value &&
  12068.                                  !std::is_same<bool, T>::value>> {
  12069.         template <typename X, typename Y>
  12070.         static constexpr decltype(auto) apply(X&& x, Y&& y)
  12071.         { return static_cast<X&&>(x) - static_cast<Y&&>(y); }
  12072.     };
  12073.  
  12074.  
  12075.  
  12076.  
  12077.     namespace detail {
  12078.         template <typename C, typename X, typename Y>
  12079.         struct constant_from_minus {
  12080.             static constexpr auto value = hana::minus(hana::value<X>(), hana::value<Y>());
  12081.             using hana_tag = detail::CanonicalConstant<typename C::value_type>;
  12082.         };
  12083.     }
  12084.  
  12085.     template <typename C>
  12086.     struct minus_impl<C, C, when<
  12087.         hana::Constant<C>::value &&
  12088.         Group<typename C::value_type>::value
  12089.     >> {
  12090.         template <typename X, typename Y>
  12091.         static constexpr decltype(auto) apply(X const&, Y const&)
  12092.         { return hana::to<C>(detail::constant_from_minus<C, X, Y>{}); }
  12093.     };
  12094. }}
  12095. # 21 "test.cpp" 2
  12096. # 1 "/us/include/boost_1_64_0/boost/hana/mult.hpp" 1
  12097. # 16 "/us/include/boost_1_64_0/boost/hana/mult.hpp"
  12098. # 1 "/us/include/boost_1_64_0/boost/hana/concept/ring.hpp" 1
  12099. # 13 "/us/include/boost_1_64_0/boost/hana/concept/ring.hpp"
  12100. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/concept/ring.hpp" 1
  12101. # 16 "/us/include/boost_1_64_0/boost/hana/fwd/concept/ring.hpp"
  12102. namespace boost { namespace hana {
  12103. # 102 "/us/include/boost_1_64_0/boost/hana/fwd/concept/ring.hpp"
  12104.     template <typename R>
  12105.     struct Ring;
  12106. }}
  12107. # 13 "/us/include/boost_1_64_0/boost/hana/concept/ring.hpp" 2
  12108.  
  12109.  
  12110.  
  12111.  
  12112.  
  12113.  
  12114. # 1 "/us/include/boost_1_64_0/boost/hana/mult.hpp" 1
  12115. # 19 "/us/include/boost_1_64_0/boost/hana/concept/ring.hpp" 2
  12116.  
  12117. # 1 "/us/include/boost_1_64_0/boost/hana/one.hpp" 1
  12118. # 13 "/us/include/boost_1_64_0/boost/hana/one.hpp"
  12119. # 1 "/us/include/boost_1_64_0/boost/hana/fwd/one.hpp" 1
  12120. # 17 "/us/include/boost_1_64_0/boost/hana/fwd/one.hpp"
  12121. namespace boost { namespace hana {
  12122. # 34 "/us/include/boost_1_64_0/boost/hana/fwd/one.hpp"
  12123.     template <typename R, typename = void>
  12124.     struct one_impl : one_impl<R, when<true>> { };
  12125.  
  12126.     template <typename R>
  12127.     struct one_t;
  12128.  
  12129.     template <typename R>
  12130.     constexpr one_t<R> one{};
  12131.  
  12132. }}
  12133. # 13 "/us/include/boost_1_64_0/boost/hana/one.hpp" 2
  12134.  
  12135.  
  12136.  
  12137. # 1 "/us/include/boost_1_64_0/boost/hana/concept/ring.hpp" 1
  12138. # 16 "/us/include/boost_1_64_0/boost/hana/one.hpp" 2
  12139. # 25 "/us/include/boost_1_64_0/boost/hana/one.hpp"
  12140. namespace boost { namespace hana {
  12141.     template <typename R>
  12142.     struct one_t {
  12143.  
  12144.         static_assert(hana::Ring<R>::value,
  12145.         "hana::one<R>() requires 'R' to be a Ring");
  12146.  
  12147.  
  12148.         constexpr decltype(auto) operator()() const {
  12149.             using One = ::std::conditional_t< (hana::Ring<R>::value), one_impl<R>, ::boost::hana::deleted_implementation >;
  12150.  
  12151.  
  12152.  
  12153.             return One::apply();
  12154.         }
  12155.     };
  12156.  
  12157.     template <typename R, bool condition>
  12158.     struct one_impl<R, when<condition>> : default_ {
  12159.         template <typename ...Args>
  12160.         static constexpr auto apply(Args&& ...) = delete;
  12161.     };
  12162.  
  12163.  
  12164.  
  12165.  
  12166.     template <typename T>
  12167.     struct one_impl<T, when<std::is_arithmetic<T>::value &&
  12168.                             !std::is_same<bool, T>::value>> {
  12169.         static constexpr T apply()
  12170.         { return static_cast<T>(1); }
  12171.     };
  12172.  
  12173.  
  12174.  
  12175.  
  12176.     namespace detail {
  12177.         template <typename C>
  12178.         struct constant_from_one {
  12179.             static constexpr auto value = hana::one<typename C::value_type>();
  12180.             using hana_tag = detail::CanonicalConstant<typename C::value_type>;
  12181.         };
  12182.     }
  12183.  
  12184.     template <typename C>
  12185.     struct one_impl<C, when<
  12186.         hana::Constant<C>::value &&
  12187.         Ring<typename C::value_type>::value
  12188.     >> {
  12189.         static constexpr decltype(auto) apply()
  12190.         { return hana::to<C>(detail::constant_from_one<C>{}); }
  12191.     };
  12192. }}
  12193. # 20 "/us/include/boost_1_64_0/boost/hana/concept/ring.hpp" 2
  12194.  
  12195.  
  12196.  
  12197. namespace boost { namespace hana {
  12198.     template <typename R>
  12199.     struct Ring
  12200.         : hana::integral_constant<bool,
  12201.             !is_default<one_impl<typename tag_of<R>::type>>::value &&
  12202.             !is_default<mult_impl<typename tag_of<R>::type,
  12203.                                   typename tag_of<R>::type>>::value
  12204.         >
  12205.     { };
  12206. }}
  12207. # 16 "/us/include/boost_1_64_0/boost/hana/mult.hpp" 2
  12208. # 27 "/us/include/boost_1_64_0/boost/hana/mult.hpp"
  12209. namespace boost { namespace hana {
  12210.  
  12211.     template <typename X, typename Y>
  12212.     constexpr decltype(auto) mult_t::operator()(X&& x, Y&& y) const {
  12213.         using T = typename hana::tag_of<X>::type;
  12214.         using U = typename hana::tag_of<Y>::type;
  12215.         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 >;
  12216.  
  12217.  
  12218.  
  12219.  
  12220.  
  12221.  
  12222.         static_assert(hana::Ring<T>::value,
  12223.         "hana::mult(x, y) requires 'x' to be in a Ring");
  12224.  
  12225.         static_assert(hana::Ring<U>::value,
  12226.         "hana::mult(x, y) requires 'y' to be in a Ring");
  12227.  
  12228.         static_assert(!is_default<mult_impl<T, U>>::value,
  12229.         "hana::mult(x, y) requires 'x' and 'y' to be embeddable "
  12230.         "in a common Ring");
  12231.  
  12232.  
  12233.         return Mult::apply(static_cast<X&&>(x), static_cast<Y&&>(y));
  12234.     }
  12235.  
  12236.  
  12237.     template <typename T, typename U, bool condition>
  12238.     struct mult_impl<T, U, when<condition>> : default_ {
  12239.         template <typename ...Args>
  12240.         static constexpr auto apply(Args&& ...) = delete;
  12241.     };
  12242.  
  12243.  
  12244.     template <typename T, typename U>
  12245.     struct mult_impl<T, U, when<
  12246.         detail::has_nontrivial_common_embedding<Ring, T, U>::value
  12247.     >> {
  12248.         using C = typename common<T, U>::type;
  12249.         template <typename X, typename Y>
  12250.         static constexpr decltype(auto) apply(X&& x, Y&& y) {
  12251.             return hana::mult(hana::to<C>(static_cast<X&&>(x)),
  12252.                               hana::to<C>(static_cast<Y&&>(y)));
  12253.         }
  12254.     };
  12255.  
  12256.  
  12257.  
  12258.  
  12259.     template <typename T>
  12260.     struct mult_impl<T, T, when<std::is_arithmetic<T>::value &&
  12261.                                 !std::is_same<bool, T>::value>> {
  12262.         template <typename X, typename Y>
  12263.         static constexpr decltype(auto) apply(X&& x, Y&& y)
  12264.         { return static_cast<X&&>(x) * static_cast<Y&&>(y); }
  12265.     };
  12266.  
  12267.  
  12268.  
  12269.  
  12270.     namespace detail {
  12271.         template <typename C, typename X, typename Y>
  12272.         struct constant_from_mult {
  12273.             static constexpr auto value = hana::mult(hana::value<X>(), hana::value<Y>());
  12274.             using hana_tag = detail::CanonicalConstant<typename C::value_type>;
  12275.         };
  12276.     }
  12277.  
  12278.     template <typename C>
  12279.     struct mult_impl<C, C, when<
  12280.         hana::Constant<C>::value &&
  12281.         Ring<typename C::value_type>::value
  12282.     >> {
  12283.         template <typename X, typename Y>
  12284.         static constexpr decltype(auto) apply(X const&, Y const&)
  12285.         { return hana::to<C>(detail::constant_from_mult<C, X, Y>{}); }
  12286.     };
  12287. }}
  12288. # 22 "test.cpp" 2
  12289.  
  12290. namespace hana = boost::hana;
  12291.  
  12292. template <typename T, typename = std::enable_if_t<
  12293.   !hana::Constant<T>::value
  12294. >>
  12295. constexpr T sqrt(T x) {
  12296.   T inf = 0, sup = (x == 1 ? 1 : x/2);
  12297.   while (!((sup - inf) <= 1 || ((sup*sup <= x) && ((sup+1)*(sup+1) > x)))) {
  12298.     T mid = (inf + sup) / 2;
  12299.     bool take_inf = mid*mid > x ? 1 : 0;
  12300.     inf = take_inf ? inf : mid;
  12301.     sup = take_inf ? mid : sup;
  12302.   }
  12303.  
  12304.   return sup*sup <= x ? sup : inf;
  12305. }
  12306.  
  12307. template <typename T, typename = std::enable_if_t<
  12308.   hana::Constant<T>::value
  12309. >>
  12310. constexpr auto sqrt(T const&) {
  12311.   return hana::integral_c<typename T::value_type, sqrt(T::value)>;
  12312. }
  12313.  
  12314. # 92 "test.cpp"
  12315. extern const int calculated_distance;
  12316.  
  12317. namespace hana = boost::hana;
  12318. using namespace hana::literals;
  12319.  
  12320. // Most be in header
  12321. extern const int calculated_distance;
  12322.  
  12323. template <typename X, typename Y>
  12324. struct _point {
  12325.   X x;
  12326.   Y y;
  12327. };
  12328. template <typename X, typename Y>
  12329. constexpr _point<X, Y> point(X x, Y y) { return {x, y}; }
  12330.  
  12331. template <typename P1, typename P2>
  12332. constexpr auto distance(P1 p1, P2 p2) {
  12333.   auto xs = p1.x - p2.x;
  12334.   auto ys = p1.y - p2.y;
  12335.   return sqrt(xs*xs + ys*ys);
  12336. }
  12337.  
  12338. // This goes into .cc
  12339. 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