<?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[[gelöst] In Abhaenigkeit von der Reihenfolge von Definitionen entweder Kompilerfehler oder eben nicht, Wieso?]]></title><description><![CDATA[<p>Hi Forum,</p>
<p>ich habe was ganz Kurioses. Der Quellcode</p>
<pre><code class="language-cpp">struct foo{
    enum _bar_{bar};
};

template&lt;typename t&gt;
void foo(){}

int main(int argc, char** argv)
{
    foo::bar;
    foo&lt;void&gt;();
    return 0;
}
</code></pre>
<p>bringt beim compilieren mit Visual C++ 2008 Express Edition folgenden Fehler</p>
<pre><code>main.cpp(6) : error C2904: 'foo': Name wird bereits für eine Vorlage im aktuellen Bereich verwendet
        main.cpp(1): Siehe Deklaration von 'foo'
</code></pre>
<p>und ein g++ in Version 4.2.1 bringt ebenfalls einen Fehler.</p>
<pre><code>main.cpp: In function ‘int main(int, char**)’:
main.cpp:10: error: ‘foo’ is not a class or namespace
</code></pre>
<p>Wenn ich jedoch die <em>struct foo</em> nach dem Template definiere wird der Code von beiden Compilern anstandslos übersetzt.</p>
<p>Wenn ich den Code mit einem g++ in Version &gt; 4.4 teste, ist es die Reihenfolge hingegen egal und es wird immer ohne Beanstandungen übersetzt (vielleicht geht auch schon g++ ab Version 4.3, aber ich habe momentan keinen zur Hand um zu testen).</p>
<p>Die Frage die sich aus dem Beispiel ergibt ist: Was sagt der Standard dazu?</p>
<p>Wenn die Reihenfolge keine Rolle spielen sollte, würde ich dann mal annehmen, dass Visual C++ und ältere g++ hier nicht ganz konform sind.<br />
Sehe ich dies richtig?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/250726/gelöst-in-abhaenigkeit-von-der-reihenfolge-von-definitionen-entweder-kompilerfehler-oder-eben-nicht-wieso</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 21:44:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/250726.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Sep 2009 08:02:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [gelöst] In Abhaenigkeit von der Reihenfolge von Definitionen entweder Kompilerfehler oder eben nicht, Wieso? on Wed, 23 Sep 2009 12:31:00 GMT]]></title><description><![CDATA[<p>Hi Forum,</p>
<p>ich habe was ganz Kurioses. Der Quellcode</p>
<pre><code class="language-cpp">struct foo{
    enum _bar_{bar};
};

template&lt;typename t&gt;
void foo(){}

int main(int argc, char** argv)
{
    foo::bar;
    foo&lt;void&gt;();
    return 0;
}
</code></pre>
<p>bringt beim compilieren mit Visual C++ 2008 Express Edition folgenden Fehler</p>
<pre><code>main.cpp(6) : error C2904: 'foo': Name wird bereits für eine Vorlage im aktuellen Bereich verwendet
        main.cpp(1): Siehe Deklaration von 'foo'
</code></pre>
<p>und ein g++ in Version 4.2.1 bringt ebenfalls einen Fehler.</p>
<pre><code>main.cpp: In function ‘int main(int, char**)’:
main.cpp:10: error: ‘foo’ is not a class or namespace
</code></pre>
<p>Wenn ich jedoch die <em>struct foo</em> nach dem Template definiere wird der Code von beiden Compilern anstandslos übersetzt.</p>
<p>Wenn ich den Code mit einem g++ in Version &gt; 4.4 teste, ist es die Reihenfolge hingegen egal und es wird immer ohne Beanstandungen übersetzt (vielleicht geht auch schon g++ ab Version 4.3, aber ich habe momentan keinen zur Hand um zu testen).</p>
<p>Die Frage die sich aus dem Beispiel ergibt ist: Was sagt der Standard dazu?</p>
<p>Wenn die Reihenfolge keine Rolle spielen sollte, würde ich dann mal annehmen, dass Visual C++ und ältere g++ hier nicht ganz konform sind.<br />
Sehe ich dies richtig?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1782891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782891</guid><dc:creator><![CDATA[mysterio]]></dc:creator><pubDate>Wed, 23 Sep 2009 12:31:00 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] In Abhaenigkeit von der Reihenfolge von Definitionen entweder Kompilerfehler oder eben nicht, Wieso? on Wed, 23 Sep 2009 10:35:48 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Hat wirklich keiner eine Idee?</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1782982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782982</guid><dc:creator><![CDATA[mysterio]]></dc:creator><pubDate>Wed, 23 Sep 2009 10:35:48 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] In Abhaenigkeit von der Reihenfolge von Definitionen entweder Kompilerfehler oder eben nicht, Wieso? on Wed, 23 Sep 2009 10:46:10 GMT]]></title><description><![CDATA[<p>du kannst nicht auf jede Frage innerhalb von gut zwei Stunden eine Antwort erwarten - vor allem nicht mittags wo viele Leute anderes zu tun haben als im Forum zu lesen (z.B. arbeiten, essen,...)<br />
Also Geduld <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1782986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782986</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 23 Sep 2009 10:46:10 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] In Abhaenigkeit von der Reihenfolge von Definitionen entweder Kompilerfehler oder eben nicht, Wieso? on Wed, 23 Sep 2009 11:12:10 GMT]]></title><description><![CDATA[<p>mysterio schrieb:</p>
<blockquote>
<p>Die Frage die sich aus dem Beispiel ergibt ist: Was sagt der Standard dazu?</p>
</blockquote>
<p>ill-formed unabhängig von der Reihenfolge.</p>
<blockquote>
<p>14./5<br />
...<br />
Except that a function template can be overloaded either by (non-template) functions with the same name or by other function templates with the same name (14.8.3), a template name declared in namespace scope or in class scope shall be unique in that scope.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1782994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782994</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 23 Sep 2009 11:12:10 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] In Abhaenigkeit von der Reihenfolge von Definitionen entweder Kompilerfehler oder eben nicht, Wieso? on Wed, 23 Sep 2009 11:25:52 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a>: Ja, Du hast recht, aber sonst waren bei vielen Fragen die Antworten recht schnell da, oder zumindest eine Reaktion. Aber ich denke die Ungeduld kennt jeder, aber sorry dafür.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: Sollte also eindeutig sein. Mir ist dennoch nicht klar, warum der Code dann nicht immer zurückgewiesen wird. Warum spielt hier die Reihenfolge eine Rolle? Schließlich wird es durch das Tauschen ja auch nicht eindeutig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1782998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782998</guid><dc:creator><![CDATA[mysterio]]></dc:creator><pubDate>Wed, 23 Sep 2009 11:25:52 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] In Abhaenigkeit von der Reihenfolge von Definitionen entweder Kompilerfehler oder eben nicht, Wieso? on Wed, 23 Sep 2009 11:28:23 GMT]]></title><description><![CDATA[<p>mysterio schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a>: Sollte also eindeutig sein. Mir ist dennoch nicht klar, warum der Code dann nicht immer zurückgewiesen wird. Warum spielt hier die Reihenfolge eine Rolle? Schließlich wird es durch das Tauschen ja auch nicht eindeutig.</p>
</blockquote>
<p>Sieh das einfach als eine nette Geste, als ein Feature des einen oder anderen Compilers an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1783006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1783006</guid><dc:creator><![CDATA[not a bug, a feature]]></dc:creator><pubDate>Wed, 23 Sep 2009 11:28:23 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] In Abhaenigkeit von der Reihenfolge von Definitionen entweder Kompilerfehler oder eben nicht, Wieso? on Wed, 23 Sep 2009 12:30:12 GMT]]></title><description><![CDATA[<p>Ja wahrscheinlich hast Du recht. Ich sollte mich also auf jeden Fall nicht darauf verlassen.</p>
<p>Dank an alle für eure schnelle Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1783041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1783041</guid><dc:creator><![CDATA[mysterio]]></dc:creator><pubDate>Wed, 23 Sep 2009 12:30:12 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] In Abhaenigkeit von der Reihenfolge von Definitionen entweder Kompilerfehler oder eben nicht, Wieso? on Wed, 23 Sep 2009 14:06:24 GMT]]></title><description><![CDATA[<p>not a bug, a feature schrieb:</p>
<blockquote>
<p>Sieh das einfach als eine nette Geste, als ein Feature des einen oder anderen Compilers an.</p>
</blockquote>
<p>Ich würde es nicht als ein Feature betrachten, wenn etwas, was nach dem Standard schlichtweg falsch ist, durchgeht. Ein Feature wäre zusätzliche Funktionalität, die im Standard nicht drin steht. Hier handelt es sich um eine fehlende Erkennung von fehlerhaftem Code, der vom Standard nicht ohne Grund als fehlerhaft definiert wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1783077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1783077</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 23 Sep 2009 14:06:24 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] In Abhaenigkeit von der Reihenfolge von Definitionen entweder Kompilerfehler oder eben nicht, Wieso? on Wed, 23 Sep 2009 16:01:21 GMT]]></title><description><![CDATA[<p>Ich sehe da weder einen class-scope noch einen namespace-scope.<br />
Hier ist es z.B. auch ok:<br />
<a href="http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/com.ibm.xlcpp101.cell.doc/language_ref/overloading_function_templates.html" rel="nofollow">http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/com.ibm.xlcpp101.cell.doc/language_ref/overloading_function_templates.html</a><br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1783141</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1783141</guid><dc:creator><![CDATA[not a bug, a feature]]></dc:creator><pubDate>Wed, 23 Sep 2009 16:01:21 GMT</pubDate></item><item><title><![CDATA[Reply to [gelöst] In Abhaenigkeit von der Reihenfolge von Definitionen entweder Kompilerfehler oder eben nicht, Wieso? on Wed, 23 Sep 2009 16:07:38 GMT]]></title><description><![CDATA[<p>[quote=&quot;not a bug, a feature&quot;]Ich sehe da weder einen class-scope noch einen namespace-scope.[quote] nennt sich auch global namescape...</p>
<blockquote>
<p>Hier ist es z.B. auch ok:<br />
<a href="http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/com.ibm.xlcpp101.cell.doc/language_ref/overloading_function_templates.html" rel="nofollow">http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/com.ibm.xlcpp101.cell.doc/language_ref/overloading_function_templates.html</a><br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Da drehts sich um Überladung von funktionstemplates. Wo wir beim ersten Teil des von Camper zitierten Satzes sind, nämlich dem, wo die Ausnahmen angegeben werden, bei denen das tehrfache Vorkommen eines Templatenamens erlaubt ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1783146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1783146</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 23 Sep 2009 16:07:38 GMT</pubDate></item></channel></rss>