[Bug libstdc++/43014] map [] behaviour is inconsistent

2010-02-10 Thread paolo dot carlini at oracle dot com
--- Comment #6 from paolo dot carlini at oracle dot com 2010-02-10 10:16 --- There are many details to this, but note that if you stay away from c_str(), and const char*, thus you consistently use C++ style strings, nothing unexpected happens, *ever*. --

[Bug libstdc++/43014] map [] behaviour is inconsistent

2010-02-10 Thread paolo dot carlini at oracle dot com
--- Comment #7 from paolo dot carlini at oracle dot com 2010-02-10 10:18 --- To be sure: is is fully clear to you that a mapconst char*, int stores a pair of *pointer to const char* and an int? It does *not* store a full string, it stores an *address* (and an int)! --

[Bug libstdc++/43014] map [] behaviour is inconsistent

2010-02-10 Thread gcc_bugzilla dot 20 dot marcelitom at inboxclean dot com
--- Comment #8 from gcc_bugzilla dot 20 dot marcelitom at inboxclean dot com 2010-02-10 21:23 --- Thanks Paolo. I did understand that map was passing a const char *. I wrongly assumed that it was using it to copy the pointed string to the map, but I learned from your first post that it

[Bug libstdc++/43014] map [] behaviour is inconsistent

2010-02-09 Thread pinskia at gcc dot gnu dot org
--- Comment #1 from pinskia at gcc dot gnu dot org 2010-02-09 22:48 --- I don't think this is a bug. sElement.c_str() returns a temporary storage which gets destroyed when sElement changes (via the operator= method). -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43014

[Bug libstdc++/43014] map [] behaviour is inconsistent

2010-02-09 Thread paolo dot carlini at oracle dot com
--- Comment #2 from paolo dot carlini at oracle dot com 2010-02-09 23:20 --- The surprising behavior is ultimately due to the fact that our string is reference counted, thus 'string aux = sElement' is a shallow copy, but then, when sElement = ab3 is performed a deep copy takes place

[Bug libstdc++/43014] map [] behaviour is inconsistent

2010-02-09 Thread paolo dot carlini at oracle dot com
--- Comment #3 from paolo dot carlini at oracle dot com 2010-02-09 23:40 --- Oops, read because in this case the address as THUS in this case the address, sorry. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43014

[Bug libstdc++/43014] map [] behaviour is inconsistent

2010-02-09 Thread paolo dot carlini at oracle dot com
--- Comment #4 from paolo dot carlini at oracle dot com 2010-02-09 23:51 --- Grr, I noticed another typo in my reply, I meant of course third find, not first find. Only the outcome of the third find was at issue, anyway. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43014

[Bug libstdc++/43014] map [] behaviour is inconsistent

2010-02-09 Thread gcc_bugzilla dot 20 dot marcelitom at inboxclean dot com
--- Comment #5 from gcc_bugzilla dot 20 dot marcelitom at inboxclean dot com 2010-02-10 04:00 --- Thanks Andrew and Paolo, apologies for my mistake. I have learnt something. According to what you wrote, a seemingly natural code like for(;;) { sElement = SomeString(...);