<?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[Implementierung von is_callable]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hatte die Idee für eine Implementierung von is_callable hierher: <a href="https://stackoverflow.com/questions/15393938/find-out-if-a-c-object-is-callable/15396757#15396757" rel="nofollow">https://stackoverflow.com/questions/15393938/find-out-if-a-c-object-is-callable/15396757#15396757</a></p>
<p>Diese sollte für Klassen, Funktionen und Lambdas funktionieren.</p>
<pre><code>template&lt;typename T&gt;
struct is_callable_impl {
private:
	typedef char(&amp;yes)[1];  
	typedef char(&amp;no)[2];   

	struct Fallback { void operator()(); };
	struct Derived : T, Fallback { };

	template&lt;typename U, U&gt; struct Check; 

	template&lt;typename&gt;
	static yes test(...);     

	template&lt;typename C&gt;
	static no test(Check&lt;void (Fallback::*)(), &amp;C::operator()&gt;*);

public:
	static const bool value = sizeof(test&lt;Derived&gt;(0)) == sizeof(yes); 
};

template&lt;typename T&gt;
struct is_callable
{
	typedef
	    typename std::conditional&lt;
		std::is_function&lt;T&gt;::value,
		std::true_type,
		typename std::conditional&lt;
		     std::is_class&lt;T&gt;::value,
		     is_callable_impl&lt;T&gt;,
		     std::false_type
		&gt;::type
	    &gt;::type type;

	static const bool value = type::value;
};
</code></pre>
<p>Der Code funktioniert (MSVC 2013, GCC) und tut was er soll. Mein nächster Gedanke war, dass der Standard uns doch die schöne Option std::enable_if gegeben hat.<br />
Nach einigem hin und her, bin ich zu dieser Version gekommen:</p>
<pre><code>template&lt;typename C, class = typename std::enable_if&lt;std::is_same&lt;void(Fallback::*)(), decltype(&amp;C::operator())&gt;::value&gt;::type&gt;
	static no test(int);
</code></pre>
<p>Diese Version funktioniert unter MSVC und GCC ebenso. Da wäre auch schon meine erste Frage: Warum muss man an dieser Stelle 'decltype' schreiben? Schreibt man es nicht, dann kompiliert es nur unter Visual Studio, jedoch nicht unter GCC.</p>
<p>Als nächsten Schritt wollte ich die beiden 'test'-Funktionen zusammenlegen und den Rückgabetyp bedingt machen mit Hilfe von std::conditional.</p>
<pre><code>template&lt;typename C, class R = typename std::conditional&lt;std::is_same&lt;void(Fallback::*)(), decltype(&amp;C::operator())&gt;::value, no, yes &gt;::type&gt;
	static R test(...);
</code></pre>
<p>Der Code funktioniert allerdings auf keiner Plattform.</p>
<p>Da weiß doch bestimmt jemand Rat? <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/330948/implementierung-von-is_callable</link><generator>RSS for Node</generator><lastBuildDate>Thu, 02 Jul 2026 15:26:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/330948.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Feb 2015 20:32:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Implementierung von is_callable on Tue, 03 Feb 2015 20:32:37 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hatte die Idee für eine Implementierung von is_callable hierher: <a href="https://stackoverflow.com/questions/15393938/find-out-if-a-c-object-is-callable/15396757#15396757" rel="nofollow">https://stackoverflow.com/questions/15393938/find-out-if-a-c-object-is-callable/15396757#15396757</a></p>
<p>Diese sollte für Klassen, Funktionen und Lambdas funktionieren.</p>
<pre><code>template&lt;typename T&gt;
struct is_callable_impl {
private:
	typedef char(&amp;yes)[1];  
	typedef char(&amp;no)[2];   

	struct Fallback { void operator()(); };
	struct Derived : T, Fallback { };

	template&lt;typename U, U&gt; struct Check; 

	template&lt;typename&gt;
	static yes test(...);     

	template&lt;typename C&gt;
	static no test(Check&lt;void (Fallback::*)(), &amp;C::operator()&gt;*);

public:
	static const bool value = sizeof(test&lt;Derived&gt;(0)) == sizeof(yes); 
};

template&lt;typename T&gt;
struct is_callable
{
	typedef
	    typename std::conditional&lt;
		std::is_function&lt;T&gt;::value,
		std::true_type,
		typename std::conditional&lt;
		     std::is_class&lt;T&gt;::value,
		     is_callable_impl&lt;T&gt;,
		     std::false_type
		&gt;::type
	    &gt;::type type;

