blob: 6c4be38d892d5d1a416cac0f655b0a673ebf2719 [file]
// { dg-do compile { target *-*-linux* } }
// { dg-options "-O3 -std=c++20 -ftrivial-auto-var-init=zero -march=x86-64-v3 -fPIC -w -mtls-dialect=gnu " }
template <int> using b = int;
template <typename, typename> struct e;
struct m {};
template <class> struct aa;
template <typename> struct j;
using h = aa<j<int>>;
template <typename> using a = h;
template <typename> using k = h;
template <typename d> struct p {
d ad;
};
struct ac {};
template <typename> struct al;
template <typename g> struct al<g *> {
typedef g &ah;
};
template <typename z> z ::i q(z);
struct w {
e<m, m> *l;
al<e<m, m> *>::ah operator*() { return *l; }
bool operator==(w) { return l; }
};
template <typename g, int o> struct n {
using af = g[o];
};
template <typename g, int o> struct ak {
n<g, o>::af am;
};
void ab();
template <typename ai> void ar(ai r, ac) {
ai ag;
for (; r != ag; ++r)
ab(), *r;
}
template <typename ai> void as(ai r, ac) { ar(r, q(r)); }
struct {
template <typename ai> void aj(ai r, ai) { as(r, q(r)); }
} ao;
namespace ap {
template <int at> struct bb {
static const bool ax = at;
};
} // namespace ap
using ap::bb;
namespace av {
template <class aq, aq> struct c;
template <bool au> struct c<bool, au> {
static const bool ax = au;
operator bb<au>() {
void *bc;
return *reinterpret_cast<bb<au> *>(bc);
}
};
template <class, class> struct ae : c<bool, false> {};
template <class aq> struct ae<aq, aq> : c<bool, true> {};
namespace aw {
using namespace ap;
}
} // namespace av
namespace ap {
template <int> struct bd {
typedef bd<1> bh;
};
} // namespace ap
namespace av {
namespace aw {
template <typename, typename = int> struct be;
template <int, typename, typename, typename, typename> struct bn : bb<true> {};
template <typename bg, typename bj, typename ay, typename az>
struct bn<false, bg, bj, ay, az> : bn<bg ::ax, bj, ay, az, bb<false>> {};
template <>
struct bn<false, bb<false>, bb<false>, bb<false>, bb<false>> : bb<false> {};
template <typename bg, typename bj = int, typename ay = bb<false>,
typename az = bb<false>, typename bl = bb<false>>
struct br : bn<bg ::ax, bj, ay, az, bl> {};
} // namespace aw
template <class aq> struct bi {
typedef aq h;
};
template <typename aq> bi<aq>::h bf();
template <class> struct ba : c<bool, false> {};
template <class aq> struct ba<aq const> : c<bool, true> {};
template <class aq> struct bk {
typedef aq const h;
};
template <class aq> struct bq {
typedef aq h;
};
template <class aq> struct bu {
typedef aq::h h;
};
template <class bo> struct by {
typedef bo ::ah h;
};
template <class aq> struct bm {
typedef aq h;
};
template <class aq> struct bm<aq const> {
typedef aq h;
};
namespace aw {
template <int, typename bg, typename> struct bp {
typedef bg h;
};
template <typename bg, typename bj> struct bp<false, bg, bj> {
typedef bj h;
};
template <typename bg, typename bj, typename ay = int> struct cg {
typedef bp<bg::ax, bj, ay>::h h;
};
template <typename C, typename bt, typename cd = int> struct bs {
typedef cg<C, bt, cd>::h ::h h;
};
template <int, typename, typename, typename, typename> struct bx;
template <typename bg, typename bj, typename ay, typename az>
struct bx<true, bg, bj, ay, az> : bx<bg ::ax, bj, ay, az, bb<true>> {};
template <>
struct bx<true, bb<true>, bb<true>, bb<true>, bb<true>> : bb<true> {};
template <typename bg, typename bj>
struct bw : bx<bg ::ax, bj, bb<true>, bb<true>, bb<true>> {};
} // namespace aw
template <typename bv, typename bz> struct cb {
template <typename cc> static void ca(cc);
template <typename ch, typename cc> static decltype(ca<cc>(bf<ch>())) cr(int);
template <typename, typename> static int cr(...);
static const bool ax = sizeof(cr<bv, bz>(0)) == 1;
};
template <typename bv, typename bz> struct cm {
static const bool ax = cb<bv, bz>::ax;
};
template <class bv, class bz> struct cl {
typedef cm<bv, bz> h;
};
template <typename bv, typename bz> struct ci {
typedef cl<bv, bz>::h h;
};
template <typename bv, typename bz> struct co : ci<bv, bz>::h {};
template <class bv, class bz> struct ce : c<bool, co<bv, bz>::ax> {};
namespace aw {
template <typename aq> struct cf {
typedef aq h;
};
} // namespace aw
template <int> struct arg {
template <typename ck, typename> struct apply {
typedef ck h;
};
};
template <> struct arg<2> {
template <typename, typename cu> struct apply {
typedef cu h;
};
};
struct cj {};
template <class cq> struct cx : aw::bs<ce<cq, cj>, aw::cf<cq>> {};
template <class bo> struct cw : cx<typename bo::i> {};
template <class ct, class cp, class dc>
struct cn : aw::bs<aw::bw<ce<ct, cj>, ce<dc, cp>>, aw::cf<ac>> {};
template <class aq> struct dd : aw::br<ce<aq, ac>, ce<aq, int>> {};
template <class cs, class ct> struct cz : cs, ct {};
template <class cp, class dc> struct da {
typedef cn<cj, cp, dc>::h category;
typedef aw::cg<ae<cj, int>, category, cz<category, cj>>::h h;
};
template <class cy, class cp, class dc>
struct s : aw::bs<dd<cy>, aw::cf<cy>, da<cp, dc>> {};
namespace aw {
template <typename df, typename bg> struct de : df::apply<bg> {};
template <typename df, typename bg, typename bj>
struct u : df::apply<bg, bj> {};
template <typename df, typename bg, typename bj>
struct db : df::apply<bg, bj> {};
template <typename aq> struct bh {
typedef aq::bh h;
};
template <typename, typename, typename, typename> struct cv;
template <int dk, typename ck, typename cu, typename dm>
struct cv<arg<dk>, ck, cu, dm> {
typedef db<arg<dk>, ck, cu>::h h;
};
template <typename df, typename bg> struct dh {
template <typename ck, typename cu = int> struct apply {
typedef de<df, typename cv<bg, ck, cu, int>::h>::h h;
};
};
template <typename df, typename bg, typename ck, typename cu, typename dm>
struct cv<dh<df, bg>, ck, cu, dm> {
typedef db<dh<df, bg>, ck, cu>::h h;
};
template <typename df, typename bg, typename bj> struct dg {
template <typename ck, typename cu> struct apply {
typedef u<df, typename cv<bg, ck, cu, int>::h,
typename cv<bj, ck, cu, int>::h>::h h;
};
};
template <typename aq> struct di {
typedef aq::h h;
};
template <template <typename> class df> struct dl {
template <typename ck> struct apply : di<df<ck>> {};
};
template <int dk, typename dn> struct be<arg<dk>, dn> {
typedef bb<true> dj;
typedef arg<dk> result_;
};
template <typename, template <typename> class, typename> struct x;
template <template <typename> class df, typename L1>
struct x<bb<true>, df, L1> {
typedef dh<dl<df>, typename L1::result_> h;
};
template <template <typename> class df, typename bg, typename dn>
struct be<df<bg>, dn> {
typedef be<bg> l1;
typedef x<typename l1::dj, df, l1>::h h;
};
template <typename df, typename bg, typename bj>
struct apply2 : u<df, bg, bj> {};
} // namespace aw
namespace iterators {
struct always_bool2 {
template <class, class> struct apply {
typedef bool h;
};
};
template <class cp, class cy, class dc> struct y {
typedef s<cy, cp, dc>::h i;
};
template <class, class, class, class, class, bool> class iterator_facade_base;
struct iterator_core_access {
template <class Facade> static Facade::ah dereference(Facade &r) {
return r.dereference();
}
template <class Facade> static void increment(Facade &r) { r.increment(); }
template <class Facade1, class Facade2>
static bool equal(Facade1 &r, Facade2 p2) {
return r.equal(p2);
}
};
template <class Derived, class Value, class cy, class dc, class Difference>
struct iterator_facade_base<Derived, Value, cy, dc, Difference, false> {
typedef dc ah;
typedef y<Value, cy, dc>::i i;
ah operator*() { return iterator_core_access::dereference(derived()); }
void operator++() { iterator_core_access::increment(derived()); }
Derived &derived() { return *static_cast<Derived *>(this); }
};
template <class Derived, class Value, class cy, class dc, class = long>
struct iterator_facade
: iterator_facade_base<Derived, Value, cy, dc, int, ce<cj, int>::ax> {};
template <class Derived1, class V1, class TC1, class Reference1,
class Difference1, class Derived2, class V2, class TC2,
class Reference2, class Difference2>
bq<typename aw::apply2<always_bool2, Derived1, Derived2>::h>::h
operator==(iterator_facade<Derived1, V1, TC1, Reference1, Difference1> const &r,
iterator_facade<Derived2, V2, TC2, Reference2, Difference2> p2) {
return iterator_core_access::equal(*static_cast<Derived1 const *>(&r),
*static_cast<Derived2 *>(&p2));
}
} // namespace iterators
using iterators::iterator_facade;
template <class aq, class DefaultNullaryFn>
struct ia_dflt_help : aw::bs<ae<aq, int>, DefaultNullaryFn, aw::cf<aq>> {};
template <class Derived, class Base, class dc> struct iterator_adaptor_base {
typedef iterator_facade<Derived, int, typename ia_dflt_help<int, cw<Base>>::h,
typename ia_dflt_help<dc, int>::h>
h;
};
template <class Derived, class Base, class, class, class dc, class = int>
struct iterator_adaptor : iterator_adaptor_base<Derived, Base, dc>::h {
Base an() const { return m_iterator; }
template <class OtherDerived, class OtherIterator, class V, class C, class R,
class D>
bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D>) const {
return m_iterator == an();
}
void increment() { ++m_iterator; }
Base m_iterator;
};
template <typename> struct result_of;
template <typename df, typename... Args> struct result_of<df(Args...)> {
typedef decltype(df()(bf<Args>()...)) h;
};
namespace iterators {
template <class> class transform_iterator;
template <class UnaryFunc, class bo> struct transform_iterator_base {
typedef iterator_adaptor<
transform_iterator<UnaryFunc>, bo, UnaryFunc, int,
typename ia_dflt_help<int, result_of<UnaryFunc(typename bo::ah)>>::h>
h;
};
template <typename> class zip_iterator;
template <class UnaryFunc>
struct transform_iterator
: transform_iterator_base<UnaryFunc, zip_iterator<int>>::h {
void dereference() { m_f(*this->an()); }
UnaryFunc m_f;
};
template <class UnaryFunc>
transform_iterator<UnaryFunc> make_transform_iterator(zip_iterator<int>,
UnaryFunc);
} // namespace iterators
namespace tuples {
template <class, class> struct cons;
template <class = int, class = int, class = int, class = int, class = int,
class = int, class = int, class = int, class = int, class = int>
class tuple;
template <class aq> struct access_traits {
typedef const aq &const_type;
typedef aq &non_const_type;
};
template <long, class HT, class TT>
access_traits<HT>::const_type get(cons<HT, TT>);
template <class aq> struct wrap_non_storeable_type {
typedef aq h;
};
template <class HT, class TT> struct cons {
typedef HT head_type;
typedef TT tail_type;
typedef wrap_non_storeable_type<head_type>::h stored_head_type;
stored_head_type head;
tail_type tail;
access_traits<stored_head_type>::non_const_type get_head() { return head; }
access_traits<tail_type>::non_const_type get_tail() { return tail; }
access_traits<stored_head_type>::const_type get_head() const { return head; }
access_traits<tail_type>::const_type get_tail() const { return tail; }
};
template <class T0, class bg, class, class, class, class, class, class, class,
class>
struct map_tuple_to_cons {
typedef cons<T0, typename map_tuple_to_cons<bg, int, int, int, int, int, int,
int, int, int>::h>
h;
};
template <>
struct map_tuple_to_cons<int, int, int, int, int, int, int, int, int, int> {
typedef int h;
};
template <class T0, class bg, class, class, class, class, class, class, class,
class>
struct tuple
: map_tuple_to_cons<T0, bg, int, int, int, int, int, int, int, int>::h {};
} // namespace tuples
using tuples::tuple;
} // namespace av
template <class R_> struct aa {
ak<typename R_::FT, 3> an;
};
template <typename K> struct Compare_xy_2 {
typedef K::Point_2 Point_2;
void operator()(Point_2, Point_2);
};
template <typename K_, typename FT_> struct Cartesian_base {
typedef FT_ FT;
typedef m Point_2;
typedef aa<K_> Line_2;
};
template <typename K_base> struct Type_equality_wrapper : K_base {};
template <typename FT_, typename Kernel_>
struct Cartesian_base_no_ref_count : Cartesian_base<Kernel_, FT_> {};
template <typename FT_>
struct j : Type_equality_wrapper<Cartesian_base_no_ref_count<FT_, j<FT_>>> {};
template <class C2E> struct Filtered_predicate {
C2E c2e;
Compare_xy_2<j<double>> ep;
template <typename... Args> void operator()(Args... r) { ep(c2e(r)...); }
};
struct Mpzf {
~Mpzf();
};
struct Cartesian_converter {
j<Mpzf>::Line_2 operator()(Type_equality_wrapper<j<double>>::Line_2);
};
namespace av {
namespace aw {
template <typename> struct begin_impl;
template <typename> struct end_impl;
template <typename> struct sequence_tag;
template <typename Sequence> struct begin {
typedef sequence_tag<Sequence>::h tag_;
typedef begin_impl<tag_>::template apply<Sequence>::h h;
};
template <typename Sequence> struct ab {
typedef sequence_tag<Sequence>::h tag_;
typedef end_impl<tag_>::template apply<Sequence>::h h;
};
const long ax = -1;
template <int, typename, typename, typename, typename> struct fold_impl;
template <typename First, typename Last, typename State, typename ForwardOp>
struct fold_impl<-1, First, Last, State, ForwardOp>
: fold_impl<-1, typename bh<First>::h, Last,
typename apply2<ForwardOp, State, typename First::h>::h,
ForwardOp> {};
template <typename Last, typename State, typename ForwardOp>
struct fold_impl<-1, Last, Last, State, ForwardOp> {
typedef State state;
};
template <typename Sequence, typename State, typename ForwardOp> struct fold {
typedef fold_impl<ax, typename begin<Sequence>::h, typename ab<Sequence>::h,
State, ForwardOp>::state h;
};
template <typename> struct push_back_impl;
template <typename Sequence = int, typename aq = int>
struct push_back
: push_back_impl<typename sequence_tag<Sequence>::h>::apply<Sequence, aq> {
};
struct has_push_back {
static const bool ax = sizeof(0);
};
template <> struct push_back<> {
template <typename bg, typename bj> struct apply : push_back<bg, bj> {};
};
template <typename Sequence, typename Operation> struct inserter {
typedef Sequence state;
typedef Operation operation;
};
template <typename Sequence>
struct back_inserter : inserter<Sequence, push_back<>> {};
template <typename> struct clear_impl;
template <typename Sequence>
struct clear : clear_impl<typename sequence_tag<Sequence>::h>::apply<Sequence> {
};
template <typename Seq, typename Op, typename In>
struct transform1_impl
: fold<Seq, typename In::state,
dg<typename In::operation, arg<1>, dh<typename be<Op>::h, arg<2>>>> {
};
template <typename P1>
struct transform1
: cg<has_push_back,
transform1_impl<P1, by<arg<1>>,
back_inserter<typename clear<P1>::h>>>::h {};
template <typename Seq1> struct transform {
typedef bs<br<bb<true>>, transform1<Seq1>>::h h;
};
} // namespace aw
} // namespace av
template <typename, typename, typename> struct Type_mapper_impl;
template <typename K1, typename K2>
struct Type_mapper_impl<typename K1::Line_2, K1, K2> {
typedef K2::Line_2 h;
};
auto call_once___callable = [] {};
struct once_flag {
struct _Prepare_execution;
} __thread *__once_callable;
struct once_flag::_Prepare_execution {
template <typename _Callable> _Prepare_execution(_Callable) {
__once_callable = nullptr;
}
};
template <typename _Callable> void call_once(_Callable) {
once_flag::_Prepare_execution __exec(call_once___callable);
}
template <typename ET> auto approx(e<aa<j<int>>, ET> r) { return r.approx(); }
template <typename ET> ET exact(e<m, ET> r) { return r.exact(); }
once_flag once;
template <typename AT_, typename ET> struct Lazy_rep {
AT_ approx();
ET exact_unsafe();
ET exact() {
call_once(once);
return exact_unsafe();
}
};
struct Exact_converter {
template <typename aq> auto operator()(aq r) { return exact(r); }
};
template <typename AT_, typename ET_> struct e {
typedef Lazy_rep<AT_, ET_> Self_rep;
e(Self_rep *);
auto approx() { return ptr()->approx(); }
ET_ exact() { return ptr()->exact(); }
Self_rep *ptr();
};
template <typename LK> struct Lazy_construction {
auto operator()() {
return typename Type_mapper_impl<a<k<int>>, typename LK::Approximate_kernel,
LK>::h(0);
}
};
template <typename, typename>
using Epick_with_filtered_predicates = Type_equality_wrapper<j<double>>;
struct Epic_converter {
p<Epick_with_filtered_predicates<double, int>::Line_2>
operator()(j<int>::Line_2);
};
template <typename FP, typename EpicP> struct Static_filtered_predicate {
FP fp;
EpicP epicp;
template <typename A1> void operator()(A1 r) {
Epic_converter convert;
auto __trans_tmp_4 = approx(r), aa1 = convert(__trans_tmp_4);
epicp(aa1.ad);
}
template <typename A1, typename A2> void operator()(A1 r, A2 p2) {
fp(r, p2);
}
};
Static_filtered_predicate<Filtered_predicate<Exact_converter>, int>
compare_xy_2_object();
Static_filtered_predicate<int, Cartesian_converter> is_vertical_2_object();
struct Lazy_kernel_base {
typedef j<int> Approximate_kernel;
typedef e<Approximate_kernel::Line_2, int> Line_2;
};
template <typename, typename> using Epeck_lazy_base = Lazy_kernel_base;
template <typename FT, typename>
using Epeck_lazy_base_with_type_equality =
Type_equality_wrapper<Epeck_lazy_base<FT, class Epeck>>;
struct Epeck : Epeck_lazy_base_with_type_equality<double, Epeck> {};
struct Construct_x_monotone_curve_2 {
void operator()(e<m, m> r, e<m, m> p2) {
Lazy_construction<Epeck> __trans_tmp_9;
auto line = __trans_tmp_9();
compare_xy_2_object()(r, p2);
is_vertical_2_object()(line);
}
};
Construct_x_monotone_curve_2 construct_curve_2_object();
namespace av {
w last1;
typedef e<m, m> *iterator2_t;
struct join_iterator_union {
iterator2_t &it2() { return m_it2; }
e<m, m> &dereference(unsigned r) {
if (r)
return *m_it2;
return *m_it1;
}
w m_it1;
iterator2_t m_it2;
};
struct join_iterator : iterator_facade<join_iterator, int, int, e<m, m> &> {
w __trans_tmp_24;
void increment() {
if (m_section)
;
else if (__trans_tmp_24 == last1)
m_it.it2() = 0;
}
ah dereference() { return m_it.dereference(m_section); }
bool equal(join_iterator) const { return m_section; }
int m_section;
join_iterator_union m_it;
};
} // namespace av
template <typename InputIterator> void construct_polycurve(InputIterator r) {
InputIterator begin;
ao.aj(begin, r);
}
struct Polycurve_2 {
template <typename InputIterator>
Polycurve_2(InputIterator, InputIterator p2) {
construct_polycurve(p2);
}
};
struct Arr_polycurve_traits_2 {
struct Construct_curve_2 {
template <typename ForwardIterator>
void operator()(ForwardIterator r, ForwardIterator p2) {
Polycurve_2(r, p2);
}
};
};
namespace av {
namespace fusion {
namespace traits {
template <typename> struct tag_of;
template <class T0, class bg, class bj, class ay, class az, class bl, class T6,
class T7, class T8, class T9>
struct tag_of<tuple<T0, bg, bj, ay, az, bl, T6, T7, T8, T9>> {
typedef int h;
};
template <class Head, class Tail> struct tag_of<tuples::cons<Head, Tail>> {
typedef int h;
};
} // namespace traits
} // namespace fusion
namespace aw {
template <class T0, class bg, class bj, class ay, class az, class bl, class T6,
class T7, class T8, class T9>
struct sequence_tag<tuple<T0, bg, bj, ay, az, bl, T6, T7, T8, T9>> {
typedef int h;
};
template <class Head, class Tail>
struct sequence_tag<tuples::cons<Head, Tail>> {
typedef int h;
};
} // namespace aw
namespace fusion {
namespace detail {
template <typename Sequence> struct tag_of_impl {
typedef Sequence::fusion_tag h;
};
} // namespace detail
namespace traits {
template <typename Sequence> struct tag_of : detail::tag_of_impl<Sequence> {};
} // namespace traits
namespace detail {
template <typename aq> struct tag_of : traits::tag_of<typename bm<aq>::h> {};
} // namespace detail
struct iterator_facade_tag;
template <typename> struct next_impl {
template <typename bo> struct apply : bo::bh<bo> {};
};
namespace result_of {
template <typename bo>
struct bh : next_impl<typename bo::fusion_tag>::apply<bo> {};
} // namespace result_of
template <typename bo> result_of::bh<bo>::h bh(bo r) {
return result_of::bh<bo>::call(r);
}
template <typename> struct equal_to_impl {
template <typename I1, typename I2>
struct apply : ae<typename bk<I1>::h, typename bk<I2>::h> {};
};
template <> struct equal_to_impl<iterator_facade_tag> {
template <typename, typename, typename, typename> struct dispatch;
template <typename It1, typename It2, typename dn>
struct dispatch<It1, It2, dn, dn> : It1::equal_to<It1, It2> {};
template <typename It1, typename It2>
struct apply
: dispatch<It1, It2, typename It1::fusion_tag, typename It2::fusion_tag> {
};
};
namespace result_of {
template <typename I1, typename I2>
struct equal_to : equal_to_impl<typename I1::fusion_tag>::apply<I1, I2> {};
} // namespace result_of
struct iterator_facade {
typedef iterator_facade_tag fusion_tag;
};
template <typename Cons = int> struct boost_tuple_iterator : iterator_facade {
typedef Cons cons_type;
boost_tuple_iterator(Cons &r) : cons(r) {}
Cons &cons;
template <typename>
struct value_of : aw::cf<typename cons_type::head_type> {};
template <typename bo> struct deref {
typedef value_of<bo>::h element;
typedef aw::cg<
ba<cons_type>, typename tuples::access_traits<element>::const_type,
typename tuples::access_traits<element>::non_const_type>::h h;
static h call(bo r) { return r.cons.get_head(); }
};
template <typename bo> struct bh {
typedef cons_type::tail_type tail_type;
typedef boost_tuple_iterator<
typename aw::bs<ba<cons_type>, bk<tail_type>, aw::cf<tail_type>>::h>
h;
static h call(bo r) { return r.cons.get_tail(); }
};
template <typename, typename I2>
struct equal_to : ae<Cons, typename I2::cf> {};
};
struct boost_tuple_null_iterator : iterator_facade {
typedef int cf;
template <typename, typename> struct equal_to : aw::br<ae<int, int>> {};
};
template <> struct boost_tuple_iterator<> : boost_tuple_null_iterator {
template <typename Cons> boost_tuple_iterator(Cons);
};
template <> struct boost_tuple_iterator<int const> : boost_tuple_null_iterator {
template <typename Cons> boost_tuple_iterator(Cons) {}
};
template <> struct boost_tuple_iterator<tuple<>> : boost_tuple_null_iterator {};
template <typename> struct begin_impl {
template <typename Sequence> struct apply {
typedef boost_tuple_iterator<Sequence> h;
static h call(Sequence r) { return r; }
};
};
template <typename> struct end_impl {
template <typename Sequence> struct apply {
typedef boost_tuple_iterator<typename aw::cg<ba<Sequence>, int const>::h> h;
};
};
template <typename> struct value_of_impl {
template <typename bo> struct apply : bo::value_of<bo> {};
};
namespace result_of {
template <typename bo>
struct value_of : value_of_impl<typename bo::fusion_tag>::apply<bo> {};
} // namespace result_of
template <typename> struct deref_impl {
template <typename bo> struct apply : bo::deref<bo> {};
};
namespace result_of {
template <typename bo>
struct deref : deref_impl<typename bo::fusion_tag>::apply<bo> {};
} // namespace result_of
template <typename bo> result_of::deref<bo>::h deref(bo r) {
return result_of::deref<bo>::call(r);
}
template <typename bo> result_of::deref<bo>::h operator*(bo r) {
return deref(r);
}
namespace detail {
template <typename First, typename Last,
bool = result_of::equal_to<First, Last>::ax>
struct build_tuple_cons {
typedef int h;
static h call(First, Last) { return h(); }
};
template <typename First, typename Last>
struct build_tuple_cons<First, Last, false> {
typedef build_tuple_cons<typename result_of::bh<First>::h, Last>
next_build_tuple_cons;
typedef tuples::cons<typename result_of::value_of<First>::h,
typename next_build_tuple_cons::h>
h;
static h call(First r, Last p2) {
typename result_of::value_of<First>::h v = *r;
return h(v, next_build_tuple_cons::call(bh(r), p2));
}
};
} // namespace detail
namespace result_of {
template <typename Sequence>
struct begin
: begin_impl<typename detail::tag_of<Sequence>::h>::apply<Sequence> {};
template <typename Sequence>
struct ab : end_impl<typename detail::tag_of<Sequence>::h>::apply<Sequence> {};
} // namespace result_of
namespace traits {
struct is_view : bb<0> {};
} // namespace traits
} // namespace fusion
namespace aw {
template <typename bo> struct fusion_iterator {
typedef fusion::result_of::value_of<bo>::h h;
};
template <typename bo> struct bh<fusion_iterator<bo>> {
typedef fusion_iterator<typename fusion::result_of::bh<bo>::h> h;
};
template <> struct begin_impl<int> {
template <typename Sequence> struct apply {
typedef fusion_iterator<typename fusion::result_of::begin<Sequence>::h> h;
};
};
template <> struct end_impl<int> {
template <typename Sequence> struct apply {
typedef fusion_iterator<typename fusion::result_of::ab<Sequence>::h> h;
};
};
} // namespace aw
namespace fusion {
template <> struct next_impl<int> {
template <typename bo> struct apply {
typedef aw::cg<
result_of::equal_to<typename result_of::bh<typename bo::first_type>::h,
typename bo::last_type>,
typename bo::concat_type>::h h;
};
};
template <> struct value_of_impl<int> {
template <typename bo> struct apply {
typedef result_of::value_of<typename bo::first_type>::h h;
};
};
template <typename First, typename Last, typename Concat>
struct joint_view_iterator {
typedef First first_type;
typedef Last last_type;
typedef Concat concat_type;
typedef int fusion_tag;
};
struct joint_view_tag;
template <> struct begin_impl<joint_view_tag> {
template <typename Sequence> struct apply {
typedef Sequence::first_type first_type;
typedef Sequence::last_type last_type;
typedef Sequence::concat_type concat_type;
typedef aw::cg<result_of::equal_to<first_type, last_type>, concat_type,
joint_view_iterator<first_type, last_type, concat_type>>::h
h;
};
};
template <> struct end_impl<joint_view_tag> {
template <typename Sequence> struct apply {
typedef Sequence::concat_last_type h;
};
};
template <typename Sequence1, typename Sequence2> struct joint_view {
typedef joint_view_tag fusion_tag;
typedef result_of::begin<Sequence1>::h first_type;
typedef result_of::ab<Sequence1>::h last_type;
typedef result_of::begin<Sequence2>::h concat_type;
typedef result_of::ab<Sequence2>::h concat_last_type;
};
struct single_view_iterator_tag;
template <typename SingleView, typename Pos> struct single_view_iterator {
typedef single_view_iterator_tag fusion_tag;
typedef SingleView::value_type value_type;
typedef Pos position;
typedef SingleView single_view_type;
};
template <> struct next_impl<single_view_iterator_tag> {
template <typename bo> struct apply {
typedef single_view_iterator<typename bo::single_view_type,
typename aw::bh<typename bo::position>::h>
h;
};
};
template <> struct value_of_impl<single_view_iterator_tag> {
template <typename bo> struct apply {
typedef bo::value_type h;
};
};
struct single_view_tag;
template <> struct begin_impl<single_view_tag> {
template <typename Sequence> struct apply {
typedef single_view_iterator<Sequence, aw::bd<0>> h;
};
};
template <> struct end_impl<single_view_tag> {
template <typename Sequence> struct apply {
typedef single_view_iterator<Sequence, aw::bd<1>> h;
};
};
template <typename aq> struct single_view {
typedef single_view_tag fusion_tag;
typedef aq value_type;
};
namespace result_of {
template <typename Sequence, typename aq> struct push_back {
typedef joint_view<Sequence, single_view<aq>> h;
};
} // namespace result_of
template <typename Sequence>
bu<result_of::begin<Sequence>>::h begin(Sequence r) {
return result_of::begin<Sequence>::call(r);
}
template <typename Sequence> struct apply {
typedef detail::build_tuple_cons<typename result_of::begin<Sequence>::h,
typename result_of::ab<Sequence>::h>
build_tuple_cons;
typedef build_tuple_cons::h h;
static h call(Sequence r) {
typename result_of::begin<Sequence>::h __trans_tmp_6 = begin(r);
typename result_of::ab<Sequence>::h __trans_tmp_7(r);
return build_tuple_cons::call(__trans_tmp_6, __trans_tmp_7);
}
};
namespace detail {
template <typename First, typename Last, typename df>
void for_each_linear(First, Last, df, bb<true>) {}
template <typename First, typename Last, typename df>
void for_each_linear(First r, Last p2, df p3, bb<false>) {
p3(*r);
for_each_linear(
bh(r), p2, p3,
result_of::equal_to<typename result_of::bh<First>::h, Last>());
}
template <typename Sequence, typename df, typename dn>
void for_each_dispatch(Sequence &r, df p2, dn) {
typename result_of::begin<Sequence>::h __trans_tmp_2 = r;
typename result_of::ab<Sequence>::h __trans_tmp_3 = 0;
for_each_linear(__trans_tmp_2, __trans_tmp_3, p2,
result_of::equal_to<typename result_of::begin<Sequence>::h,
typename result_of::ab<Sequence>::h>());
}
template <typename Sequence, typename df> void for_each(Sequence &r, df p2) {
for_each_dispatch(r, p2, int());
}
} // namespace detail
template <typename df>
void for_each(tuple<join_iterator, join_iterator> &r, df p2) {
detail::for_each(r, p2);
}
struct transform_view_iterator_tag;
template <> struct deref_impl<transform_view_iterator_tag> {
template <typename bo> struct apply {
typedef result_of::deref<typename bo::first_type>::h value_type;
typedef bo::transform_type df;
typedef typename result_of<df(value_type)>::h h;
static h call(bo r) { return r.f(*r.ad); }
};
};
template <typename First, typename df> struct transform_view_iterator {
typedef transform_view_iterator_tag fusion_tag;
typedef First first_type;
typedef df transform_type;
first_type ad;
transform_type f;
};
template <> struct next_impl<transform_view_iterator_tag> {
template <typename bo> struct apply {
typedef transform_view_iterator<
typename result_of::bh<typename bo::first_type>::h,
typename bo::transform_type>
h;
static h call(bo r) { return h(bh(r.ad)); }
};
};
template <> struct value_of_impl<transform_view_iterator_tag> {
template <typename bo> struct apply {
typedef av::result_of<typename bo::transform_type(
typename result_of::value_of<typename bo::first_type>::h)>::h h;
};
};
struct transform_view_tag;
template <> struct begin_impl<transform_view_tag> {
template <typename Sequence> struct apply {
typedef transform_view_iterator<typename Sequence::first_type,
typename Sequence::transform_type>
h;
static h call(Sequence r) { return h(r.ad()); }
};
};
template <> struct end_impl<transform_view_tag> {
template <typename Sequence> struct apply {
typedef transform_view_iterator<typename Sequence::last_type,
typename Sequence::transform_type>
h;
};
};
} // namespace fusion
namespace aw {
template <> struct clear_impl<int> {
template <typename> struct apply {
typedef tuple<> h;
};
};
} // namespace aw
namespace fusion {
namespace result_of {
template <typename Sequence> struct convert {
typedef apply<Sequence> gen;
typedef gen::h h;
};
} // namespace result_of
template <typename, typename Sequence>
result_of::convert<Sequence>::h convert(Sequence r) {
typedef typename result_of::convert<Sequence>::gen gen;
return gen::call(r);
}
} // namespace fusion
namespace aw {
template <> struct push_back_impl<int> {
template <typename Sequence, typename aq> struct apply {
typedef fusion::result_of::convert<
typename fusion::result_of::push_back<Sequence, aq>::h>::h h;
};
};
} // namespace aw
namespace fusion {
template <typename, typename df> struct transform_view {
typedef transform_view_tag fusion_tag;
typedef result_of::begin<const tuple<join_iterator, join_iterator>>::h
first_type;
typedef result_of::ab<const tuple<>>::h last_type;
typedef df transform_type;
first_type ad() { return seq; }
aw::cg<traits::is_view, int, const tuple<join_iterator, join_iterator> &>::h
seq;
};
namespace result_of {
template <typename, typename df> struct transform {
typedef transform_view<const tuple<join_iterator, join_iterator>, df> h;
};
} // namespace result_of
template <typename df>
result_of::transform<int, df>::h
transform(const tuple<join_iterator, join_iterator> &r, df) {
return transform_view<const tuple<join_iterator, join_iterator>, df>(r);
}
namespace detail {
struct sequence_equal_to {
template <typename I1, typename I2> static bool call(I1, I2, bb<true>);
template <typename I1, typename I2> static bool call(I1 r, I2 p2, bb<false>) {
return *r == *p2 && call(bh(r), bh(p2));
}
template <typename I1, typename I2> static bool call(I1 r, I2 p2) {
result_of::equal_to<I1, result_of::ab<tuple<>>::h> eq;
return call(r, p2, eq);
}
};
} // namespace detail
template <typename Seq2>
bool equal_to(const tuple<join_iterator, join_iterator> &r, Seq2 p2) {
boost_tuple_iterator __trans_tmp_27 = r;
return detail::sequence_equal_to::call(__trans_tmp_27, begin(p2));
}
} // namespace fusion
namespace iterators {
struct increment_iterator {
template <typename bo> void operator()(bo &r) { ++r; }
};
struct dereference_iterator {
template <typename> struct result;
template <typename This, typename bo> struct result<This(bo)> {
typedef by<bo>::h h;
};
template <typename bo> result<dereference_iterator(bo)>::h operator()(bo r) {
return *r;
}
};
struct minimum_traversal_category_in_iterator_tuple;
typedef aw::transform<tuple<join_iterator, join_iterator>>::h ah;
static ah call(fusion::transform_view<const tuple<join_iterator, join_iterator>,
dereference_iterator>
r) {
return convert < ah >> (r);
}
template <typename>
struct zip_iterator
: iterator_facade<zip_iterator<int>, ah,
minimum_traversal_category_in_iterator_tuple, ah> {
const tuple<join_iterator, join_iterator> &get_iterator_tuple() const {
return m_iterator_tuple;
}
ah dereference() {
const tuple<join_iterator, join_iterator> &__trans_tmp_21 =
get_iterator_tuple();
fusion::transform_view __trans_tmp_26 =
fusion::transform(__trans_tmp_21, dereference_iterator());
return call(__trans_tmp_26);
}
template <typename OtherIteratorTuple> bool equal(OtherIteratorTuple) const {
const tuple<join_iterator, join_iterator> &__trans_tmp_24 =
get_iterator_tuple();
tuple<join_iterator, join_iterator> __trans_tmp_25;
return fusion::equal_to(__trans_tmp_24, __trans_tmp_25);
}
void increment() { fusion::for_each(m_iterator_tuple, increment_iterator()); }
tuple<join_iterator, join_iterator> m_iterator_tuple;
};
} // namespace iterators
using iterators::zip_iterator;
} // namespace av
struct Construct_curve_2 {
template <typename ForwardIterator>
void operator()(ForwardIterator r, ForwardIterator p2) const {
constructor_impl(r, p2, int());
}
void operator()(int) {
av::join_iterator __trans_tmp_11, __trans_tmp_18;
operator()(__trans_tmp_18, __trans_tmp_11);
}
template <typename ForwardIterator>
void constructor_impl(ForwardIterator r, ForwardIterator p2, b<false>) const {
Arr_polycurve_traits_2::Construct_curve_2()(r, p2);
}
void constructor_impl(av::join_iterator, av::join_iterator, b<true>) const {
auto point_pair_to_segment = [](av::zip_iterator<av::tuple<>>::ah t) {
construct_curve_2_object()(0, get<1>(t));
};
av::zip_iterator<int> __trans_tmp_20, __trans_tmp_22;
operator()(make_transform_iterator(__trans_tmp_22, point_pair_to_segment),
make_transform_iterator(__trans_tmp_20, point_pair_to_segment));
}
};
int __trans_tmp_33___trans_tmp_16;
int
__trans_tmp_33()
{
Construct_curve_2 __trans_tmp_10;
__trans_tmp_10(__trans_tmp_33___trans_tmp_16);
}
// { dg-final { scan-assembler-times "call\[ \t\]__tls_get_addr@PLT" 1 { target { ! ia32 } } } }