Running on a SuSe 9.1 pro x86_64 machine. Reading specs from /usr/lib64/gcc/x86_64-suse-linux/3.4.3/specs Configured with: ./configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --enable-languages=c,c++,--disable-checking --libdir=/usr/lib64 --enable-libgcj --with-gxx-include-dir=/usr/include/g++ --with-slibdir=/lib64 --with-system-zlib --enable-shared --enable-__cxa_atexit x86_64-suse-linux : (reconfigured) ./configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --infodir=/usr/share/info --mandir=/usr/share/man --enable-languages=c,c++ --disable-checking --libdir=/usr/lib64 --with-gxx-include-dir=/usr/include/g++ --with-slibdir=/lib64 --with-system-zlib --enable-shared --enable-__cxa_atexit x86_64-suse-linux Thread model: posix gcc version 3.4.3
I dont know if this really is a bug, but i thought you might want to know I made a class that acts like a buffer, or actually is one. It has a get() function that increments a pointer to the current item, making it point to the next item in the buffer. When i do "cout << bufferclass.get() << bufferclass.get() << endl", it wont print it in the right order! (from left to right). For instance, i put 2 char's in it ('a', 'b'). Next i do the cout << bufferclass.get() << bufferclass.get() << endl", and it will print "ba". When i do it in 2 steps, it will print it correct, so its not that my buffer is screwed. Here is the code for the main: int main() { Chunk<char> bla(128); bla.add('a'); bla.add('b'); cout << bla.get() << bla.get() << endl; // Here is the error return 0; } The output: [EMAIL PROTECTED]:~/Documents> ./bla ba Here is the Chunk class. As you can see i also put in a operator[], and it does work. So bla[0] will return 'a' and bla[1] will return 'b'. #include <cstdlib> #include <memory> template<class T> class Chunk { public: Chunk() { data = current = avail = limit = 0; } ~Chunk(); explicit Chunk(const std::size_t&); bool add(const T&); T get(); T& operator[](const std::size_t& i) { return data[i]; } private: void alloc(const std::size_t&); void dealloc(); std::allocator<T> mem; T* data; T* current; T* avail; T* limit; }; template<class T> Chunk<T>::~Chunk() { dealloc(); } template<class T> Chunk<T>::Chunk(const std::size_t& s) { alloc(s); } template<class T> void Chunk<T>::alloc(const std::size_t& s) { data = mem.allocate(s); current = avail = data; limit = data + s; }; template<class T> void Chunk<T>::dealloc() { if (data) { T* iter = avail; while (iter != avail) { mem.destroy(--iter); } mem.deallocate(data, limit - data); } data = current = avail = limit = 0; } template<class T> bool Chunk<T>::add(const T& t) { if (avail == limit) return false; mem.construct(avail++, t); return true; } template<class T> T Chunk<T>::get() { T ret = *current; current++; return ret; } -- Summary: cout operator<< not in right order Product: gcc Version: 3.4.3 Status: UNCONFIRMED Severity: minor Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: truegrit at gmail dot com CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18534