OpenCores
URL https://opencores.org/ocsvn/altor32/altor32/trunk

Subversion Repositories altor32

[/] [altor32/] [trunk/] [gcc-x64/] [or1knd-elf/] [or1knd-elf/] [include/] [c++/] [4.8.0/] [debug/] [list] - Blame information for rev 35

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 35 ultra_embe
// Debugging list implementation -*- C++ -*-
2
 
3
// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
4
// 2012
5
// Free Software Foundation, Inc.
6
//
7
// This file is part of the GNU ISO C++ Library.  This library is free
8
// software; you can redistribute it and/or modify it under the
9
// terms of the GNU General Public License as published by the
10
// Free Software Foundation; either version 3, or (at your option)
11
// any later version.
12
 
13
// This library is distributed in the hope that it will be useful,
14
// but WITHOUT ANY WARRANTY; without even the implied warranty of
15
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
// GNU General Public License for more details.
17
 
18
// Under Section 7 of GPL version 3, you are granted additional
19
// permissions described in the GCC Runtime Library Exception, version
20
// 3.1, as published by the Free Software Foundation.
21
 
22
// You should have received a copy of the GNU General Public License and
23
// a copy of the GCC Runtime Library Exception along with this program;
24
// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
25
// .
26
 
27
/** @file debug/list
28
 *  This file is a GNU debug extension to the Standard C++ Library.
29
 */
30
 
31
#ifndef _GLIBCXX_DEBUG_LIST
32
#define _GLIBCXX_DEBUG_LIST 1
33
 
34
#include 
35
#include 
36
#include 
37
 