	static const bool value = type::value;
};
</code></pre>
<p>Der Code funktioniert (MSVC 2013, GCC) und tut was er soll. Mein nächster Gedanke war, dass der Standard uns doch die schöne Option std::enable_if gegeben hat.<br />
Nach einigem hin und her, bin ich zu dieser Version gekommen:</p>
<pre><code>template&lt;typename C, class = typename std::enable_if&lt;std::is_same&lt;void(Fallback::*)(), decltype(&amp;C::operator())&gt;::value&gt;::type&gt;
	static no test(int);
</code></pre>
<p>Diese Version funktioniert unter MSVC und GCC ebenso. Da wäre auch schon meine erste Frage: Warum muss man an dieser Stelle 'decltype' schreiben? Schreibt man es nicht, dann kompiliert es nur unter Visual Studio, jedoch nicht unter GCC.</p>
<p>Als nächsten Schritt wollte ich die beiden 'test'-Funktionen zusammenlegen und den Rückgabetyp bedingt machen mit Hilfe von std::conditional.</p>
<pre><code>template&lt;typename C, class R = typename std::conditional&lt;std::is_same&lt;void(Fallback::*)(), decltype(&amp;C::operator())&gt;::value, no, yes &gt;::type&gt;
	static R test(...);
</code></pre>
<p>Der Code funktioniert allerdings auf keiner Plattform.</p>
<p>Da weiß doch bestimmt jemand Rat? <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/2441033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441033</guid><dc:creator><![CDATA[Mark2015]]></dc:creator><pubDate>Tue, 03 Feb 2015 20:32:37 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von is_callable on Thu, 05 Feb 2015 11:39:48 GMT]]></title><description><![CDATA[<p>Was mir auf die Schnelle auffällt, ist, dass <code>union</code> s und Lambdas ausgeschlossen werden. <code>union</code> s können den <code>operator()</code> auch überladen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2441299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441299</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Thu, 05 Feb 2015 11:39:48 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von is_callable on Thu, 05 Feb 2015 12:12:27 GMT]]></title><description><![CDATA[<p>asfdlol schrieb:</p>
<blockquote>
<p>Was mir auf die Schnelle auffällt, ist, dass <code>union</code> s und Lambdas ausgeschlossen werden.</p>
</blockquote>
<p>Wie kommste drauf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2441305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441305</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 05 Feb 2015 12:12:27 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von is_callable on Thu, 05 Feb 2015 13:11:46 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Wie kommste drauf?</p>
</blockquote>
<p>Mark2015 schrieb:</p>
<blockquote>
<pre><code>typedef 
        typename std::conditional&lt; 
        std::is_function&lt;T&gt;::value, // false für Lambdas und für unions
        std::true_type, 
        typename std::conditional&lt; 
             std::is_class&lt;T&gt;::value, // false für unions und unspezifiziert (?) für Lambdas
             is_callable_impl&lt;T&gt;, 
             std::false_type 
        &gt;::type 
        &gt;::type type;
</code></pre>
<p>Der Code funktioniert (MSVC 2013, GCC) und <strong>tut was er soll</strong>.</p>
</blockquote>
<p>Vielleicht habe ich ungewollt den Eindruck erweckt, dass ich mich auf die unteren Listings bezogen habe.</p>
<p>Mark2015 schrieb:</p>
<blockquote>
<pre><code>template&lt;typename C, class = typename std::enable_if&lt;std::is_same&lt;void(Fallback::*)(), decltype(&amp;C::operator())&gt;::value&gt;::type&gt;
	static no test(int);
</code></pre>
<p>Diese Version funktioniert unter MSVC und GCC ebenso. Da wäre auch schon meine erste Frage: Warum muss man an dieser Stelle 'decltype' schreiben? Schreibt man es nicht, dann kompiliert es nur unter Visual Studio, jedoch nicht unter GCC.</p>
</blockquote>
<p>Ja, musst du. <a href="http://en.cppreference.com/w/cpp/types/is_same" rel="nofollow">Template-Signatur von <code>std::issame</code> </a>:</p>
<pre><code>template&lt; class T, class U &gt;
struct is_same;
</code></pre>
<p>Der zweite Template-Parameter erwartet also einen Typen. <code>&amp;C::operator()</code> ist jedoch ein Methodenzeiger und ein R-Value, nicht jedoch ein Typ.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2441327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441327</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Thu, 05 Feb 2015 13:11:46 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von is_callable on Thu, 05 Feb 2015 13:31:59 GMT]]></title><description><![CDATA[<p>Eigentlich müsste der is_same-Test doch überflüssig sein, ebenso wie der Test auf Fallback im Original.<br />
Der operator existiert genau dann nicht in T, wenn der Zeiger auf operator() in Derived überhaupt eindeutig gebildet werden kann (und dann ist es notwendigerweise der aus Fallback)<br />
Also</p>
<pre><code class="language-cpp">template&lt;typename C, class = typename std::enable_if&lt;&amp;C::operator()&gt;::type&gt;
    static no test(int);
</code></pre>
<p>ungestet, evtl. Denkfehler drin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2441332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441332</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 05 Feb 2015 13:31:59 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von is_callable on Thu, 05 Feb 2015 14:05:12 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Methodenzeiger können nicht während der Compiletime in <code>bool</code> s konvertiert werden: <a href="http://ideone.com/5nrbIE" rel="nofollow">http://ideone.com/5nrbIE</a><br />
Im Weiteren gab es bei einem ähnlichen Konstrukt ein Problem, falls der Operator nicht eindeutig war (selbe Signatur aus mehreren Basisklassen). Teste ich vll. zuhause dann.</p>
<p>Arcoth schrieb:</p>
<blockquote>
<p>closure types sind Klassen.</p>
</blockquote>
<p>Das wusste ich nicht, danke. Ich wusste bloss, dass der Standard zu Closures nicht sonderlich viel sagt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2441337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441337</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Thu, 05 Feb 2015 14:05:12 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von is_callable on Thu, 05 Feb 2015 13:46:50 GMT]]></title><description><![CDATA[<pre><code>std::is_class&lt;T&gt;::value, // false für unions und unspezifiziert (?) für Lambdas
</code></pre>
<p>closure types sind Klassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2441343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441343</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 05 Feb 2015 13:46:50 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von is_callable on Thu, 05 Feb 2015 14:18:45 GMT]]></title><description><![CDATA[<blockquote>
<p>ungestet, evtl. Denkfehler drin.</p>
</blockquote>
<p>Neben falschem Rueckgabetyp ein peinlicher Fluechtigkeitsfehler</p>
<p>[temp.arg.nontype]/5 schrieb:</p>
<blockquote>
<p>For a non-type template-parameter of integral or enumeration type, conversions permitted in a converted constant expression (5.19) are applied.</p>
</blockquote>
<p>[expr.const]/3 schrieb:</p>
<blockquote>
<p>A converted constant expression of type <code>T</code> is a literal constant expression, implicitly converted to type <code>T</code> , where the implicit conversion (if any) is permitted in a literal constant expression and the implicit conversion sequence contains only user-defined conversions, lvalue-to-rvalue conversions (4.1), integral promotions (4.5), and integral conversions (4.7) other than narrowing conversions (8.5.4).</p>
</blockquote>
<p>Boolean conversions sind nicht beinhaltet, daher muss da noch ein Cast hin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2441352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441352</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 05 Feb 2015 14:18:45 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von is_callable on Thu, 05 Feb 2015 14:27:40 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<blockquote>
<p>ungestet, evtl. Denkfehler drin.</p>
</blockquote>
<p>Neben falschem Rueckgabetyp ein peinlicher Fluechtigkeitsfehler</p>
</blockquote>
<p>Besonders peinlich ist mir das nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
und wieso falscher Rückgabetyp?</p>
<p>Vergleich != nullptr fände ich and dieser Stelle schöner als einen expliten Cast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2441357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441357</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 05 Feb 2015 14:27:40 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von is_callable on Thu, 05 Feb 2015 14:40:41 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich wusste bloss, dass der Standard zu Closures nicht sonderlich viel sagt.</p>
</blockquote>
<p>Doch, der sagt darueber sogar sehr, sehr viel.</p>
<blockquote>
<p>und wieso falscher Rückgabetyp?</p>
</blockquote>
<p>Warum gibst du &quot;Nein&quot; zurueck wenn die Klasse callable ist?</p>
<p>camper schrieb:</p>
<blockquote>
<p>Besonders peinlich ist mir das nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Scheisse, du bist so cool <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<blockquote>
<p>Vergleich != nullptr fände ich and dieser Stelle schöner als einen expliten Cast.</p>
</blockquote>
<p>Und ich faende ein Klassentemplate sowieso passender, aber</p>
<pre><code>template&lt;typename C, void* = &amp;C::operator()&gt;
static yes test(int);
</code></pre>
<p>geht auch<br />
Edit: Nein, geht natuerlich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2441360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441360</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 05 Feb 2015 14:40:41 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von is_callable on Thu, 05 Feb 2015 14:45:21 GMT]]></title><description><![CDATA[<p>Das kuerzeste ist wahrscheinlich</p>
<pre><code>template&lt;typename C, int = sizeof(&amp;C::operator())&gt;
static yes test(int);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2441368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441368</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 05 Feb 2015 14:45:21 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von is_callable on Thu, 05 Feb 2015 15:21:26 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Warum gibst du &quot;Nein&quot; zurueck wenn die Klasse callable ist?</p>
</blockquote>
<p>Tue ich doch nicht. Ich gebe nein zurück, weil der Memberzeiger &amp;C::operator() formbar ist, was Eindeutigkeit voraussetzt. Die ist nur gegeben, falls der aus Fallback geerbte Operator der Einzige ist, also nichts aus T geerbt wurde. Wurde nichts aus T geerbt, ist T offenbar nicht callable...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2441373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441373</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 05 Feb 2015 15:21:26 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von is_callable on Thu, 05 Feb 2015 15:38:47 GMT]]></title><description><![CDATA[<p>Ah, ich haette vielleicht den Code lesen sollen anstatt anzunehmen dass es nur unnoetiger Boilerplaite ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2441376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441376</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Thu, 05 Feb 2015 15:38:47 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von is_callable on Fri, 06 Feb 2015 15:24:02 GMT]]></title><description><![CDATA[<p>Danke für eure Antworten un euer Interesse.</p>
<p>Der Hinweis zu dem Methodenzeiger und R-Value war hilfreich :).<br />
Für unions habt ihr natürlich recht, man vergisst doch immer wieder einen Randfall ;). Allerdings können unions keine Basisklasse aufweisen. Da müsste man sich etwas anderes ausdenken.</p>
<p>Ich würde gerne noch auf diese Variante zu sprechen kommen, wo wahrscheinlich bei mir ein Denkfehler liegt.</p>
<pre><code>template&lt;typename C, class R = typename std::conditional&lt;std::is_same&lt;void(Fallback::*)(), decltype(&amp;C::operator())&gt;::value, no, yes &gt;::type&gt;
    static R test(...);
