3 template <typename C> struct A
5 typedef typename C::iterator type;
7 template <typename T2> struct B
11 template <typename F2> struct L
13 typedef typename B<F2>::type::type type;
15 template <typename C> struct M
17 typedef typename L<A<C> >::type type;
24 template <class IteratorT> class D
27 typedef IteratorT iterator;
28 template <class Iterator> D (Iterator p1, Iterator) : m_Begin (p1), m_End (0)
34 template <class IteratorT> class I : public D<IteratorT>
37 template <class Iterator>
38 I (Iterator p1, Iterator p2)
39 : D<IteratorT> (p1, p2)
59 return m_buffer.m_fn1 ();
63 struct any_incrementable_iterator_interface
65 virtual ~any_incrementable_iterator_interface () {}
67 class J : public any_incrementable_iterator_interface
73 void *operator new(__SIZE_TYPE__, void *p2) { return p2; }
74 template <class T> typename M<T>::type begin (T) { return 0; }
75 template <class T> typename M<T>::type end (T) {}
76 template <class> class any_iterator
79 template <class WrappedIterator> any_iterator (WrappedIterator)
81 void *ptr = m_buffer.m_fn2 (0);
82 m_impl = new (ptr) J (0);
87 m_impl->~any_incrementable_iterator_interface ();
90 any_incrementable_iterator_interface *m_impl;
92 template <class Reference> class K : public I<any_iterator<Reference> >
95 template <class WrappedRange>
97 : I<any_iterator<Reference> > (begin (p1), end (p1))
101 template <class Reference> struct H
103 typedef K<Reference> type;
105 template <class, class, class, class, class, class TargetReference>
110 H<int>::type source_data (test_data);
111 typename H<TargetReference>::type t2 = source_data;
117 mix_values_impl<int, int, int, int, int, int &> ();
122 mix_values_driver<int> ();