<?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[bedingte Template-Operatoren --&amp;gt; Compiler-unabhängig?]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>durch probieren hab ich unten dargestellte Template-Operator-Kombination hinbekommen. Weiß jemand, ob das nur ein Compiler-abhängiges Verhalten widerspiegelt oder ob das immer so sein muss? Wenn letzteres, warum?<br />
(Knackpunkt: Beim 2. Operator könnte es sich um eine Re-Definition des 1. handeln)</p>
<p>Hier Das Beispielprogramm:</p>
<p>#include &lt;iostream&gt;<br />
using namespace std;</p>
<p>class AA<br />
{<br />
private:<br />
public:<br />
typedef bool OP_AA ;<br />
int i;<br />
};</p>
<p>class BB<br />
{<br />
private:<br />
public:<br />
typedef bool OP_BB ;</p>
<p>int i;<br />
};</p>
<p>template &lt;class Typ&gt;<br />
typename Typ::OP_AA operator&gt;(const Typ&amp; _s, const Typ&amp; _r)<br />
{<br />
cout&lt;&lt;&quot;In OP_AA &quot;&lt;&lt;endl;<br />
return true;<br />
}</p>
<p>template &lt;class Typ&gt;<br />
typename Typ::OP_BB operator&gt;(const Typ&amp; _s, const Typ&amp; _r)<br />
{<br />
cout&lt;&lt;&quot;In OP_BB &quot;&lt;&lt;endl;<br />
return false;<br />
}</p>
<p>int main(int argc, char* argv[], char* env[])<br />
{</p>
<p>AA aa_x, aa_y;<br />
BB bb_x, bb_y;<br />
bool frage = true;</p>
<p>frage = (aa_x &gt; aa_y);<br />
cout&lt;&lt;&quot;frage (aa_x &gt; aa_y) &quot;&lt;&lt;frage&lt;&lt;endl;</p>
<p>frage = (bb_x &gt; bb_y);<br />
cout&lt;&lt;&quot;frage (bb_x &gt; bb_y) &quot;&lt;&lt;frage&lt;&lt;endl;</p>
<p>return 0;<br />
}</p>
<p>Liefert die Ausgabe:<br />
###&gt;<br />
In OP_AA<br />
frage (aa_x &gt; aa_y) 1<br />
In OP_BB<br />
frage (bb_x &gt; bb_y) 0<br />
###&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/134517/bedingte-template-operatoren-gt-compiler-unabhängig</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 21:18:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/134517.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Jan 2006 17:13:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to bedingte Template-Operatoren --&amp;gt; Compiler-unabhängig? on Thu, 26 Jan 2006 17:13:23 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>durch probieren hab ich unten dargestellte Template-Operator-Kombination hinbekommen. Weiß jemand, ob das nur ein Compiler-abhängiges Verhalten widerspiegelt oder ob das immer so sein muss? Wenn letzteres, warum?<br />
(Knackpunkt: Beim 2. Operator könnte es sich um eine Re-Definition des 1. handeln)</p>
<p>Hier Das Beispielprogramm:</p>
<p>#include &lt;iostream&gt;<br />
using namespace std;</p>
<p>class AA<br />
{<br />
private:<br />
public:<br />
typedef bool OP_AA ;<br />
int i;<br />
};</p>
<p>class BB<br />
{<br />
private:<br />
public:<br />
typedef bool OP_BB ;</p>
<p>int i;<br />
};</p>
<p>template &lt;class Typ&gt;<br />
typename Typ::OP_AA operator&gt;(const Typ&amp; _s, const Typ&amp; _r)<br />
{<br />
cout&lt;&lt;&quot;In OP_AA &quot;&lt;&lt;endl;<br />
return true;<br />
}</p>
<p>template &lt;class Typ&gt;<br />
typename Typ::OP_BB operator&gt;(const Typ&amp; _s, const Typ&amp; _r)<br />
{<br />
cout&lt;&lt;&quot;In OP_BB &quot;&lt;&lt;endl;<br />
return false;<br />
}</p>
<p>int main(int argc, char* argv[], char* env[])<br />
{</p>
<p>AA aa_x, aa_y;<br />
BB bb_x, bb_y;<br />
bool frage = true;</p>
<p>frage = (aa_x &gt; aa_y);<br />
cout&lt;&lt;&quot;frage (aa_x &gt; aa_y) &quot;&lt;&lt;frage&lt;&lt;endl;</p>
<p>frage = (bb_x &gt; bb_y);<br />
cout&lt;&lt;&quot;frage (bb_x &gt; bb_y) &quot;&lt;&lt;frage&lt;&lt;endl;</p>
<p>return 0;<br />
}</p>
<p>Liefert die Ausgabe:<br />
###&gt;<br />
In OP_AA<br />
frage (aa_x &gt; aa_y) 1<br />
In OP_BB<br />
frage (bb_x &gt; bb_y) 0<br />
###&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/977137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/977137</guid><dc:creator><![CDATA[Gast2006]]></dc:creator><pubDate>Thu, 26 Jan 2006 17:13:23 GMT</pubDate></item><item><title><![CDATA[Reply to bedingte Template-Operatoren --&amp;gt; Compiler-unabhängig? on Fri, 27 Jan 2006 13:06:03 GMT]]></title><description><![CDATA[<p>Hallo,<br />
der Code ist in Ordnung. Er nutzt das SFINAE (Substitution Failure is not an error)-Prinzip. Wenn bei der Überladungsauflösung ein oder mehrere Template-Instanziierungen ungültig sind, aber trotzdem eine passende Funktion existiert, so werden die ungültigen Instanziierungen einfach verworfen.</p>
<p>In deinem Beispiel:</p>
<p>Für aa_x &gt; aa_y existieren mindestens zwei Überladungen (deine beiden Templates). Die erste wird zu:</p>
<p>AA::OP_AA operator&gt;(const AA&amp; _s, const AA&amp; _r);</p>
<p>die zweite zu:</p>
<p>AA::OP_BB operator&gt;(const AA&amp; _s, const AA&amp; _r);</p>
<p>Da AA keinen Typ namens OP_BB besitzt, wird die zweite Überladung ignoriert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/977910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/977910</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 27 Jan 2006 13:06:03 GMT</pubDate></item><item><title><![CDATA[Reply to bedingte Template-Operatoren --&amp;gt; Compiler-unabhängig? on Mon, 30 Jan 2006 17:12:37 GMT]]></title><description><![CDATA[<p>Erst mal vielen Dank an HumeSikkins</p>
<p>Was ich im Zusammenhang mit SFINAE dann aber nicht verstehe ist, warum die folgende Konstruktion nicht klappt (s.u.).</p>
<p>Hier bekomme ich dann die Fehlermeldung (beim 2. Operator-Template mit Bezug auf's erste):</p>
<pre><code>Error 174: &quot;mytest.cpp&quot;, line 248 # Function redefinition; previously defined as &quot;bool operator &gt;(const
 #1 &amp;,const #1 &amp;)&quot; at [&quot;mytest.cpp&quot;, line 241].
    bool operator&gt;(const Typ&amp; _s, const Typ&amp; _r)
</code></pre>
<p>Auch Veruche, OP_xx in &quot;aktiveren&quot; Code zu stecken, klappten nicht. Ist das dann ein Kompiler-Fehler oder bezieht sich SFINAE nur auf den Rückgabewert?</p>
<pre><code class="language-cpp">class AA
{
private:

public:

   typedef int OP_AA ;
   int i;
};

class BB
{
private:

public:

   typedef int OP_BB ;
   int i;
};

template &lt;class Typ&gt;    
bool operator&gt;(const Typ&amp; _s, const Typ&amp; _r) 
{
   return true; //(_r &lt; _s);
   typename Typ::OP_AA dummy;
}

template &lt;class Typ&gt;    
bool operator&gt;(const Typ&amp; _s, const Typ&amp; _r) 
{
   return true; //(_r &lt; _s);
   typename Typ::OP_BB dummy;
}

int main(int argc, char* argv[], char* env[])
{

    AA aa_a,aa_b;
    bool frage = true;

    frage = (aa_a &gt; aa_b);
    cout&lt;&lt;&quot;frage &quot;&lt;&lt;frage&lt;&lt;endl;

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/981310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/981310</guid><dc:creator><![CDATA[Gast2006]]></dc:creator><pubDate>Mon, 30 Jan 2006 17:12:37 GMT</pubDate></item><item><title><![CDATA[Reply to bedingte Template-Operatoren --&amp;gt; Compiler-unabhängig? on Mon, 30 Jan 2006 17:28:19 GMT]]></title><description><![CDATA[<p>Die beiden Funktionen unterscheiden sich nicht, der Prototyp muss sich aber unterscheiden, du hast die Funktion hier nicht überladen, sondern zweimal mit unterschiedlichem Rumpf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/981349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/981349</guid><dc:creator><![CDATA[Anon]]></dc:creator><pubDate>Mon, 30 Jan 2006 17:28:19 GMT</pubDate></item><item><title><![CDATA[Reply to bedingte Template-Operatoren --&amp;gt; Compiler-unabhängig? on Tue, 31 Jan 2006 09:42:21 GMT]]></title><description><![CDATA[<p>Vielen Dank Anon. Ich glaube, dass ich's jetzt gefressen habe --&gt; die wunderbare Welt des C++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/981791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/981791</guid><dc:creator><![CDATA[Gast2006]]></dc:creator><pubDate>Tue, 31 Jan 2006 09:42:21 GMT</pubDate></item></channel></rss>