<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[set + remove() + g++ = compiler error]]></title><description><![CDATA[<p>Hallo zusammen!<br />
Normalerweise stell ich mich ja bei Compiler-Fehlern nicht so blöd an, aber bei diesem komm' ich wirklich nicht dahinter, warum...; ich hab ein kleines Programm zusammengestellt, bei dem der Fehler auch auftritt:</p>
<pre><code class="language-cpp">#include &lt;set&gt;
#include &lt;algorithm&gt;

struct A { int a; };
bool operator==(A const &amp; left, A const &amp; right) { return left.a == right.a; }
bool operator&lt; (A const &amp; left, A const &amp; right) { return left.a &lt;  right.a; }

int main()
{
   std::set&lt;A&gt; s;
   A a = { 0 };

   s.insert(a);
   std::remove(s.begin(), s.end(), a);

   return 0;
}
</code></pre>
<p>führt zu:</p>
<pre><code>/usr/include/c++/4.1.3/bits/stl_algo.h: In function ‘_OutputIterator std::remove_copy(_InputIterator, _InputIterator, _OutputIterator, const _Tp&amp;) [with _InputIterator = std::_Rb_tree_const_iterator&lt;A&gt;, _OutputIterator = std::_Rb_tree_const_iterator&lt;A&gt;, _Tp = A]’:
/usr/include/c++/4.1.3/bits/stl_algo.h:1256:   instantiated from ‘_ForwardIterator std::remove(_ForwardIterator, _ForwardIterator, const _Tp&amp;) [with _ForwardIterator = std::_Rb_tree_const_iterator&lt;A&gt;, _Tp = A]’
test.cpp:14:   instantiated from here
/usr/include/c++/4.1.3/bits/stl_algo.h:1181: error: passing ‘const A’ as ‘this’ argument of ‘A&amp; A::operator=(const A&amp;)’ discards qualifiers
</code></pre>
<p>ich versteh's nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/189551/set-remove-g-compiler-error</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 09:13:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189551.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Aug 2007 11:44:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to set + remove() + g++ = compiler error on Tue, 14 Aug 2007 11:44:39 GMT]]></title><description><![CDATA[<p>Hallo zusammen!<br />
Normalerweise stell ich mich ja bei Compiler-Fehlern nicht so blöd an, aber bei diesem komm' ich wirklich nicht dahinter, warum...; ich hab ein kleines Programm zusammengestellt, bei dem der Fehler auch auftritt:</p>
<pre><code class="language-cpp">#include &lt;set&gt;
#include &lt;algorithm&gt;

struct A { int a; };
bool operator==(A const &amp; left, A const &amp; right) { return left.a == right.a; }
bool operator&lt; (A const &amp; left, A const &amp; right) { return left.a &lt;  right.a; }

int main()
{
   std::set&lt;A&gt; s;
   A a = { 0 };

   s.insert(a);
   std::remove(s.begin(), s.end(), a);

   return 0;
}
</code></pre>
<p>führt zu:</p>
<pre><code>/usr/include/c++/4.1.3/bits/stl_algo.h: In function ‘_OutputIterator std::remove_copy(_InputIterator, _InputIterator, _OutputIterator, const _Tp&amp;) [with _InputIterator = std::_Rb_tree_const_iterator&lt;A&gt;, _OutputIterator = std::_Rb_tree_const_iterator&lt;A&gt;, _Tp = A]’:
/usr/include/c++/4.1.3/bits/stl_algo.h:1256:   instantiated from ‘_ForwardIterator std::remove(_ForwardIterator, _ForwardIterator, const _Tp&amp;) [with _ForwardIterator = std::_Rb_tree_const_iterator&lt;A&gt;, _Tp = A]’
test.cpp:14:   instantiated from here
/usr/include/c++/4.1.3/bits/stl_algo.h:1181: error: passing ‘const A’ as ‘this’ argument of ‘A&amp; A::operator=(const A&amp;)’ discards qualifiers
</code></pre>
<p>ich versteh's nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344228</guid><dc:creator><![CDATA[awx]]></dc:creator><pubDate>Tue, 14 Aug 2007 11:44:39 GMT</pubDate></item><item><title><![CDATA[Reply to set + remove() + g++ = compiler error on Tue, 14 Aug 2007 11:53:01 GMT]]></title><description><![CDATA[<p>set-Elemente können nur gelesen werden (auf die Weise wird sichergestellt, daß du die interne Sortierung nicht durcheinanderbringst) - und darum kannst du auch keine schreibenden Algorithmen (remove() löscht nicht physikalisch, sondern schichtet die Werte nur um) auf eine set&lt;&gt; loslassen. Stattdessen solltest du set::erase() verwenden.</p>
<p>(PS: Das ist kein Problem des G++, sondern absolut standardkonform)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344235</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 14 Aug 2007 11:53:01 GMT</pubDate></item><item><title><![CDATA[Reply to set + remove() + g++ = compiler error on Tue, 14 Aug 2007 12:04:29 GMT]]></title><description><![CDATA[<p>oh mann, darauf hätte ich auch selbst kommen können (ist eigentlich logisch)...<br />
vielen dank für die schnelle antwort!</p>
<p>alles klar, also einfach .find() + .erase()</p>
<p>PS: ich habe auch nicht geglaubt, es sei ein g++-Problem (ein nicht so standardkonformer compiler hatte das aber übrigens so akzeptiert).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344248</guid><dc:creator><![CDATA[awx]]></dc:creator><pubDate>Tue, 14 Aug 2007 12:04:29 GMT</pubDate></item><item><title><![CDATA[Reply to set + remove() + g++ = compiler error on Tue, 14 Aug 2007 12:07:34 GMT]]></title><description><![CDATA[<pre><code>error: passing ‘const A’ as ‘this’ argument of ‘A&amp; A::operator=(const A&amp;)’ discards qualifiers
</code></pre>
<p>sagt es ja auch schon: Du wendest A::operator= bei einem const A an, versuchst also, einem Konstanten Wert einen neuen Wert zuzuweisen.<br />
Das ganze wird aufgerufen von std::remove_copy(), welcher wiederum von std::remove() aufgerufen wird, wie die beiden anderen Zeilen sagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344252</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 14 Aug 2007 12:07:34 GMT</pubDate></item></channel></rss>