This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
non-standard things in the gnu stl
- From: Uwe Sassenberg <uwe at sci-d-vis dot com>
- To: bug-gcc at gnu dot org
- Date: Thu, 27 Feb 2003 15:54:20 +0100
- Subject: non-standard things in the gnu stl
Concerns: STL
Details: std::set, std::multiset
To whom it may concern,
My name is Uwe Sassenberg at Science-D-Visions. I found out that the API
of std::set and std::multiset are not as defined in the standard.
This is not a compiler problem, everything can be fixed within the
header-file stl_set.h and stl_multiset.h. It would be fine to find out
if the problem is already being solved by the gnu people.
Could you please tell me, with whom I should get into contact?
Thank you
Uwe Sassenberg
Here is a brief description of the problem:
------------8<------------
There is no difference in the definition of std::set<T>::iterator and
std::set<T>::const_iterator. As a consequence, there is only a method
iterator begin() const;
but the Standard requires two methods
const_iterator begin() const;
iterator begin();
The same problem exists for end() as well.
If T contains two methods foo() and foo() const, only the
foo() const method can be accessed via the iterators.
------------8<------------
#include <set>
#include <iostream>
class X
{
private:
int _i;
public:
X(int i):_i(i) { }
void foo() const { std::cout << "foo() const" << std::endl; }
void foo() { std::cout << "foo()" << std::endl; }
bool operator < (const X& x) const { return _i < x._i; }
};
void test(std::set<X>& s) { s.begin()->foo(); }
void test_const(const std::set<X>& s) { s.begin()->foo(); }
int main()
{
std::set<X> s;
s.insert(X(1));
test(s);
test_const(s);
}
Compile with g++ -g test_set.C -o test_set
produces
foo() const
foo() const
but should produce
foo()
foo() const
--
S c i e n c e . D . V i s i o n s
Emil-Figge Str. 80 D-44227 Dortmund Germany
Phone: ++ 49 231 9742 188 Fax: ++ 49 231 9742 189
mailto:info at sci-d-vis dot com http://www.sci-d-vis.com