<?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[Was sagt der C++ Standard zu toupper]]></title><description><![CDATA[<p>Habe folgendes Testprogramm geschrieben:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;cstring&gt;
#include &lt;iostream&gt;

using namespace std;

bool up_case_comp(const string&amp; s1,const string&amp; s2)
{
	string i1 = s1;
	transform(i1.begin(),i1.end(),i1.begin(), _toupper);
	string i2 = s2;
	transform(i2.begin(),i2.end(),i2.begin(), _toupper);
	return  i1.compare(i2) &lt; 0;
}

int main()
{
	vector&lt;string&gt; theList;
	theList.push_back(&quot;alice&quot;);
	theList.push_back(&quot;Hello&quot;);
	theList.push_back(&quot;below&quot;);
	theList.push_back(&quot;hello&quot;);
        sort(theList.begin(), theList.end(), up_case_comp);
        vector&lt;string&gt;::const_iterator it;
	for(it = theList.begin(); it != theList.end(); it++)
		cout &lt;&lt; *it &lt;&lt; endl;
	return 0;
}
</code></pre>
<p>Output schrieb:</p>
<blockquote>
<p>alice<br />
below<br />
Hello<br />
hello</p>
</blockquote>
<p>wenn ich mit g++ 3.3.5 kompiliere. Soweit so gut.<br />
Kompiliere ich den gleichen Code aber mit MSVC 6.0 erscheint der Output unsortiert. Hmm. <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="😕"
    /><br />
Jetz habe ich in meiner up_case_comp() _toupper mit toupper ersetzt.<br />
Juhuu Output ist sortiert. wahrscheinlich ist _toupper nicht Standardkonform.<br />
Jetzt mache ich den Quercheck und compiliere die Version mit toupper mit g++. Das kompiliert nicht mal. Scheinbar gibt es in den headern von g++ gar keine funktion toupper die zu transform kompatibel ist.</p>
<p>wenn ich eine funktion</p>
<pre><code class="language-cpp">int mytoupper( const int &amp; c ) {
   return toupper(c);
}
</code></pre>
<p>verwende dann funktioniert es wieder.<br />
Bin ich über ein nicht Standardkonformität bei beiden g++ und MSCV6.0 gestolpert ?<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/115533/was-sagt-der-c-standard-zu-toupper</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 10:07:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/115533.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Jul 2005 15:02:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Was sagt der C++ Standard zu toupper on Fri, 15 Jul 2005 15:02:16 GMT]]></title><description><![CDATA[<p>Habe folgendes Testprogramm geschrieben:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;cstring&gt;
#include &lt;iostream&gt;

using namespace std;

bool up_case_comp(const string&amp; s1,const string&amp; s2)
{
	string i1 = s1;
	transform(i1.begin(),i1.end(),i1.begin(), _toupper);
	string i2 = s2;
	transform(i2.begin(),i2.end(),i2.begin(), _toupper);
	return  i1.compare(i2) &lt; 0;
}

int main()
{
	vector&lt;string&gt; theList;
	theList.push_back(&quot;alice&quot;);
	theList.push_back(&quot;Hello&quot;);
	theList.push_back(&quot;below&quot;);
	theList.push_back(&quot;hello&quot;);
        sort(theList.begin(), theList.end(), up_case_comp);
        vector&lt;string&gt;::const_iterator it;
	for(it = theList.begin(); it != theList.end(); it++)
		cout &lt;&lt; *it &lt;&lt; endl;
	return 0;
}
</code></pre>
<p>Output schrieb:</p>
<blockquote>
<p>alice<br />
below<br />
Hello<br />
hello</p>
</blockquote>
<p>wenn ich mit g++ 3.3.5 kompiliere. Soweit so gut.<br />
Kompiliere ich den gleichen Code aber mit MSVC 6.0 erscheint der Output unsortiert. Hmm. <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="😕"
    /><br />
Jetz habe ich in meiner up_case_comp() _toupper mit toupper ersetzt.<br />
Juhuu Output ist sortiert. wahrscheinlich ist _toupper nicht Standardkonform.<br />
Jetzt mache ich den Quercheck und compiliere die Version mit toupper mit g++. Das kompiliert nicht mal. Scheinbar gibt es in den headern von g++ gar keine funktion toupper die zu transform kompatibel ist.</p>
<p>wenn ich eine funktion</p>
<pre><code class="language-cpp">int mytoupper( const int &amp; c ) {
   return toupper(c);
}
</code></pre>
<p>verwende dann funktioniert es wieder.<br />
Bin ich über ein nicht Standardkonformität bei beiden g++ und MSCV6.0 gestolpert ?<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/831833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/831833</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Fri, 15 Jul 2005 15:02:16 GMT</pubDate></item><item><title><![CDATA[Reply to Was sagt der C++ Standard zu toupper on Fri, 15 Jul 2005 15:07:13 GMT]]></title><description><![CDATA[<p>toupper ist standardkonform, _toupper nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/831838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/831838</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 15 Jul 2005 15:07:13 GMT</pubDate></item><item><title><![CDATA[Reply to Was sagt der C++ Standard zu toupper on Fri, 15 Jul 2005 15:24:19 GMT]]></title><description><![CDATA[<p>waren nicht alle Bezeichner mit _ oder __ Compilerabhänig ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/831843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/831843</guid><dc:creator><![CDATA[DEvent]]></dc:creator><pubDate>Fri, 15 Jul 2005 15:24:19 GMT</pubDate></item><item><title><![CDATA[Reply to Was sagt der C++ Standard zu toupper on Fri, 15 Jul 2005 15:27:42 GMT]]></title><description><![CDATA[<p>SeppSchrot schrieb:</p>
<blockquote>
<p>toupper ist standardkonform, _toupper nicht.</p>
</blockquote>
<p>Heisst das jetzt g++ ist der Böse, oder könnte es ein vom Standard nicht geregeltes Implementationsdetail sein dass toupper nicht mit transform kompatibel ist ?<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/831846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/831846</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Fri, 15 Jul 2005 15:27:42 GMT</pubDate></item><item><title><![CDATA[Reply to Was sagt der C++ Standard zu toupper on Fri, 15 Jul 2005 15:29:04 GMT]]></title><description><![CDATA[<p>beim g++ bis 3.4 gab es bei toupper irgend ein Problem. Ich glaub das war als Macro implementiert oder so etwas. Naja, nimm einfach g++ 3.4 oder 4.0 <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/831848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/831848</guid><dc:creator><![CDATA[rüdiger]]></dc:creator><pubDate>Fri, 15 Jul 2005 15:29:04 GMT</pubDate></item><item><title><![CDATA[Reply to Was sagt der C++ Standard zu toupper on Fri, 15 Jul 2005 15:31:35 GMT]]></title><description><![CDATA[<p>kingruedi schrieb:</p>
<blockquote>
<p>beim g++ bis 3.4 gab es bei toupper irgend ein Problem. Ich glaub das war als Macro implementiert oder so etwas. Naja, nimm einfach g++ 3.4 oder 4.0 <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>
</blockquote>
<p>Danke. Jetzt habe ich endlich einen Grund auf 3.4 umzusteigen.<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/831852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/831852</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Fri, 15 Jul 2005 15:31:35 GMT</pubDate></item><item><title><![CDATA[Reply to Was sagt der C++ Standard zu toupper on Fri, 15 Jul 2005 16:18:25 GMT]]></title><description><![CDATA[<blockquote>
<p>Scheinbar gibt es in den headern von g++ gar keine funktion toupper die zu transform kompatibel ist.</p>
</blockquote>
<p>Da irst du dich. transform erwartet keinen festen Typ. Der letzte Parameter ist ein Template-Parameter und wird beim Aufruf passend hergeleitet. Und hier genau ist jetzt das Problem. Im Namespace std gibt es mehr als eine toupper-Funktion. Aus diesem Grund ist:</p>
<pre><code class="language-cpp">transform(i1.begin(),i1.end(),i1.begin(), toupper);
</code></pre>
<p>schlicht mehrdeutig und damit kein gültiges C++.</p>
<p>Die logische Alternative:</p>
<pre><code class="language-cpp">transform(i1.begin(),i1.end(),i1.begin(), static_cast&lt;int (*)(int)&gt;(toupper));
</code></pre>
<p>wiederum ist nicht portabel, da der C++ Standard keine festen Signaturen vorschreibt.</p>
<p>Die standkonforme und portable Lösung ist die Variante mit mytoupper. Wenn du jetzt noch das char &lt;-&gt; unsigned char &lt;-&gt; int Problem (das ich hier jede Woche mindestens einmal erkläre) berücksichtigst, dann wird's am Ende sogar korrekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/831876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/831876</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 15 Jul 2005 16:18:25 GMT</pubDate></item><item><title><![CDATA[Reply to Was sagt der C++ Standard zu toupper on Sat, 16 Jul 2005 07:38:54 GMT]]></title><description><![CDATA[<p>Wenn du es jede Woche min. einmal erklärst, wieso tust du es nicht dann in dein C++ FAQ auf deiner Seite? (Auch wenn ich garnicht weiß, worum es bei dem Problem geht ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/832122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/832122</guid><dc:creator><![CDATA[Brutus]]></dc:creator><pubDate>Sat, 16 Jul 2005 07:38:54 GMT</pubDate></item><item><title><![CDATA[Reply to Was sagt der C++ Standard zu toupper on Sat, 16 Jul 2005 08:31:57 GMT]]></title><description><![CDATA[<p>gute frage <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="🤡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/832132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/832132</guid><dc:creator><![CDATA[full ack]]></dc:creator><pubDate>Sat, 16 Jul 2005 08:31:57 GMT</pubDate></item><item><title><![CDATA[Reply to Was sagt der C++ Standard zu toupper on Sat, 16 Jul 2005 14:02:59 GMT]]></title><description><![CDATA[<p>Brutus schrieb:</p>
<blockquote>
<p>Wenn du es jede Woche min. einmal erklärst, wieso tust du es nicht dann in dein C++ FAQ auf deiner Seite? (Auch wenn ich garnicht weiß, worum es bei dem Problem geht ;))</p>
</blockquote>
<p>Weil mir schlicht kein guter Titel einfällt. Ein Titel wie &quot;Was muss man bei der Benutzung von Character-Classification und -Conversion-Funktionen wie z.B. tolower beachten?&quot; hört sich für den vorbeistreifenden Leser imo etwa so an: Bla Bla Bla, Langweilig, Bla Bla?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/832332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/832332</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Sat, 16 Jul 2005 14:02:59 GMT</pubDate></item><item><title><![CDATA[Reply to Was sagt der C++ Standard zu toupper on Sat, 16 Jul 2005 16:08:13 GMT]]></title><description><![CDATA[<p>Schreib am Anfang</p>
<pre><code class="language-cpp">#include &lt;cctype&gt;
</code></pre>
<p>dazu. Dann gibts auch toupper.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/832404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/832404</guid><dc:creator><![CDATA[0xdeadbeef]]></dc:creator><pubDate>Sat, 16 Jul 2005 16:08:13 GMT</pubDate></item><item><title><![CDATA[Reply to Was sagt der C++ Standard zu toupper on Mon, 24 Dec 2007 09:36:47 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Brutus schrieb:</p>
<blockquote>
<p>Wenn du es jede Woche min. einmal erklärst, wieso tust du es nicht dann in dein C++ FAQ auf deiner Seite? (Auch wenn ich garnicht weiß, worum es bei dem Problem geht ;))</p>
</blockquote>
<p>Weil mir schlicht kein guter Titel einfällt. ...</p>
</blockquote>
<p>Wie wär's den mit</p>
<p>HumeSikkins schrieb:</p>
<blockquote>
<p>...das char &lt;-&gt; unsigned char &lt;-&gt; int Problem...</p>
</blockquote>
<p>? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
evtl. noch &quot;... und toupper/tolower&quot; dahinter ...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1425508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1425508</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 24 Dec 2007 09:36:47 GMT</pubDate></item></channel></rss>