38
namespace std _GLIBCXX_VISIBILITY(default)
39
{
40
namespace __debug
41
{
42
  /// Class std::list with safety/checking/debug instrumentation.
43
  template >
44
    class list
45
    : public _GLIBCXX_STD_C::list<_Tp, _Allocator>,
46
      public __gnu_debug::_Safe_sequence >
47
    {
48
      typedef _GLIBCXX_STD_C::list<_Tp, _Allocator> _Base;
49
 
50
      typedef typename _Base::iterator       _Base_iterator;
51
      typedef typename _Base::const_iterator _Base_const_iterator;
52
      typedef __gnu_debug::_Equal_to<_Base_const_iterator> _Equal;
53
      typedef __gnu_debug::_Not_equal_to<_Base_const_iterator> _Not_equal;
54
    public:
55
      typedef typename _Base::reference             reference;
56
      typedef typename _Base::const_reference       const_reference;
57
 
58
      typedef __gnu_debug::_Safe_iterator<_Base_iterator, list>
59
                                                    iterator;
60
      typedef __gnu_debug::_Safe_iterator<_Base_const_iterator, list>
61
                                                    const_iterator;
62
 
63
      typedef typename _Base::size_type             size_type;
64
      typedef typename _Base::difference_type       difference_type;
65
 
66
      typedef _Tp                                   value_type;
67
      typedef _Allocator                            allocator_type;
68
      typedef typename _Base::pointer               pointer;
69
      typedef typename _Base::const_pointer         const_pointer;
70
      typedef std::reverse_iterator       reverse_iterator;
71
      typedef std::reverse_iterator const_reverse_iterator;
72
 
73
      // 23.2.2.1 construct/copy/destroy:
74
      explicit
75
      list(const _Allocator& __a = _Allocator())
76
      : _Base(__a) { }
77
 
78
#if __cplusplus >= 201103L
79
      explicit
80
      list(size_type __n)
81
      : _Base(__n) { }
82
 
83
      list(size_type __n, const _Tp& __value,
84
           const _Allocator& __a = _Allocator())
85
      : _Base(__n, __value, __a) { }
86
#else
87
      explicit
88
      list(size_type __n, const _Tp& __value = _Tp(),
89
           const _Allocator& __a = _Allocator())
90
      : _Base(__n, __value, __a) { }
91
#endif
92
 
93
#if __cplusplus >= 201103L
94
      template
95
               typename = std::_RequireInputIter<_InputIterator>>
96
#else
97
      template
98
#endif
99
        list(_InputIterator __first, _InputIterator __last,
100
             const _Allocator& __a = _Allocator())
101
        : _Base(__gnu_debug::__base(__gnu_debug::__check_valid_range(__first,
102
                                                                     __last)),
103
                __gnu_debug::__base(__last), __a)
104
        { }
105
 
106
      list(const list& __x)
107
      : _Base(__x) { }
108
 
109
      list(const _Base& __x)
110
      : _Base(__x) { }
111
 
112
#if __cplusplus >= 201103L
113
      list(list&& __x) noexcept
114
      : _Base(std::move(__x))
115
      { this->_M_swap(__x); }
116
 
117
      list(initializer_list __l,
118
           const allocator_type& __a = allocator_type())
119
        : _Base(__l, __a) { }
120
#endif
121
 
122
      ~list() _GLIBCXX_NOEXCEPT { }
123
 
124
      list&
125
      operator=(const list& __x)
126
      {
127
        static_cast<_Base&>(*this) = __x;
128
        this->_M_invalidate_all();
129
        return *this;
130
      }
131
 
132
#if __cplusplus >= 201103L
133
      list&
134
      operator=(list&& __x)
135
      {
136
        // NB: DR 1204.
137
        // NB: DR 675.
138
        __glibcxx_check_self_move_assign(__x);
139
        clear();
140
        swap(__x);
141
        return *this;
142
      }
143
 
144
      list&
145
      operator=(initializer_list __l)
146
      {
147
        static_cast<_Base&>(*this) = __l;
148
        this->_M_invalidate_all();
149
        return *this;
150
      }
151
 
152
      void
153
      assign(initializer_list __l)
154
      {
155
        _Base::assign(__l);
156
        this->_M_invalidate_all();
157
      }
158
#endif
159
 
160
#if __cplusplus >= 201103L
161
      template
162
               typename = std::_RequireInputIter<_InputIterator>>
163
#else
164
      template
165
#endif
166
        void
167
        assign(_InputIterator __first, _InputIterator __last)
168
        {
169
          __glibcxx_check_valid_range(__first, __last);
170
          _Base::assign(__gnu_debug::__base(__first),
171
                        __gnu_debug::__base(__last));
172
          this->_M_invalidate_all();
173
        }
174
 
175
      void
176
      assign(size_type __n, const _Tp& __t)
177
      {
178
        _Base::assign(__n, __t);
179
        this->_M_invalidate_all();
180
      }
181
 
182
      using _Base::get_allocator;
183
 
184
      // iterators:
185
      iterator
186
      begin() _GLIBCXX_NOEXCEPT
187
      { return iterator(_Base::begin(), this); }
188
 
189
      const_iterator
190
      begin() const _GLIBCXX_NOEXCEPT
191
      { return const_iterator(_Base::begin(), this); }
192
 
193
      iterator
194
      end() _GLIBCXX_NOEXCEPT
195
      { return iterator(_Base::end(), this); }
196
 
197
      const_iterator
198
      end() const _GLIBCXX_NOEXCEPT
199
      { return const_iterator(_Base::end(), this); }
200
 
201
      reverse_iterator
202
      rbegin() _GLIBCXX_NOEXCEPT
203
      { return reverse_iterator(end()); }
204
 
205
      const_reverse_iterator
206
      rbegin() const _GLIBCXX_NOEXCEPT
207
      { return const_reverse_iterator(end()); }
208
 
209
      reverse_iterator
210
      rend() _GLIBCXX_NOEXCEPT
211
      { return reverse_iterator(begin()); }
212
 
213
      const_reverse_iterator
214
      rend() const _GLIBCXX_NOEXCEPT
215
      { return const_reverse_iterator(begin()); }
216
 
217
#if __cplusplus >= 201103L
218
      const_iterator
219
      cbegin() const noexcept
220
      { return const_iterator(_Base::begin(), this); }
221
 
222
      const_iterator
223
      cend() const noexcept
224
      { return const_iterator(_Base::end(), this); }
225
 
226
      const_reverse_iterator
227
      crbegin() const noexcept
228
      { return const_reverse_iterator(end()); }
229
 
230
      const_reverse_iterator
231
      crend() const noexcept
232
      { return const_reverse_iterator(begin()); }
233
#endif
234
 
235
      // 23.2.2.2 capacity:
236
      using _Base::empty;
237
      using _Base::size;
238
      using _Base::max_size;
239
 
240
#if __cplusplus >= 201103L
241
      void
242
      resize(size_type __sz)
243
      {
244
        this->_M_detach_singular();
245
 
246
        // if __sz < size(), invalidate all iterators in [begin+__sz, end())
247
        _Base_iterator __victim = _Base::begin();
248
        _Base_iterator __end = _Base::end();
249
        for (size_type __i = __sz; __victim != __end && __i > 0; --__i)
250
          ++__victim;
251
 
252
        for (; __victim != __end; ++__victim)
253
          {
254
            this->_M_invalidate_if(_Equal(__victim));
255
          }
256
 
257
        __try
258
          {
259
            _Base::resize(__sz);
260
          }
261
        __catch(...)
262
          {
263
            this->_M_revalidate_singular();
264
            __throw_exception_again;
265
          }
266
      }
267
 
268
      void
269
      resize(size_type __sz, const _Tp& __c)
270
      {
271
        this->_M_detach_singular();
272
 
273
        // if __sz < size(), invalidate all iterators in [begin+__sz, end())
274
        _Base_iterator __victim = _Base::begin();
275
        _Base_iterator __end = _Base::end();
276
        for (size_type __i = __sz; __victim != __end && __i > 0; --__i)
277
          ++__victim;
278
 
279
        for (; __victim != __end; ++__victim)
280
          {
281
            this->_M_invalidate_if(_Equal(__victim));
282
          }
283
 
284
        __try
285
          {
286
            _Base::resize(__sz, __c);
287
          }
288
        __catch(...)
289
          {
290
            this->_M_revalidate_singular();
291
            __throw_exception_again;
292
          }
293
      }
294
#else
295
      void
296
      resize(size_type __sz, _Tp __c = _Tp())
297
      {
298
        this->_M_detach_singular();
299
 
300
        // if __sz < size(), invalidate all iterators in [begin+__sz, end())
301
        _Base_iterator __victim = _Base::begin();
302
        _Base_iterator __end = _Base::end();
303
        for (size_type __i = __sz; __victim != __end && __i > 0; --__i)
304
          ++__victim;
305
 
306
        for (; __victim != __end; ++__victim)
307
          {
308
            this->_M_invalidate_if(_Equal(__victim));
309
          }
310
 
311
        __try
312
          {
313
            _Base::resize(__sz, __c);
314
          }
315
        __catch(...)
316
          {
317
            this->_M_revalidate_singular();
318
            __throw_exception_again;
319
          }
320
      }
321
#endif
322
 
323
      // element access:
324
      reference
325
      front()
326
      {
327
        __glibcxx_check_nonempty();
328
        return _Base::front();
329
      }
330
 
331
      const_reference
332
      front() const
333
      {
334
        __glibcxx_check_nonempty();
335
        return _Base::front();
336
      }
337
 
338
      reference
339
      back()
340
      {
341
        __glibcxx_check_nonempty();
342
        return _Base::back();
343
      }
344
 
345
      const_reference
346
      back() const
347
      {
348
        __glibcxx_check_nonempty();
349
        return _Base::back();
350
      }
351
 
352
      // 23.2.2.3 modifiers:
353
      using _Base::push_front;
354
 
355
#if __cplusplus >= 201103L
356
      using _Base::emplace_front;
357
#endif
358
 
359
      void
360
      pop_front()
361
      {
362
        __glibcxx_check_nonempty();
363
        this->_M_invalidate_if(_Equal(_Base::begin()));
364
        _Base::pop_front();
365
      }
366
 
367
      using _Base::push_back;
368
 
369
#if __cplusplus >= 201103L
370
      using _Base::emplace_back;
371
#endif
372
 
373
      void
374
      pop_back()
375
      {
376
        __glibcxx_check_nonempty();
377
        this->_M_invalidate_if(_Equal(--_Base::end()));
378
        _Base::pop_back();
379
      }
380
 
381
#if __cplusplus >= 201103L
382
      template
383
        iterator
384
        emplace(iterator __position, _Args&&... __args)
385
        {
386
          __glibcxx_check_insert(__position);
387
          return iterator(_Base::emplace(__position.base(),
388
                                        std::forward<_Args>(__args)...), this);
389
        }
390
#endif
391
 
392
      iterator
393
      insert(iterator __position, const _Tp& __x)
394
      {
395
        __glibcxx_check_insert(__position);
396
        return iterator(_Base::insert(__position.base(), __x), this);
397
      }
398
 
399
#if __cplusplus >= 201103L
400
      iterator
401
      insert(iterator __position, _Tp&& __x)
402
      { return emplace(__position, std::move(__x)); }
403
 
404
      void
405
      insert(iterator __p, initializer_list __l)
406
      {
407
        __glibcxx_check_insert(__p);
408
        _Base::insert(__p.base(), __l);
409
      }
410
#endif
411
 
412
      void
413
      insert(iterator __position, size_type __n, const _Tp& __x)
414
      {
415
        __glibcxx_check_insert(__position);
416
        _Base::insert(__position.base(), __n, __x);
417
      }
418
 
419
#if __cplusplus >= 201103L
420
      template
421
               typename = std::_RequireInputIter<_InputIterator>>
422
#else
423
      template
424
#endif
425
        void
426
        insert(iterator __position, _InputIterator __first,
427
               _InputIterator __last)
428
        {
429
          __glibcxx_check_insert_range(__position, __first, __last);
430
          _Base::insert(__position.base(), __gnu_debug::__base(__first),
431
                                           __gnu_debug::__base(__last));
432
        }
433
 
434
    private:
435
      _Base_iterator
436
      _M_erase(_Base_iterator __position)
437
      {
438
        this->_M_invalidate_if(_Equal(__position));
439
        return _Base::erase(__position);
440
      }
441
    public:
442
      iterator
443
      erase(iterator __position)
444
      {
445
        __glibcxx_check_erase(__position);
446
        return iterator(_M_erase(__position.base()), this);
447
      }
448
 
449
      iterator
450
      erase(iterator __position, iterator __last)
451
      {
452
        // _GLIBCXX_RESOLVE_LIB_DEFECTS
453
        // 151. can't currently clear() empty container
454
        __glibcxx_check_erase_range(__position, __last);
455
        for (_Base_iterator __victim = __position.base();
456
             __victim != __last.base(); ++__victim)
457
          {
458
            _GLIBCXX_DEBUG_VERIFY(__victim != _Base::end(),
459
                                  _M_message(__gnu_debug::__msg_valid_range)
460
                                  ._M_iterator(__position, "position")
461
                                  ._M_iterator(__last, "last"));
462
            this->_M_invalidate_if(_Equal(__victim));
463
          }
464
        return iterator(_Base::erase(__position.base(), __last.base()), this);
465
      }
466
 
467
      void
468
      swap(list& __x)
469
      {
470
        _Base::swap(__x);
471
        this->_M_swap(__x);
472
      }
473
 
474
      void
475
      clear() _GLIBCXX_NOEXCEPT
476
      {
477
        _Base::clear();
478
        this->_M_invalidate_all();
479
      }
480
 
481
      // 23.2.2.4 list operations:
482
      void
483
#if __cplusplus >= 201103L
484
      splice(iterator __position, list&& __x)
485
#else
486
      splice(iterator __position, list& __x)
487
#endif
488
      {
489
        _GLIBCXX_DEBUG_VERIFY(&__x != this,
490
                              _M_message(__gnu_debug::__msg_self_splice)
491
                              ._M_sequence(*this, "this"));
492
        this->_M_transfer_from_if(__x, _Not_equal(__x._M_base().end()));
493
        _Base::splice(__position.base(), _GLIBCXX_MOVE(__x._M_base()));
494
      }
495
 
496
#if __cplusplus >= 201103L
497
      void
498
      splice(iterator __position, list& __x)
499
      { splice(__position, std::move(__x)); }
500
#endif
501
 
502
      void
503
#if __cplusplus >= 201103L
504
      splice(iterator __position, list&& __x, iterator __i)
505
#else
506
      splice(iterator __position, list& __x, iterator __i)
507
#endif
508
      {
509
        __glibcxx_check_insert(__position);
510
 
511
        // We used to perform the splice_alloc check:  not anymore, redundant
512
        // after implementing the relevant bits of N1599.
513
 
514
        _GLIBCXX_DEBUG_VERIFY(__i._M_dereferenceable(),
515
                              _M_message(__gnu_debug::__msg_splice_bad)
516
                              ._M_iterator(__i, "__i"));
517
        _GLIBCXX_DEBUG_VERIFY(__i._M_attached_to(&__x),
518
                              _M_message(__gnu_debug::__msg_splice_other)
519
                             ._M_iterator(__i, "__i")._M_sequence(__x, "__x"));
520
 
521
        // _GLIBCXX_RESOLVE_LIB_DEFECTS
522
        // 250. splicing invalidates iterators
523
        this->_M_transfer_from_if(__x, _Equal(__i.base()));
524
        _Base::splice(__position.base(), _GLIBCXX_MOVE(__x._M_base()),
525
                      __i.base());
526
      }
527
 
528
#if __cplusplus >= 201103L
529
      void
530
      splice(iterator __position, list& __x, iterator __i)
531
      { splice(__position, std::move(__x), __i); }
532
#endif
533
 
534
      void
535
#if __cplusplus >= 201103L
536
      splice(iterator __position, list&& __x, iterator __first,
537
             iterator __last)
538
#else
539
      splice(iterator __position, list& __x, iterator __first,
540
             iterator __last)
541
#endif
542
      {
543
        __glibcxx_check_insert(__position);
544
        __glibcxx_check_valid_range(__first, __last);
545
        _GLIBCXX_DEBUG_VERIFY(__first._M_attached_to(&__x),
546
                              _M_message(__gnu_debug::__msg_splice_other)
547
                              ._M_sequence(__x, "x")
548
                              ._M_iterator(__first, "first"));
549
 
550
        // We used to perform the splice_alloc check:  not anymore, redundant
551
        // after implementing the relevant bits of N1599.
552
 
553
        for (_Base_iterator __tmp = __first.base();
554
             __tmp != __last.base(); ++__tmp)
555
          {
556
            _GLIBCXX_DEBUG_VERIFY(__tmp != _Base::end(),
557
                                  _M_message(__gnu_debug::__msg_valid_range)
558
                                  ._M_iterator(__first, "first")
559
                                  ._M_iterator(__last, "last"));
560
            _GLIBCXX_DEBUG_VERIFY(&__x != this || __tmp != __position,
561
                                _M_message(__gnu_debug::__msg_splice_overlap)
562
                                  ._M_iterator(__tmp, "position")
563
                                  ._M_iterator(__first, "first")
564
                                  ._M_iterator(__last, "last"));
565
            // _GLIBCXX_RESOLVE_LIB_DEFECTS
566
            // 250. splicing invalidates iterators
567
            this->_M_transfer_from_if(__x, _Equal(__tmp));
568
          }
569
 
570
        _Base::splice(__position.base(), _GLIBCXX_MOVE(__x._M_base()),
571
                      __first.base(), __last.base());
572
      }
573
 
574
#if __cplusplus >= 201103L
575
      void
576
      splice(iterator __position, list& __x, iterator __first, iterator __last)
577
      { splice(__position, std::move(__x), __first, __last); }
578
#endif
579
 
580
      void
581
      remove(const _Tp& __value)
582
      {
583
        for (_Base_iterator __x = _Base::begin(); __x != _Base::end(); )
584
          {
585
            if (*__x == __value)
586
              __x = _M_erase(__x);
587
            else
588
              ++__x;
589
          }
590
      }
591
 
592
      template
593
        void
594
        remove_if(_Predicate __pred)
595
        {
596
          for (_Base_iterator __x = _Base::begin(); __x != _Base::end(); )
597
            {
598
              if (__pred(*__x))
599
                __x = _M_erase(__x);
600
              else
601
                ++__x;
602
            }
603
        }
604
 
605
      void
606
      unique()
607
      {
608
        _Base_iterator __first = _Base::begin();
609
        _Base_iterator __last = _Base::end();
610
        if (__first == __last)
611
          return;
612
        _Base_iterator __next = __first; ++__next;
613
        while (__next != __last)
614
          {
615
            if (*__first == *__next)
616
              __next = _M_erase(__next);
617
            else
618
              __first = __next++;
619
          }
620
      }
621
 
622
      template
623
        void
624
        unique(_BinaryPredicate __binary_pred)
625
        {
626
          _Base_iterator __first = _Base::begin();
627
          _Base_iterator __last = _Base::end();
628
          if (__first == __last)
629
            return;
630
          _Base_iterator __next = __first; ++__next;
631
          while (__next != __last)
632
            {
633
              if (__binary_pred(*__first, *__next))
634
                __next = _M_erase(__next);
635
              else
636
                __first = __next++;
637
            }
638
        }
639
 
640
      void
641
#if __cplusplus >= 201103L
642
      merge(list&& __x)
643
#else
644
      merge(list& __x)
645
#endif
646
      {
647
        // _GLIBCXX_RESOLVE_LIB_DEFECTS
648
        // 300. list::merge() specification incomplete
649
        if (this != &__x)
650
          {
651
            __glibcxx_check_sorted(_Base::begin(), _Base::end());
652
            __glibcxx_check_sorted(__x.begin().base(), __x.end().base());
653
            this->_M_transfer_from_if(__x, _Not_equal(__x._M_base().end()));
654
            _Base::merge(_GLIBCXX_MOVE(__x._M_base()));
655
          }
656
      }
657
 
658
#if __cplusplus >= 201103L
659
      void
660
      merge(list& __x)
661
      { merge(std::move(__x)); }
662
#endif
663
 
664
      template
665
        void
666
#if __cplusplus >= 201103L
667
        merge(list&& __x, _Compare __comp)
668
#else
669
        merge(list& __x, _Compare __comp)
670
#endif
671
        {
672
          // _GLIBCXX_RESOLVE_LIB_DEFECTS
673
          // 300. list::merge() specification incomplete
674
          if (this != &__x)
675
            {
676
              __glibcxx_check_sorted_pred(_Base::begin(), _Base::end(),
677
                                          __comp);
678
              __glibcxx_check_sorted_pred(__x.begin().base(), __x.end().base(),
679
                                          __comp);
680
              this->_M_transfer_from_if(__x, _Not_equal(__x._M_base().end()));
681
              _Base::merge(_GLIBCXX_MOVE(__x._M_base()), __comp);
682
            }
683
        }
684
 
685
#if __cplusplus >= 201103L
686
      template
687
        void
688
        merge(list& __x, _Compare __comp)
689
        { merge(std::move(__x), __comp); }
690
#endif
691
 
692
      void
693
      sort() { _Base::sort(); }
694
 
695
      template
696
        void
697
        sort(_StrictWeakOrdering __pred) { _Base::sort(__pred); }
698
 
699
      using _Base::reverse;
700
 
701
      _Base&
702
      _M_base() _GLIBCXX_NOEXCEPT       { return *this; }
703
 
704
      const _Base&
705
      _M_base() const _GLIBCXX_NOEXCEPT { return *this; }
706
 
707
    private:
708
      void
709
      _M_invalidate_all()
710
      {
711
        this->_M_invalidate_if(_Not_equal(_Base::end()));
712
      }
713
    };
714
 
715
  template
716
    inline bool
717
    operator==(const list<_Tp, _Alloc>& __lhs,
718
               const list<_Tp, _Alloc>& __rhs)
719
    { return __lhs._M_base() == __rhs._M_base(); }
720
 
721
  template
722
    inline bool
723
    operator!=(const list<_Tp, _Alloc>& __lhs,
724
               const list<_Tp, _Alloc>& __rhs)
725
    { return __lhs._M_base() != __rhs._M_base(); }
726
 
727
  template
728
    inline bool
729
    operator<(const list<_Tp, _Alloc>& __lhs,
730
              const list<_Tp, _Alloc>& __rhs)
731
    { return __lhs._M_base() < __rhs._M_base(); }
732
 
733
  template
734
    inline bool
735
    operator<=(const list<_Tp, _Alloc>& __lhs,
736
               const list<_Tp, _Alloc>& __rhs)
737
    { return __lhs._M_base() <= __rhs._M_base(); }
738
 
739
  template
740
    inline bool
741
    operator>=(const list<_Tp, _Alloc>& __lhs,
742
               const list<_Tp, _Alloc>& __rhs)
743
    { return __lhs._M_base() >= __rhs._M_base(); }
744
 
745
  template
746
    inline bool
747
    operator>(const list<_Tp, _Alloc>& __lhs,
748
              const list<_Tp, _Alloc>& __rhs)
749
    { return __lhs._M_base() > __rhs._M_base(); }
750
 
751
  template
752
    inline void
753
    swap(list<_Tp, _Alloc>& __lhs, list<_Tp, _Alloc>& __rhs)
754
    { __lhs.swap(__rhs); }
755
 
756
} // namespace __debug
757
} // namespace std
758
 
759
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.