<?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[std::enable_if Frage]]></title><description><![CDATA[<p>Hallo,</p>
<pre><code>template &lt;typename T&gt;
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const T&amp; response)
{
    [...]
    return os;
}
</code></pre>
<p>Davon möchte ich nur eine Template Instanziierung haben wenn <em>T</em> eine Klasse ist.</p>
<pre><code>template &lt;typename T&gt;
typename std::enable_if&lt;std::is_class&lt;T&gt;::value, T&gt;::type
operator&lt;&lt;(std::ostream&amp; os, const T&amp; response)
{
    [...]
    return os;
}
</code></pre>
<p>... ist mein Ansatz bisher. Das habe ich aber nur aus der Doku herauskopiert, wirklich verstehen was da geschieht tue ich nicht. Es kompiliert so auch nicht.</p>
<p>Kann mir jemand sagen wie man es richtig macht (und optimalerweise auch erklären was das typename an dieser Stelle genau bewirkt etc.)</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/332468/std-enable_if-frage</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 20:41:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/332468.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 02 May 2015 20:38:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::enable_if Frage on Sat, 02 May 2015 20:38:01 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<pre><code>template &lt;typename T&gt;
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const T&amp; response)
{
    [...]
    return os;
}
</code></pre>
<p>Davon möchte ich nur eine Template Instanziierung haben wenn <em>T</em> eine Klasse ist.</p>
<pre><code>template &lt;typename T&gt;
typename std::enable_if&lt;std::is_class&lt;T&gt;::value, T&gt;::type
operator&lt;&lt;(std::ostream&amp; os, const T&amp; response)
{
    [...]
    return os;
}
</code></pre>
<p>... ist mein Ansatz bisher. Das habe ich aber nur aus der Doku herauskopiert, wirklich verstehen was da geschieht tue ich nicht. Es kompiliert so auch nicht.</p>
<p>Kann mir jemand sagen wie man es richtig macht (und optimalerweise auch erklären was das typename an dieser Stelle genau bewirkt etc.)</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452313</guid><dc:creator><![CDATA[templategedöns]]></dc:creator><pubDate>Sat, 02 May 2015 20:38:01 GMT</pubDate></item><item><title><![CDATA[Reply to std::enable_if Frage on Sat, 02 May 2015 21:48:58 GMT]]></title><description><![CDATA[<blockquote>
<p>Davon möchte ich nur eine Template Instanziierung haben wenn T eine Klasse ist.</p>
</blockquote>
<p>Das macht keinen Sinn. Für alle arithmetischen Datentypen (und einige Zeiger) wurde <code>operator&lt;&lt;</code> überladen und wird bei overload resolution bevorzugt. Warum also rausschmeissen wenn es wahrscheinlich eh nicht genommen wird?</p>
<p>Der Grund warum es bei dir nicht klappt ist übrigens der dass das zweite Template-Argument <code>std::ostream&amp;</code> sein sollte (welches typename ..::type entspricht, deinem Rückgabetyp). Warum das typename da hin sollte wirst du mit etwas Googeln selbst herausfinden (Tipp: Schau auf Stackoverflow, dort gibt es eine gute Antwort.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2452315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2452315</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 02 May 2015 21:48:58 GMT</pubDate></item></channel></rss>