<?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[Warum compiliert das nicht?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe hier gerade mit einem kleinen Template zu tun, bekomme es aber nicht kompiliert:</p>
<pre><code class="language-cpp">enum SelectedSide
{
    LEFT_SIDE,
    RIGHT_SIDE
};

template &lt;bool active&gt;
class Foo
{
public:
    template &lt;SelectedSide side&gt; void bar();
};

template &lt;SelectedSide side&gt;
inline
void Foo&lt;true&gt;::bar() {}

template &lt;SelectedSide side&gt;
inline
void Foo&lt;false&gt;::bar() {}
</code></pre>
<p>Der Compiler(MinGW) sagt:</p>
<blockquote>
<p>error: no 'void Foo&lt;true&gt;::bar()' member function declared in class 'Foo&lt;true&gt;'|<br />
error: no 'void Foo&lt;false&gt;::bar()' member function declared in class 'Foo&lt;false&gt;'|</p>
</blockquote>
<p>Hat auch hier (wie so oft) der Compiler recht, oder seht ihr ein Problem mit der Syntax?</p>
<p>Zum Code: Ich möchte Foo zweimal gemäß &quot;bool active&quot; spezialisieren und jeweils eine Template-Methode &quot;bar&quot; bekommen. Hat das Problem vielleicht mit einer partiellen Template-Spezialisierung zu tun? Ich weiß, dass Funktionen/Methoden das nicht erlauben. Jedoch klingt die Compilermeldung nach etwas anderem.</p>
<p>MfG, ZenJu</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/251515/warum-compiliert-das-nicht</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 11:11:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/251515.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Oct 2009 13:08:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Warum compiliert das nicht? on Tue, 06 Oct 2009 13:08:35 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe hier gerade mit einem kleinen Template zu tun, bekomme es aber nicht kompiliert:</p>
<pre><code class="language-cpp">enum SelectedSide
{
    LEFT_SIDE,
    RIGHT_SIDE
};

template &lt;bool active&gt;
class Foo
{
public:
    template &lt;SelectedSide side&gt; void bar();
};

template &lt;SelectedSide side&gt;
inline
void Foo&lt;true&gt;::bar() {}

template &lt;SelectedSide side&gt;
inline
void Foo&lt;false&gt;::bar() {}
</code></pre>
<p>Der Compiler(MinGW) sagt:</p>
<blockquote>
<p>error: no 'void Foo&lt;true&gt;::bar()' member function declared in class 'Foo&lt;true&gt;'|<br />
error: no 'void Foo&lt;false&gt;::bar()' member function declared in class 'Foo&lt;false&gt;'|</p>
</blockquote>
<p>Hat auch hier (wie so oft) der Compiler recht, oder seht ihr ein Problem mit der Syntax?</p>
<p>Zum Code: Ich möchte Foo zweimal gemäß &quot;bool active&quot; spezialisieren und jeweils eine Template-Methode &quot;bar&quot; bekommen. Hat das Problem vielleicht mit einer partiellen Template-Spezialisierung zu tun? Ich weiß, dass Funktionen/Methoden das nicht erlauben. Jedoch klingt die Compilermeldung nach etwas anderem.</p>
<p>MfG, ZenJu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788689</guid><dc:creator><![CDATA[ZenJu]]></dc:creator><pubDate>Tue, 06 Oct 2009 13:08:35 GMT</pubDate></item><item><title><![CDATA[Reply to Warum compiliert das nicht? on Tue, 06 Oct 2009 13:27:01 GMT]]></title><description><![CDATA[<p>Du definierst ein Membertemplate für eine bestimmte Spezialisierung des Klassentemplates - zweimal template:</p>
<pre><code class="language-cpp">template&lt;&gt;
template &lt;SelectedSide side&gt;
inline
void Foo&lt;true&gt;::bar() {}

template &lt;&gt;
template &lt;SelectedSide side&gt;
inline
void Foo&lt;false&gt;::bar() {}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1788697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788697</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 06 Oct 2009 13:27:01 GMT</pubDate></item><item><title><![CDATA[Reply to Warum compiliert das nicht? on Tue, 06 Oct 2009 13:31:02 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: Klasse! <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="🙂"
    /> Vielen Dank für die schnelle Hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788698</guid><dc:creator><![CDATA[ZenJu]]></dc:creator><pubDate>Tue, 06 Oct 2009 13:31:02 GMT</pubDate></item><item><title><![CDATA[Reply to Warum compiliert das nicht? on Tue, 06 Oct 2009 13:32:07 GMT]]></title><description><![CDATA[<p>das inline kannst du übrigens weglassen, template funktionen/member sind automatisch inline.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788700</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Tue, 06 Oct 2009 13:32:07 GMT</pubDate></item><item><title><![CDATA[Reply to Warum compiliert das nicht? on Tue, 06 Oct 2009 14:19:00 GMT]]></title><description><![CDATA[<blockquote>
<p>das inline kannst du übrigens weglassen, template funktionen/member sind automatisch inline.</p>
</blockquote>
<p>Gilt das allgemein oder nur für gewisse Compiler? Ich würde da gerne sicher sein, bevor ich das inline weglasse. Konnte mit Google leider keine eindeutige Aussage diesbezüglich finden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788745</guid><dc:creator><![CDATA[ZenJu]]></dc:creator><pubDate>Tue, 06 Oct 2009 14:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to Warum compiliert das nicht? on Tue, 06 Oct 2009 14:22:23 GMT]]></title><description><![CDATA[<p>Inline ist allgemein nur ein Hinweis an den Compiler, den er nicht notwendigerweise befolgen muss. Auf der anderen Seite kann er unter bestimmten Umständen durchaus auch Funktionen inlinen, die nicht als inline gekennzeichnet sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788749</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 06 Oct 2009 14:22:23 GMT</pubDate></item><item><title><![CDATA[Reply to Warum compiliert das nicht? on Tue, 06 Oct 2009 14:40:43 GMT]]></title><description><![CDATA[<p>rüdiger schrieb:</p>
<blockquote>
<p>das inline kannst du übrigens weglassen, template funktionen/member sind automatisch inline.</p>
</blockquote>
<p>Ich glaube nicht. Kapitel und Absatz bitte. Man kann inline hier weglassen, aber nicht etwa, weil Foo&lt;..&gt;::bar inline wäre.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788756</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 06 Oct 2009 14:40:43 GMT</pubDate></item><item><title><![CDATA[Reply to Warum compiliert das nicht? on Tue, 06 Oct 2009 17:02:10 GMT]]></title><description><![CDATA[<p>Ich denke mal rüdiger spricht auf 9.3/2 an und den Umstand, dass template Funktionen oftmals direkt in der Klassendefinition definiert werden, wo sie dann automatisch inline wären. Aber dass templates per se inline sind kann ich auch nirgends finden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788823</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 06 Oct 2009 17:02:10 GMT</pubDate></item><item><title><![CDATA[Reply to Warum compiliert das nicht? on Tue, 06 Oct 2009 22:11:38 GMT]]></title><description><![CDATA[<p>und ich denke dass camper sich auf aufweichung der ODR für nicht-vollständig-spezialisierte templates bezieht.</p>
<p>sie sind also nicht &quot;de juris&quot; automatisch inline, aber &quot;de facto&quot;. mit anderen worten: es kommt (bei compilern die auf &quot;inline&quot; als &quot;tip&quot; nicht achten) auf das selbe raus.</p>
<p>ich denke auch dass rüdiger diese aufweichung der ODR fälschlicherweise als &quot;automatisch inline&quot; versteht.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: gibt es einen fall, wo die unterscheidung relevant wäre?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788953</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 06 Oct 2009 22:11:38 GMT</pubDate></item><item><title><![CDATA[Reply to Warum compiliert das nicht? on Tue, 06 Oct 2009 22:16:48 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Ich denke mal rüdiger spricht auf 9.3/2 an und den Umstand, dass template Funktionen oftmals direkt in der Klassendefinition definiert werden, wo sie dann automatisch inline wären. Aber dass templates per se inline sind kann ich auch nirgends finden.</p>
</blockquote>
<p>aber damit sind sie ja per se inline-kanidaten - was das inline sinnlos macht - noch dazu, da templates ja nicht ggn die ODR-regel verstoßen können...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788956</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 06 Oct 2009 22:16:48 GMT</pubDate></item><item><title><![CDATA[Reply to Warum compiliert das nicht? on Wed, 07 Oct 2009 06:03:35 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>und ich denke dass camper sich auf aufweichung der ODR für nicht-vollständig-spezialisierte templates bezieht.</p>
</blockquote>
<p>Funktionstemplates sind keine Funktionen. Inline-Funktionen dagegen schon, die Besonderheit ist bei diesen zu suchen, da ein Unterschied zu nicht-inline Funktionen besteht.</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: gibt es einen fall, wo die unterscheidung relevant wäre?</p>
</blockquote>
<p>... so etwas?</p>
<pre><code class="language-cpp">// ÜE 1
inline void foo() { ... }
template &lt;typename&gt; void bar() { ... }
template bar&lt;int&gt;;

// ÜE 2
inline void foo();
template &lt;typename&gt; void bar();

void fun()
{
    foo(); // ODR verletzt
    bar&lt;int&gt;(); // ok
}
</code></pre>
<p>ist praktisch kaum relevant, weil kein Grund besteht, foo in ÜE2 inline zu deklarieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1788991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1788991</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 07 Oct 2009 06:03:35 GMT</pubDate></item></channel></rss>