https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115767
mcccs at gmx dot com changed: What |Removed |Added ---------------------------------------------------------------------------- Attachment #61145|0 |1 is obsolete| | --- Comment #30 from mcccs at gmx dot com --- Comment on attachment 61145 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=61145 27k bytes reduced testcase >template <int a> struct b { > static const int c = a; >}; >struct e {}; >template <int> struct aa; >template <typename = e, typename = int> struct ab; >template <> struct aa<1> { > template <typename h, typename, typename, typename, typename> struct ac { > typedef h d; > }; >}; >template <> struct aa<2> { > template <typename, typename ad, typename, typename, typename> struct ac { > typedef ad d; > }; >}; >template <typename> struct ae {}; >template <typename> struct as; >template <typename g> struct ae<ae<g>> { > typedef g d; >}; >template <class g, g af> struct i { > static const int c = af; >}; >template <class, class> struct j : i<int, 0> {}; >template <class g> struct j<g, g> : i<int, 1> {}; >template <typename ag = e, typename g = e> >struct ah : ae<typename ag::ai>::template ac<ag, g> {}; >template <> struct ah<> { > template <typename aj, typename ak> struct ac : ah<aj, ak> {}; >}; >template <int, typename aj, typename> struct al { > typedef aj d; >}; >template <typename aj, typename ak> struct al<0, aj, ak> { > typedef ak d; >}; >template <typename aj, typename ak, typename am> struct an { > typedef typename al<aj::c, ak, am>::d d; >}; >template <int at> struct ao { > static const int c = at; > typedef ao<at + 1> ar; >}; >template <typename aw, int ax> struct au { > typedef __typeof__(aw::av(ao<ax>())) d; >}; >template <typename aw, int ax> struct bb : ae<typename au<aw, ax>::d> {}; >template <> struct as<int> { > template <typename aw, typename at> struct ac : bb<aw, at::c> {}; >}; >template <typename g> struct ar { > typedef typename g::ar d; >}; >template <typename g, typename bc> struct ay : bc { > typedef typename bc::az ba; > typedef typename ba::ar az; > typedef typename ar<typename bc::bg>::d bg; > static ae<g> av(ba); > using bc::av; >}; >template <> struct ae<int> { > template <typename aw, typename g> struct ac { > typedef ay<g, aw> d; > }; >}; >template <typename bd, typename aj, typename ak> >struct be : bd::template ac<aj, ak> {}; >template <typename bd, typename aj, typename am> >struct bf : bd::template ac<aj, int, am> {}; >template <typename bd, typename aj, typename ak> >struct bl : bd::template ac<aj, ak, int, int, int> {}; >template <typename bh, typename bi, typename k = e> struct bj { > typedef typename an<bh, bi, k>::d ::d d; >}; >template <int bh, typename bi, typename k> struct bk { > typedef typename al<bh, bi, k>::d ::d d; >}; >template <typename aw, long ax> struct bp { > typedef typename bb<aw, ax>::d d; >}; >template <typename aw, long ax> struct ar<bp<aw, ax>> { > typedef bp<aw, ax + 1> d; >}; >struct bm { > typedef int ai; > typedef ao<0> az; > typedef ao<0> bg; > void av(); >}; >template <typename aw> struct ac : aw::bg {}; >struct bn { > template <typename aw> struct ac { > typedef bp<aw, 0> d; > }; >}; >template <typename bo> struct bv : ay<bo, bm> {}; >template <typename bo, typename aj> struct bq : ay<aj, bv<bo>> {}; >template <typename bo, typename aj, typename ak> >struct br : ay<ak, bq<bo, aj>> {}; >template <typename bo, typename aj, typename ak, typename am> >struct bs : ay<am, br<bo, aj, ak>> {}; >template <typename = e, typename = e, typename = e, typename = e, typename = e> >struct bt; >template <> struct bt<> : bm {}; >template <typename bo> struct bt<bo> : bv<bo> {}; >template <typename bo, typename aj, typename ak, typename am> >struct bt<bo, aj, ak, am> : bs<bo, aj, ak, am> {}; >template <typename> struct allocator { > template <typename bu> allocator(bu) {} >}; >template <typename> struct cf; >template <typename bw> struct cf<allocator<bw>> { > using bx = bw *; > template <typename by> using bz = allocator<by>; > static bx allocate() { return (bx)__builtin_calloc(1, sizeof(bw)); } >}; >template <class g> struct ca { > typedef g &d; >}; >template <typename ag> struct begin { > typedef typename bn::ac<ag>::d d; >}; >template <typename ag, int at> >struct cb : as<typename ag::ai>::template ac<ag, ao<at>> {}; >template <typename g> struct cd : g {}; >template <typename, typename, typename, typename> struct ce; >template <int at, typename h, typename ad, typename cp> >struct ce<aa<at>, h, ad, cp> { > typedef typename bl<aa<at>, h, ad>::d d; >}; >struct l; >template <typename, typename, typename> struct cg { > template <typename, typename ad> struct ac { > typedef typename be<l, typename ce<aa<2>, int, ad, int>::d, > typename ce<aa<1>, int, ad, int>::d>::d d; > }; >}; >template <template <typename, typename, typename> class> struct ch; >struct m; >template <typename am> struct ci { > template <typename h, typename ad> struct ac { > typedef typename bf<ch<an>, m, typename ce<am, h, ad, int>::d>::d d; > }; >}; >template <typename bd, typename aj, typename ak, typename, typename, typename> >struct cj { > template <typename h, typename ad, typename, typename, typename> struct ac { > typedef typename bl<bd, typename ce<aj, h, ad, int>::d, > typename ce<ak, h, ad, int>::d>::d d; > }; >}; >template <typename bd, typename aj, typename ak, typename am, typename ap, > typename aq, typename h, typename ad, typename cp> >struct ce<cj<bd, aj, ak, am, ap, aq>, h, ad, cp> { > typedef typename bl<cj<bd, aj, ak, am, ap, aq>, h, ad>::d d; >}; >template <typename g> struct ck { > typedef typename g::d d; >}; >template <template <typename, typename, typename> class bd> struct ch { > template <typename h, typename, typename cl> > struct ac : ck<bd<h, int, cl>> {}; >}; >template <template <typename, typename, typename, typename, typename> class bd> >struct cw { > template <typename h, typename ad, typename, typename, typename> > struct ac : ck<bd<h, ad, int, int, int>> {}; >}; >template <typename g, typename> struct ab { > typedef g cm; > typedef g d; >}; >template <typename bd, typename aj, typename ak, typename cn> >struct ab<cg<bd, aj, ak>, cn> { > typedef cg<bd, aj, ak> d; >}; >template <typename co> struct da { > typedef cd<ci<typename co::cm>> d; >}; >template <template <typename, typename, typename> class bd, typename aj, > typename ak, typename am, typename cn> >struct ab<bd<aj, ak, am>, cn> { > typedef typename da<ab<am>>::d d; >}; >template <typename, > template <typename, typename, typename, typename, typename> class, > typename, typename, typename, typename, typename> >struct cq; >template <template <typename, typename, typename, typename, typename> class bd, > typename cr, typename cs, typename co, typename ct, typename cu> >struct cq<b<1>, bd, cr, cs, co, ct, cu> { > typedef cj<cw<bd>, typename cr::cm, typename cs::cm, typename co::cm, > typename ct::cm, typename cu::cm> > cm; >}; >template <template <typename, typename, typename, typename, typename> class bd, > typename aj, typename ak, typename am, typename ap, typename aq, > typename cn> >struct ab<bd<aj, ak, am, ap, aq>, cn> { > typedef typename cq<b<1>, bd, ab<aj>, ab<ak>, ab<>, ab<>, ab<>>::cm cm; >}; >template <typename bd, typename aj, typename ak> >struct cv : be<typename ab<bd>::d, aj, ak> {}; >template <typename ak> struct n { > typedef ak dl; >}; >template <typename g> struct cx { > typedef g d; >}; >template <typename ag> struct o { > typedef n<typename begin<ag>::d> d; >}; >template <typename ag> struct p { > typedef typename o<ag>::d ::dl d; >}; >template <int, typename, typename, typename> struct q; >template <typename cy, typename cz, typename s> struct q<4, cy, cz, s> { > typedef cy t; > typedef typename ar<t>::d v; > typedef typename ar<v>::d u; > typedef typename ar<u>::d x; > typedef typename cv< > s, > typename cv<s, > typename cv<s, typename cv<s, cz, typename t::d>::d, > typename v::d>::d, > typename u::d>::d, > typename x::d>::d db; >}; >template <typename ag, typename cz, typename s> struct dc { > typedef typename q<ac<ag>::c, typename begin<ag>::d, cz, s>::db d; >}; >struct y { > typedef bt<> db; > typedef ah<> dd; >}; >template <typename, typename, typename> struct w; >template <typename de, typename g> struct df { > typedef typename cf<de>::template bz<g> d; >}; >template <int, typename, typename, typename> struct dg; >template <typename cy, typename dh, typename s> struct dg<2, cy, dh, s> { > typedef cy t; > typedef typename cv<dh, typename cv<dh, int, typename ar<t>::d>::d, t>::d db; >}; >template <typename ag, typename dh> struct dj { > typedef typename dg<ac<ag>::c, typename begin<ag>::d, dh, int>::db d; >}; >template <typename dk, typename Final> struct dm { > dm() : member(static_cast<Final *>(this)->z()) {} > dk member; >}; >template <typename Value, typename de> struct index_node_base { > int space; > typedef Value cc; > typedef de allocator_type; > cc &c() { return *reinterpret_cast<cc *>(&space); } >}; >struct l { > template <typename IndexSpecifierIterator, typename> struct ac { > typedef typename IndexSpecifierIterator::d ::template node_class<int>::d d; > }; >}; >template <typename IndexSpecifierList> struct multi_index_node_type { > typedef typename dj<IndexSpecifierList, cg<int, int, int>>::d d; >}; >template <typename g> struct add_pointer { > typedef g *d; >}; >template <class TT> struct cons { > TT tail; >}; >template <typename Value, typename IndexSpecifierList, typename de> >struct index_base { > typedef typename multi_index_node_type<IndexSpecifierList>::d > final_node_type; > typedef w<Value, IndexSpecifierList, de> final_type; > typedef int ctor_args_list; > typedef typename df<de, int>::d final_allocator_type; > typedef bm index_type_list; > typedef Value cc; > index_base(ctor_args_list, de) {} > final_node_type *insert_(cc, final_node_type *&p2) { > return p2 = final().z(); > } > void replace_(cc p1, index_node_base<Value, de> *p2, int) { p2->c() = p1; } > final_type final() { return *static_cast<final_type *>(this); } > final_node_type *final_header() { return final().header(); } > final_node_type *final_insert_(cc p1) { return final().insert_(p1); } > void final_replace_rv_(cc p1, final_node_type *p2) { > final().replace_rv_(p1, p2); > } >}; >struct index_applier { > template <typename IndexSpecifierMeta, typename SuperMeta> struct ac { > typedef > typename IndexSpecifierMeta::d ::template index_class<SuperMeta>::d d; > }; >}; >template <int at, typename Value, typename IndexSpecifierList, typename de> >struct nth_layer { > typedef > typename bk<at == ao<2>::c, cx<index_base<Value, IndexSpecifierList, > de>>, > cv<index_applier, cb<IndexSpecifierList, at>, > nth_layer<at + 1, Value, IndexSpecifierList, de>>>::d d; >}; >template <class, class, class, bool> struct mutant_relation; >template <typename IndexSpecifierList, typename de> >struct multi_index_base_type > : nth_layer<0, mutant_relation<int, int, e, 1>, IndexSpecifierList, de> {}; >template <typename Value, typename IndexSpecifierList, typename de> >struct w > : dm<typename cf<typename df< > de, typename > multi_index_node_type<IndexSpecifierList>::d>::d>::bx, > w<Value, IndexSpecifierList, de>>, > multi_index_base_type<IndexSpecifierList, de>::d { > typedef typename multi_index_base_type<IndexSpecifierList, de>::d super; > typedef cf<typename df<de, typename super::index_node_type>::d> > node_alloc_traits; > typedef dm<typename node_alloc_traits::bx, w> bfm_header; > typedef typename super::final_node_type final_node_type; > w(typename super::final_allocator_type) > : super(typename super::ctor_args_list(), 0) {} > template <typename> struct index { > typedef typename p<typename super::index_type_list>::d ::d d; > }; > final_node_type *header() { return bfm_header::member; } > final_node_type *z() { return node_alloc_traits::allocate(); } > final_node_type *insert_(Value p1) { return super::insert_(p1, 0); } > void replace_rv_(Value p1, final_node_type *p2) { > super::replace_(p1, p2, 0); > } >}; >template <class, class Type> mutant_relation<int, int, e, 0> &mutate(Type &p1) >{ > return *reinterpret_cast<mutant_relation<int, int, e, 0> *>( > __builtin_addressof(p1)); >} >struct relation_info_hook { > int right; > relation_info_hook(int, int p2) : right(p2) {} >}; >template <class, class, class Info, bool> >struct mutant_relation : relation_info_hook { > typedef mutant_relation<int, int, Info, 0> above_view; > mutant_relation(int, int p2) : relation_info_hook(0, p2) {} > mutant_relation(const mutant_relation<int, int, Info, 0> &p1) > : relation_info_hook(p1) {} > above_view &get_view() { return mutate<above_view>(*this); } >}; >template <class TA, class TB, bool force_mutable> >mutant_relation<TA, TB, e, 0> >copy_with_right_replaced(mutant_relation<TA, TB, e, force_mutable>, int p2) { > return mutant_relation<TA, TB, e, 0>(0, p2); >} >struct m : i<int, 0> {}; >struct use_default; >template <class ValueParam> struct iterator_facade_types { > typedef typename bj<b<1>, add_pointer<ValueParam>>::d bx; >}; >template <class g, class Pointer> struct operator_arrow_dispatch { > static Pointer ac(g p1) { return __builtin_addressof(p1); } >}; >template <class, class, class, class, int> struct iterator_facade_base; >template <class Derived, class Value, class Reference, class Difference> >struct iterator_facade_base<Derived, Value, Reference, Difference, 0> { > typedef iterator_facade_types<Value> associated_types; > typedef Reference reference; > reference operator*() { return derived().dereference(); } > typename associated_types::bx operator->() { > return operator_arrow_dispatch< > Reference, typename associated_types::bx>::ac(*derived()); > } > Derived derived() { return *static_cast<Derived *>(this); } >}; >template <class Derived, class Value, class Reference> >struct iterator_facade > : iterator_facade_base<Derived, Value, Reference, int, i<int, 0>::c> {}; >template <class g, class DefaultNullaryFn> >struct ia_dflt_help : bj<j<g, use_default>, DefaultNullaryFn, cx<g>> {}; >template <class Derived, class Value, class Reference> >struct iterator_adaptor_base { > typedef iterator_facade< > Derived, typename ia_dflt_help<Value, int>::d, > typename ia_dflt_help<Reference, > bj<j<Value, use_default>, int, ca<Value>>>::d> > d; >}; >template <class Derived, class bc, class Value, class Reference = use_default> >struct Trans_NS_iterators_iterator_adaptor > : iterator_adaptor_base<Derived, Value, Reference>::d { > Trans_NS_iterators_iterator_adaptor(bc p1) : m_iterator(p1) {} > typedef bc base_type; > bc m_iterator; >}; >template <typename Node> struct bidir_node_iterator { > bidir_node_iterator(Node *p1) : node(p1) {} > typename Node::cc &operator*() { return node->c(); } > Node *node; >}; >template <typename> struct ordered_index_node_impl_; >struct null_augment_policy; >struct ordered_index_node_compressed_base { > typedef ordered_index_node_impl_<allocator<char>> *bx; > struct parent_ref { > parent_ref(long *p1) : r(p1) {} > operator bx() { return bx(*r); } > long *r; > }; > parent_ref parent() { return &parentcolor_; } > long parentcolor_; >}; >template <typename AugmentPolicy, typename> >struct ordered_index_node_impl_base > : AugmentPolicy::template augmented_node<int>::d {}; >template <typename de> >struct ordered_index_node_impl_ > : ordered_index_node_impl_base<null_augment_policy, de> { > typedef typename ordered_index_node_impl_base<null_augment_policy, de>::bx > bx; > static void link(bx p1, bx p2) { *p2->parent().r = (long)p1; } >}; >template <typename Super> >struct ordered_index_node_trampoline > : ordered_index_node_impl_< > typename df<typename Super::allocator_type, char>::d> { > typedef ordered_index_node_impl_<int> impl_type; >}; >template <typename Super> >struct ordered_index_node : Super, ordered_index_node_trampoline<Super> { > static ordered_index_node * > from_impl_(typename ordered_index_node_trampoline<Super>::bx p1) { > return static_cast<ordered_index_node *>(p1); > } >}; >template <typename SuperMeta> struct ordered_index_impl_ : SuperMeta::d { > typedef typename SuperMeta::d super; > typedef ordered_index_node<typename super::index_node_type> index_node_type; > typedef typename index_node_type::impl_type node_impl_type; > typedef typename index_node_type::cc cc; > typedef bidir_node_iterator<index_node_type> dn; > typedef typename super::final_node_type final_node_type; > typedef cons<typename super::ctor_args_list> ctor_args_list; > dn insert(cc p1) { return this->final_insert_(p1); } > void replace(dn p1, cc p2) { this->final_replace_rv_(p2, p1.node); } > template <typename CompatibleKey> dn find(CompatibleKey) { > return index_node_type::from_impl_(this->final_header()->parent()); > } > ordered_index_impl_(ctor_args_list p1, typename super::final_allocator_type) > : super(p1.tail, 0) {} > final_node_type *insert_(cc p1, final_node_type *p2) { > final_node_type *f = super::insert_(p1, p2); > node_impl_type::link(p2, this->final_header()); > return f; > } >}; >template <typename SuperMeta, typename AugmentPolicy> >struct ordered_index : AugmentPolicy::template augmented_interface< > ordered_index_impl_<SuperMeta>>::d { > typedef typename AugmentPolicy::template augmented_interface< > ordered_index_impl_<SuperMeta>>::d super; > ordered_index(typename super::ctor_args_list p1, > typename super::allocator_type) > : super(p1, 0) {} >}; >struct null_augment_policy { > template <typename OrderedIndexImpl_> struct augmented_interface { > typedef OrderedIndexImpl_ d; > }; > template <typename> struct augmented_node { > typedef ordered_index_node_compressed_base d; > }; >}; >struct ordered_unique { > template <typename> struct node_class { > typedef ordered_index_node< > index_node_base<mutant_relation<int, int, e, 1>, allocator<char>>> > d; > }; > template <typename SuperMeta> struct index_class { > typedef ordered_index<SuperMeta, null_augment_policy> d; > }; >}; >template <class BaseIterator, class di> struct iterator_from_base_identity { > di operator()(BaseIterator p1) { return p1; } >}; >template <typename Types_, typename Node_, typename Root_ = e> >struct inherit_linearly : dc<Types_, Root_, Node_> {}; >template <typename aj, typename ak> struct inherit2 : aj, ak { > typedef inherit2 d; >}; >template <typename aj, typename ak, typename = e, typename = e, typename = e> >struct inherit5 : inherit2<aj, ak> {}; >template <class Data, class FunctorList> >struct data_with_functor_bag > : inherit_linearly<FunctorList, an<m, int, inherit5<aa<1>, aa<2>>>>::d { > Data data; > data_with_functor_bag(Data p1) : data(p1) {} >}; >template <typename ag, typename Inserter> >struct copy_impl_ : dc<ag, typename Inserter::db, typename Inserter::dd> {}; >template <class bc, class di, class IteratorToBaseConverter> >struct Trans_NS_container_adaptor_container_adaptor { > typedef di dn; > typedef iterator_from_base_identity<dn, dn> iterator_from_base; > Trans_NS_container_adaptor_container_adaptor(bc &p1) : dwfb(p1) {} > typedef bc base_type; > template <class Functor> Functor functor() { return dwfb; } > data_with_functor_bag< > bc &, > typename copy_impl_<bt<typename an<b<0>, int, > IteratorToBaseConverter>::d, > iterator_from_base>, > y>::d> > dwfb; >}; >template <class bc, class di, class IteratorToBaseConverter> >struct associative_container_adaptor_base { > typedef Trans_NS_container_adaptor_container_adaptor<bc, di, > IteratorToBaseConverter> > d; >}; >template <class bc, class di, class IteratorToBaseConverter> >struct associative_container_adaptor > : associative_container_adaptor_base<bc, di, IteratorToBaseConverter>::d { > typedef typename associative_container_adaptor_base< > bc, di, IteratorToBaseConverter>::d base_; > associative_container_adaptor(bc &p1) : base_(p1) {} > auto find() { > return this->template functor<typename base_::iterator_from_base>()( > this->dwfb.data.find(0)); > } >}; >template <class bc, class di, class IteratorToBaseConverter> >struct ordered_associative_container_adaptor_base { > typedef associative_container_adaptor<bc, di, IteratorToBaseConverter> d; >}; >template <class bc, class di, class IteratorToBaseConverter> >struct ordered_associative_container_adaptor > : ordered_associative_container_adaptor_base<bc, di, > IteratorToBaseConverter>::d { > typedef typename ordered_associative_container_adaptor_base< > bc, di, IteratorToBaseConverter>::d base_; > ordered_associative_container_adaptor(bc &p1) : base_(p1) {} >}; >template <class bc, class IteratorToBaseConverter> >struct map_adaptor > : ordered_associative_container_adaptor<bc, int, IteratorToBaseConverter> { > map_adaptor(bc p1) > : ordered_associative_container_adaptor<bc, int, > IteratorToBaseConverter>( > p1) {} >}; >template <class di> struct iterator_facade_to_base { > typename di::base_type operator()(di p1) { return p1.m_iterator; } >}; >template <class BimapType> >struct map_view > : map_adaptor<typename BimapType::core_type::template index<int>::d, > iterator_facade_to_base< > Trans_NS_iterators_iterator_adaptor<int, int, int>>> { > typedef map_adaptor<typename BimapType::core_type::template index<int>::d, > iterator_facade_to_base< > Trans_NS_iterators_iterator_adaptor<int, int, int>>> > base_; > map_view(typename base_::base_type p1) : base_(p1) {} >}; >template <class bc, class di, class IteratorToBaseConverter> >struct set_adaptor > : ordered_associative_container_adaptor<bc, di, IteratorToBaseConverter> { > set_adaptor(bc &p1) > : ordered_associative_container_adaptor<bc, di, IteratorToBaseConverter>( > p1) {} >}; >struct set_view_iterator > : Trans_NS_iterators_iterator_adaptor< > set_view_iterator, > bidir_node_iterator<ordered_index_node<index_node_base< > mutant_relation<int, int, e, 1>, allocator<char>>>>, > mutant_relation<int, int, e, 0>> { > set_view_iterator( > bidir_node_iterator<ordered_index_node< > index_node_base<mutant_relation<int, int, e, 1>, allocator<char>>>> > p1) > : Trans_NS_iterators_iterator_adaptor(p1) {} > reference dereference() { return (&*m_iterator)->get_view(); } >}; >template <class CoreIndex> >struct set_view : set_adaptor<CoreIndex, set_view_iterator, > iterator_facade_to_base<set_view_iterator>> { > typedef set_adaptor<CoreIndex, set_view_iterator, > iterator_facade_to_base<set_view_iterator>> > base_; > set_view(typename base_::base_type &p1) : base_(p1) {} > void replace_right(set_view_iterator p1, int p2) { > this->dwfb.data.replace( > this->template functor<iterator_facade_to_base<set_view_iterator>>()( > p1), > copy_with_right_replaced(*p1, p2)); > } >}; >struct set_of { > template <class, class BimapType> struct map_view_bind { > typedef map_view<BimapType> d; > }; > template <class IndexType> struct set_view_bind { > typedef set_view<IndexType> d; > }; >}; >struct unordered_set_of; >template <class RightSetType, class> struct bimap_core { > typedef set_of left_set_type; > typedef RightSetType right_set_type; > typedef int left_tag; > typedef int right_tag; > typedef typename an<b<0>, int, > typename ah<bt<ordered_unique>, > typename right_set_type::template index_bind< > int, right_tag>::d>::d>::d > compl_ete_core_indices; > struct core_indices : compl_ete_core_indices {}; > typedef w<int, core_indices, allocator<char>> core_type; > typedef typename left_set_type::set_view_bind<core_type>::d relation_set; >}; >template <class BimapBaseType> struct left_map_view_type { > typedef typename BimapBaseType::left_set_type::template map_view_bind< > typename BimapBaseType::left_tag, BimapBaseType>::d d; >}; >template <class BimapBaseType> struct right_map_view_type { > typedef typename BimapBaseType::right_set_type::template map_view_bind< > typename BimapBaseType::right_tag, BimapBaseType>::d d; >}; >template <class AP1 = e> >struct bimap : bimap_core<unordered_set_of, AP1>::relation_set { > typedef bimap_core<unordered_set_of, AP1> base_; > typename base_::core_type core; > typename left_map_view_type<base_>::d left; > typename right_map_view_type<base_>::d right; > bimap() : base_::relation_set(core), core(0), left(core), right(core) {} >}; >template <typename SuperMeta> struct hashed_index : SuperMeta::d { > typedef typename SuperMeta::d super; > typedef index_node_base<mutant_relation<int, int, e, 1>, allocator<char>> > index_node_type; > typedef typename super::final_allocator_type allocator_type; > typedef cons<typename super::ctor_args_list> ctor_args_list; > typedef typename ah<typename super::index_type_list, hashed_index>::d > index_type_list; > hashed_index(ctor_args_list, allocator_type) : super(0, 0) {} >}; >struct hashed_unique { > template <typename> struct node_class { > typedef index_node_base<mutant_relation<int, int, int, 0>, int> d; > }; > template <typename SuperMeta> struct index_class { > typedef hashed_index<SuperMeta> d; > }; >}; >template <class bc, class IteratorToBaseConverter> >struct unordered_associative_container_adaptor_base { > typedef associative_container_adaptor<bc, int, IteratorToBaseConverter> d; >}; >template <class bc, class IteratorToBaseConverter> >struct unordered_associative_container_adaptor > : unordered_associative_container_adaptor_base<bc, > IteratorToBaseConverter>::d > { > typedef typename unordered_associative_container_adaptor_base< > bc, IteratorToBaseConverter>::d base_; > unordered_associative_container_adaptor(bc p1) : base_(p1) {} >}; >template <class bc, class IteratorToBaseConverter> >struct unordered_map_adaptor > : unordered_associative_container_adaptor<bc, IteratorToBaseConverter> { > unordered_map_adaptor(bc p1) > : unordered_associative_container_adaptor<bc, IteratorToBaseConverter>( > p1) {} >}; >template <class BimapType> >struct unordered_map_view > : unordered_map_adaptor< > typename BimapType::core_type::template index<int>::d, > iterator_facade_to_base< > Trans_NS_iterators_iterator_adaptor<int, int, int>>> { > typedef unordered_map_adaptor< > typename BimapType::core_type::template index<int>::d, > iterator_facade_to_base< > Trans_NS_iterators_iterator_adaptor<int, int, int>>> > base_; > unordered_map_view(typename base_::base_type p1) : base_(p1) {} >}; >struct unordered_set_of { > template <class, class> struct index_bind { > typedef hashed_unique d; > }; > template <class, class> struct map_view_bind { > typedef unordered_map_view<bimap_core<unordered_set_of, e>> d; > }; >}; >int main() { > bimap d; > d.replace_right(d.dwfb.data.insert({0, 0}), 42); > if (d.find()->right != 42) > __builtin_abort(); >}