<?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[operator== als Template]]></title><description><![CDATA[<p>Hi, wie bekommt man am elegantesten das da kompiliert?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class A {
};

class D : public A {
};

template &lt;typename T&gt; class B {

};

bool operator==(A const &amp; lhs, A const &amp; rhs) {
   return true;
}

template &lt;typename T, typename U&gt; 
bool operator==(T * lhs, B&lt;U&gt; const &amp; rhs)
{
   return false;
}

template &lt;typename T, typename U&gt; 
bool operator==(B&lt;T&gt; const &amp; lhs, U * rhs)
{
   return false;
}

int main() {
   B&lt;A&gt; b;
   D * d;
   std::cout &lt;&lt; (b == 0) &lt;&lt; std::endl;
   std::cout &lt;&lt; (b == d) &lt;&lt; std::endl;
   std::cout &lt;&lt; (0 == b) &lt;&lt; std::endl;
   std::cout &lt;&lt; (d == b) &lt;&lt; std::endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/165193/operator-als-template</link><generator>RSS for Node</generator><lastBuildDate>Mon, 14 Sep 2026 11:27:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/165193.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 16 Nov 2006 12:59:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to operator== als Template on Thu, 16 Nov 2006 12:59:42 GMT]]></title><description><![CDATA[<p>Hi, wie bekommt man am elegantesten das da kompiliert?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class A {
};

class D : public A {
};

template &lt;typename T&gt; class B {

};

bool operator==(A const &amp; lhs, A const &amp; rhs) {
   return true;
}

template &lt;typename T, typename U&gt; 
bool operator==(T * lhs, B&lt;U&gt; const &amp; rhs)
{
   return false;
}

template &lt;typename T, typename U&gt; 
bool operator==(B&lt;T&gt; const &amp; lhs, U * rhs)
{
   return false;
}

int main() {
   B&lt;A&gt; b;
   D * d;
   std::cout &lt;&lt; (b == 0) &lt;&lt; std::endl;
   std::cout &lt;&lt; (b == d) &lt;&lt; std::endl;
   std::cout &lt;&lt; (0 == b) &lt;&lt; std::endl;
   std::cout &lt;&lt; (d == b) &lt;&lt; std::endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1175926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1175926</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Thu, 16 Nov 2006 12:59:42 GMT</pubDate></item><item><title><![CDATA[Reply to operator== als Template on Thu, 16 Nov 2006 13:12:32 GMT]]></title><description><![CDATA[<p>Gegenfrage: Was hast du mit diesem Code vor? Und wo streikt dein Compiler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1175940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1175940</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 16 Nov 2006 13:12:32 GMT</pubDate></item><item><title><![CDATA[Reply to operator== als Template on Thu, 16 Nov 2006 13:19:37 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Gegenfrage: Was hast du mit diesem Code vor? Und wo streikt dein Compiler?</p>
</blockquote>
<p>B ist ein Wrapper um Handler herum. Handler sind Zeigern. Nun möchte ich die Wrapper mit Zeigern vergleichen können. Der Compiler findet aber nicht die beiden operator== sondern nur die Funktion für die nicht beteiligte Klasse A.</p>
<pre><code class="language-cpp">glub.C: In function »int main()«:
glub.C:34: Fehler: no match für »operator==« in »b == 0«
glub.C:13: Anmerkung: Kandidaten sind: bool operator==(const A&amp;, const A&amp;)
glub.C:36: Fehler: no match für »operator==« in »0 == b«
glub.C:13: Anmerkung: Kandidaten sind: bool operator==(const A&amp;, const A&amp;)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1175946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1175946</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Thu, 16 Nov 2006 13:19:37 GMT</pubDate></item><item><title><![CDATA[Reply to operator== als Template on Thu, 16 Nov 2006 21:55:54 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::cout &lt;&lt; (b == (void*)0) &lt;&lt; std::endl;
   std::cout &lt;&lt; (b == d) &lt;&lt; std::endl;
   std::cout &lt;&lt; (static_cast&lt;void*&gt;(0) == b) &lt;&lt; std::endl; // PC-Version
   std::cout &lt;&lt; (d == b) &lt;&lt; std::endl;
</code></pre>
<p>Passt dir das nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1176190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1176190</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Thu, 16 Nov 2006 21:55:54 GMT</pubDate></item><item><title><![CDATA[Reply to operator== als Template on Thu, 16 Nov 2006 22:47:34 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<pre><code class="language-cpp">std::cout &lt;&lt; (b == (void*)0) &lt;&lt; std::endl;
   std::cout &lt;&lt; (b == d) &lt;&lt; std::endl;
   std::cout &lt;&lt; (static_cast&lt;void*&gt;(0) == b) &lt;&lt; std::endl; // PC-Version
   std::cout &lt;&lt; (d == b) &lt;&lt; std::endl;
</code></pre>
<p>Passt dir das nicht?</p>
</blockquote>
<p>Es funktioniert aber es ist nicht schön. Wäre gut, wenn man auf einen Cast verzichten könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1176203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1176203</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Thu, 16 Nov 2006 22:47:34 GMT</pubDate></item><item><title><![CDATA[Reply to operator== als Template on Thu, 16 Nov 2006 23:02:47 GMT]]></title><description><![CDATA[<p>Ja, sicher nicht schön. Aber sich auf Biegen und Brechen gegen diesen Cast stemmen, so rein aus Prinzip? Geht ja ausschließlich um konstant 0.</p>
<p>Ansonsten: wie wär's mit nem <code>operator unspecified-bool-type()</code> für <code>B</code> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1176207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1176207</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Thu, 16 Nov 2006 23:02:47 GMT</pubDate></item><item><title><![CDATA[Reply to operator== als Template on Thu, 16 Nov 2006 23:47:28 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>Ja, sicher nicht schön. Aber sich auf Biegen und Brechen gegen diesen Cast stemmen, so rein aus Prinzip? Geht ja ausschließlich um konstant 0.</p>
<p>Ansonsten: wie wär's mit nem <code>operator unspecified-bool-type()</code> für <code>B</code> ?</p>
</blockquote>
<p>Hmm. Wäre eine Überlegung wert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1176220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1176220</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Thu, 16 Nov 2006 23:47:28 GMT</pubDate></item></channel></rss>