<?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[SFINAE beim cast-Operator]]></title><description><![CDATA[<p>Hi,</p>
<p>wie kann ich am besten den cast-Operator durch SFINAE hier ausschalten?</p>
<pre><code class="language-cpp">template &lt;std::size_t i n&gt;
class A {
public:

	operator int() // Wenn n = 0 ist, disablen
	{ return i };

private:
	int i; 
};
</code></pre>
<p>Das Problem ist, dass ich auch keinen Dummy-Parameter reinhängen kann, da C++ darauf besteht, dass der cast-Operator keinen Parameter hat.</p>
<p>Wie löse ich das am besten? Irgendwas mit Tuples?!</p>
<p>Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":]"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/294654/sfinae-beim-cast-operator</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 19:07:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/294654.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 29 Oct 2011 14:32:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to SFINAE beim cast-Operator on Sat, 29 Oct 2011 14:32:44 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>wie kann ich am besten den cast-Operator durch SFINAE hier ausschalten?</p>
<pre><code class="language-cpp">template &lt;std::size_t i n&gt;
class A {
public:

	operator int() // Wenn n = 0 ist, disablen
	{ return i };

private:
	int i; 
};
</code></pre>
<p>Das Problem ist, dass ich auch keinen Dummy-Parameter reinhängen kann, da C++ darauf besteht, dass der cast-Operator keinen Parameter hat.</p>
<p>Wie löse ich das am besten? Irgendwas mit Tuples?!</p>
<p>Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":]"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137442</guid><dc:creator><![CDATA[SFINAE]]></dc:creator><pubDate>Sat, 29 Oct 2011 14:32:44 GMT</pubDate></item><item><title><![CDATA[Reply to SFINAE beim cast-Operator on Sat, 29 Oct 2011 14:42:51 GMT]]></title><description><![CDATA[<p>Oups, ich hab auf die schnelle ein paar Tippfehler gemacht:</p>
<pre><code class="language-cpp">template &lt;std::size_t n&gt;
class A {
public:

	operator int() // Wenn n = 0 ist, disablen
	{ return i; }

private:
	int i; 
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2137445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137445</guid><dc:creator><![CDATA[SFINAE]]></dc:creator><pubDate>Sat, 29 Oct 2011 14:42:51 GMT</pubDate></item><item><title><![CDATA[Reply to SFINAE beim cast-Operator on Sat, 29 Oct 2011 14:44:42 GMT]]></title><description><![CDATA[<p>Du könntest den operator int für n=0 spezialisieren und nicht definieren:</p>
<pre><code class="language-cpp">template&lt;&gt;
A&lt; 0 &gt;::operator int();
</code></pre>
<p>Alternativ kannst du auch einfach die ganze Klasse für n=0 spezialisieren und keinen operator int deklarieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137447</guid><dc:creator><![CDATA[GorbGorb]]></dc:creator><pubDate>Sat, 29 Oct 2011 14:44:42 GMT</pubDate></item><item><title><![CDATA[Reply to SFINAE beim cast-Operator on Sat, 29 Oct 2011 14:55:30 GMT]]></title><description><![CDATA[<p>Erteres wäre ein Möglichkeit, doch zieht der Compiler den Operator immer noch hinzu, weil er ja nicht erkennt, dass er nicht definiert ist, oder?</p>
<p>Zweites kommt nicht in Frage, zu viel Code Duplizierung.</p>
<p>Ich habe eine Möglichkeit gefunden:</p>
<pre><code class="language-cpp">template &lt;typename T, typename&gt;
struct GetFirst {
	typedef T Result;
};

template &lt;std::size_t n&gt;
class A {
public:

	operator typename GetFirst&lt;int, typename std::enable_if&lt;n != 0&gt;::type&gt;::Result()
	{ return i; }

private:
	int i; 
};
</code></pre>
<p>Das sollte es tun, oder geht es noch eleganter?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137454</guid><dc:creator><![CDATA[SFINAE]]></dc:creator><pubDate>Sat, 29 Oct 2011 14:55:30 GMT</pubDate></item><item><title><![CDATA[Reply to SFINAE beim cast-Operator on Sat, 29 Oct 2011 15:08:30 GMT]]></title><description><![CDATA[<p>SFINAE schrieb:</p>
<blockquote>
<p>Das sollte es tun, oder geht es noch eleganter?</p>
</blockquote>
<p>Nö. Ist bei gcc <s>S</s><strong>FI</strong><s>N</s><strong>AE</strong>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137457</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 29 Oct 2011 15:08:30 GMT</pubDate></item><item><title><![CDATA[Reply to SFINAE beim cast-Operator on Sat, 29 Oct 2011 15:16:45 GMT]]></title><description><![CDATA[<p>Och neeee, so kann man ja keine A&lt;!=0&gt;-Objekte mehr erzeugen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137464</guid><dc:creator><![CDATA[SFINAE]]></dc:creator><pubDate>Sat, 29 Oct 2011 15:16:45 GMT</pubDate></item><item><title><![CDATA[Reply to SFINAE beim cast-Operator on Sat, 29 Oct 2011 15:21:00 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>SFINAE schrieb:</p>
<blockquote>
<p>Das sollte es tun, oder geht es noch eleganter?</p>
</blockquote>
<p>Nö. Ist bei gcc <s>S</s><strong>FI</strong><s>N</s><strong>AE</strong>.</p>
</blockquote>
<p>Failure is an error? Was für ne Weisheit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137468</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sat, 29 Oct 2011 15:21:00 GMT</pubDate></item><item><title><![CDATA[Reply to SFINAE beim cast-Operator on Sat, 29 Oct 2011 20:31:15 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;type_traits&gt;
#include &lt;iostream&gt;

template &lt;size_t N&gt;
class A {
public:

    template &lt;typename = typename std::enable_if&lt;N!=0&gt;::type&gt;
    operator int() { return i; }
private:
    int i;
};

int main()
{
   A&lt;0&gt; x; int xx = x;
   A&lt;1&gt; y; int yy = y;
}
</code></pre>
<p>Setzt aber C++11 voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137636</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 29 Oct 2011 20:31:15 GMT</pubDate></item><item><title><![CDATA[Reply to SFINAE beim cast-Operator on Sat, 29 Oct 2011 23:07:43 GMT]]></title><description><![CDATA[<p>Ich habe es zwar nicht getestet, aber müsste nicht folgendes gehen:</p>
<pre><code class="language-cpp">operator typename std::enable_if&lt;N != 0, int&gt;::type() { return i; }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2137684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137684</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sat, 29 Oct 2011 23:07:43 GMT</pubDate></item><item><title><![CDATA[Reply to SFINAE beim cast-Operator on Sat, 29 Oct 2011 23:50:35 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Ich habe es zwar nicht getestet, [...]</p>
</blockquote>
<p>Das sollte so oder so nicht funktionieren.</p>
<p>Es geht erst ab C++2011 so, wie es camper gezeigt hat (über den Trick von Default-Template-Parametern)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137699</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 29 Oct 2011 23:50:35 GMT</pubDate></item><item><title><![CDATA[Reply to SFINAE beim cast-Operator on Sun, 30 Oct 2011 00:14:20 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Ich habe es zwar nicht getestet, aber müsste nicht folgendes gehen:</p>
<pre><code class="language-cpp">operator typename std::enable_if&lt;N != 0, int&gt;::type() { return i; }
</code></pre>
</blockquote>
<p>Das ist kein Funktionstemplate.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137707</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 30 Oct 2011 00:14:20 GMT</pubDate></item><item><title><![CDATA[Reply to SFINAE beim cast-Operator on Sun, 30 Oct 2011 00:16:23 GMT]]></title><description><![CDATA[<p>Verstehe ich zwar nicht, aber ich habe auch seit Ewigkeiten nichts mehr mit SFINAE gemacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137709</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137709</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 30 Oct 2011 00:16:23 GMT</pubDate></item><item><title><![CDATA[Reply to SFINAE beim cast-Operator on Sun, 30 Oct 2011 01:13:06 GMT]]></title><description><![CDATA[<p>Das Prinzip von SFINAE beruht darauf, dass es sich um Funktions<strong>templates</strong> handelt, denn nur deren Fehler werden bei der Suche nach passenden Funktionen übersprungen.</p>
<p>C++11 braucht es neben <code>std::enable_if</code> auch für Default-Funktionstemplate-Parameter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2137721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2137721</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 30 Oct 2011 01:13:06 GMT</pubDate></item></channel></rss>