This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Internal compiler error 390


Compiler: egcs1.1b (egcs-2.91.57)
Libraries: libstdc++-2.9.0, glibc-2.0.7

Command: 
g++ -o itertest itertest.C

Compiler Output:
/usr/include/g++/stl_algo.h: In function `class member_iterator<X
*,int,1> __lower_bound<member_iterator<X *,int,1>, int, ptrdiff_t>(class
member_iterator<X *,int,1>, class member_iterator<X *,int,1>, const int
&, ptrdiff_t *, struct random_access_iterator_tag)':
/usr/include/g++/stl_algo.h:1455:   instantiated from here
/usr/include/g++/stl_algo.h:1434: Internal compiler error 390.
/usr/include/g++/stl_algo.h:1434: Please submit a full bug report to
`egcs-bugs@cygnus.com'.

Hardward Inventory:
Main memory size: 47.9375 Mbytes
1 CyrixInstead 586 processor
2 16550A serial ports
1 post-1991 82077 floppy controller
1 1.44M floppy drive
1 vga+ graphics device
5 IDE devices
  hda: QUANTUM FIREBALL_TM1280A
  hdb: WEARNES CDD-820
  hdc: LS-120 COSM 02 UHD Floppy
  hdd: FUJITSU MPB3043ATU
  hdc: 123264kB
total.
PCI bus devices:
    Multimedia video controller: 3Dfx Voodoo (rev 2).
    VGA compatible controller: S3 Inc. ViRGE (rev 6).
    Bridge: Intel 82371AB PIIX4 ACPI (rev 1).
    USB Controller: Intel 82371AB PIIX4 USB (rev 1).
    IDE interface: Intel 82371AB PIIX4 IDE (rev 1).
    ISA bridge: Intel 82371AB PIIX4 ISA (rev 1).
    Host bridge: Intel 82439TX (rev 1).

Source:
#include <vector>
#include <iostream>
#include <algorithm>

struct X {
  int key;
  float value;
  X(int k,float v) : key(k), value(v) { }
};

template <class I,class MT,MT iterator_traits<I>::value_type::*M>
class member_iterator {
  public:
    typedef member_iterator<I,MT,M> Self;
    typedef iterator_traits<I>::iterator_category iterator_category;
    typedef MT value_type;
    typedef iterator_traits<I>::difference_type difference_type;
    typedef MT *pointer;
    typedef MT &reference;

  private:
    I _iter;
  public:
    member_iterator(const I &iter) : _iter(iter) { }
    member_iterator(const Self &other) : _iter(other._iter) { }
    MT &operator *() const { return (*_iter).*M; }
    Self &operator++() { ++_iter; return *this; }
    bool operator==(const Self &other) const { return
_iter==other._iter; }
    difference_type operator-(const Self &other) { return
_iter-other._iter; }
};

ostream &operator <<(ostream &os,const X &x)
{
  return (os << x.key);
}

int main(int argc,char **argv)
{
  vector<X> vect;
  vect.push_back(X(10,1));
  vect.push_back(X(20,2));
  vect.push_back(X(30,3));
  vect.push_back(X(40,4));
  vect.push_back(X(50,5));

  int new_value = 25;

  typedef member_iterator<vector<X>::iterator,int,&X::key> KeyIter;

  KeyIter pos =
    lower_bound(KeyIter(vect.begin()),KeyIter(vect.end()),new_value);

 
copy(KeyIter(vect.begin()),KeyIter(vect.end()),ostream_iterator<int>(cout,"
"));
  cout << endl;
}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]