</code></pre>
<p>Warum ist das nicht möglich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2441557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441557</guid><dc:creator><![CDATA[Mark2015]]></dc:creator><pubDate>Fri, 06 Feb 2015 15:24:02 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von is_callable on Fri, 06 Feb 2015 15:37:41 GMT]]></title><description><![CDATA[<p>Na weil, falls die Klasse die der Templateparameter bezeichnet einen `operator()` hat, der Ausdruck <code>&amp;C::operator()</code> ill-formed ist (weil dann mehrere operator()s in Derives Scope sind). Genau dass ist ja der Trick, und deswegen ueberlaedt man mit SFINAE.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2441558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441558</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 06 Feb 2015 15:37:41 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von is_callable on Fri, 06 Feb 2015 15:38:54 GMT]]></title><description><![CDATA[<p>Mark2015 schrieb:</p>
<blockquote>
<p>Ich würde gerne noch auf diese Variante zu sprechen kommen, wo wahrscheinlich bei mir ein Denkfehler liegt.</p>
<pre><code>template&lt;typename C, class R = typename std::conditional&lt;std::is_same&lt;void(Fallback::*)(), decltype(&amp;C::operator())&gt;::value, no, yes &gt;::type&gt;
    static R test(...);
</code></pre>
<p>Warum ist das nicht möglich?</p>
</blockquote>
<p>Weil der is_same-Test nicht das testet, worauf es ankommt. Eigentlich habe ich das schon weiter oben beantwortet.</p>
<p>Nebenbei: als ich den Code das Erste mal gelesen hatte, musste ich erst mal nachschlagen, wieso der funktioniert. War mir nicht bewusst, dass der Typ von &amp;C::member tatsächlich irgendein<br />
T B::* ist, falls member aus B geerbt wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2441559</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441559</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 06 Feb 2015 15:38:54 GMT</pubDate></item><item><title><![CDATA[Reply to Implementierung von is_callable on Fri, 06 Feb 2015 15:56:04 GMT]]></title><description><![CDATA[<p>Alles klar, mein Denkfehler wird mir jetzt klar. Ich hatte fälschlicherweise angenommen, dass wie in manch anderer Sprache implizit die Mehrdeutigkeit aufgelöst wird für Operatoren. Mir war zwar bewusst, dass dies für Funktionen gilt, jedoch nicht, dass dies auch für Operatoren gilt. Eine Art die Mehrdeutigkeit aufzulösen, ist die Basisklassen zu ordnen, sodass die erste Klasse bei Mehrdeutigkeit die höchste Priorität hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2441562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2441562</guid><dc:creator><![CDATA[Mark2015]]></dc:creator><pubDate>Fri, 06 Feb 2015 15:56:04 GMT</pubDate></item></channel></rss>