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();
>}

Reply via email to