<?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[Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte eine Methode schreiben, die alle Elemente eines Int Arrays zusammenzählt. Dazu wollte ich einfach das Array übergeben, und jedes Element auf eine counter Variable addieren.</p>
<p>Verwendet habe ich dafür eine For schleife ohne Index</p>
<pre><code>int count(int myarray[]){
        int counter=0;
	//int size = sizeof(myarray)/sizeof(myarray[0]);
	for(int i : myarray){
                counter+=i;
		}

	return counter;
	}
</code></pre>
<p>im Schleifenkopf bekomme ich die schöne Meldung</p>
<p>Error:diese bereichsbasierte &quot;For&quot; Anweisung erfordert eine geeignete begin-Funktion, die jedoch nicht gefunden wurde</p>
<p>Warum kann ich diese Schleifenvariante hier nicht verwenden?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/317130/java-umsteiger-benötigt-hilfe-bei-quot-for-each-quot-schleife</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Jul 2026 01:19:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317130.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 May 2013 15:59:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Tue, 28 May 2013 15:59:05 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte eine Methode schreiben, die alle Elemente eines Int Arrays zusammenzählt. Dazu wollte ich einfach das Array übergeben, und jedes Element auf eine counter Variable addieren.</p>
<p>Verwendet habe ich dafür eine For schleife ohne Index</p>
<pre><code>int count(int myarray[]){
        int counter=0;
	//int size = sizeof(myarray)/sizeof(myarray[0]);
	for(int i : myarray){
                counter+=i;
		}

	return counter;
	}
</code></pre>
<p>im Schleifenkopf bekomme ich die schöne Meldung</p>
<p>Error:diese bereichsbasierte &quot;For&quot; Anweisung erfordert eine geeignete begin-Funktion, die jedoch nicht gefunden wurde</p>
<p>Warum kann ich diese Schleifenvariante hier nicht verwenden?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2326850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326850</guid><dc:creator><![CDATA[Robokopp]]></dc:creator><pubDate>Tue, 28 May 2013 15:59:05 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Tue, 28 May 2013 16:11:40 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int myarray[]
</code></pre>
<p>ist in Wirklichkeit sowas:</p>
<pre><code class="language-cpp">int* myarray
</code></pre>
<p>D.h. du hast ein rohes Array, dessen Laenge zu diesem Zeitpunkt unbekannt ist.<br />
Loesung:<br />
a) Laenge uebergeben<br />
b) Container von C++ wie std::vector&lt;int&gt; nutzen</p>
<p>Auch folgendes wird nicht funktionieren:</p>
<pre><code class="language-cpp">int size = sizeof(myarray)/sizeof(myarray[0]);
</code></pre>
<p><code>myarray</code> ist ein Pointer und ist entweder 64 oder 32 Bit gross (4 oder 8 Byte).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2326853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326853</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 28 May 2013 16:11:40 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Tue, 28 May 2013 16:41:52 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Loesung:<br />
a) Laenge uebergeben<br />
b) Container von C++ wie std::vector&lt;int&gt; nutzen</p>
</blockquote>
<p>c) Iteratoren benutzen, das klappt immer und universell mit allen Arten von Containern<br />
d) std::accumulate :p (aber nur wenn es bloß um das Funktionieren geht, nicht um das Lernen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2326857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326857</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 28 May 2013 16:41:52 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Tue, 28 May 2013 17:13:52 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int myarray[]
</code></pre>
<p>ist in Wirklichkeit sowas:</p>
<pre><code class="language-cpp">int* myarray
</code></pre>
</blockquote>
<p><strong>Stopp mal!</strong> Wenn ich das sage, gehen alle auf mich los, aber wenn er das sagt ist das in Ordnung?!<br />
Edit: Ups, es geht ja um dieses Konstrukt mit dem leeren Klammerpaar, das ist was anderes. Bin schon still.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2326864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326864</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 28 May 2013 17:13:52 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Tue, 28 May 2013 18:07:31 GMT]]></title><description><![CDATA[<p>Sone, ob das Klammerpaar <em>in diesem Kontext</em> leer ist oder eine Ganzzahlkonstante enhält, spielt überhaupt keine Rolle.</p>
<p><a href="http://c-faq.com/aryptr/aryparmsize.html" rel="nofollow">http://c-faq.com/aryptr/aryparmsize.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2326876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326876</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 28 May 2013 18:07:31 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Tue, 28 May 2013 18:07:02 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Ups, es geht ja um dieses Konstrukt mit dem leeren Klammerpaar, das ist was anderes.</p>
</blockquote>
<p>Es geht um die Deklaration eines Funktionsparameters.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2326878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326878</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 28 May 2013 18:07:02 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Tue, 28 May 2013 18:12:17 GMT]]></title><description><![CDATA[<p>Ist mir klar, dass es um Funktionsparameter geht. Wo sonst (außer bei List-Initialisierung) kann wohl das Klammerpaar leer sein? (Und ja, mir ist auch klar dass es bei Funktionsparametern keine Rolle spielt)<br />
Edit: Naja, streng genommen natürlich bei <em>parameter-declaration</em>s.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2326879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326879</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 28 May 2013 18:12:17 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Tue, 28 May 2013 18:22:39 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Wo sonst (außer bei List-Initialisierung) kann wohl das Klammerpaar leer sein?</p>
</blockquote>
<pre><code class="language-cpp">extern char data[];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2326885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326885</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 28 May 2013 18:22:39 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Tue, 28 May 2013 18:49:05 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<pre><code class="language-cpp">extern char data[];
</code></pre>
</blockquote>
<p>Oh? Was soll das sein? Und was bestimmt <code>sizeof(data)</code> ? Wird dann <code>data</code> auch ein Zeiger?<br />
Kannte ich gar nicht. Sieht komisch aus.</p>
<p>Edit:</p>
<blockquote>
<p>Furthermore, if there is a preceding declaration<br />
of the entity in the same scope in which the bound was specified, an omitted array bound is taken to be the<br />
same as in that earlier declaration, and similarly for the definition of a static data member of a class.</p>
</blockquote>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2326891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326891</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 28 May 2013 18:49:05 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Tue, 28 May 2013 19:05:27 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<pre><code class="language-cpp">extern char data[];
</code></pre>
</blockquote>
<p>Oh? Was soll das sein? Und was bestimmt <code>sizeof(data)</code> ? Wird dann <code>data</code> auch ein Zeiger?<br />
Kannte ich gar nicht. Sieht komisch aus.</p>
</blockquote>
<p>Das ist ein Array mit unbestimmter Größe. Der Typ ist unvollständig (folglich kann sizeof darauf nicht angewendet werden).<br />
Über</p>
<pre><code class="language-cpp">struct foo;
extern foo bar;
</code></pre>
<p>wunderst du dich doch auch nicht?<br />
oder wenn das extern stöhrt:</p>
<pre><code class="language-cpp">struct foo
{
    static char some_data[];
    static foo proto;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2326897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326897</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 28 May 2013 19:05:27 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Tue, 28 May 2013 19:26:25 GMT]]></title><description><![CDATA[<pre><code>static char some_data[];
    static foo proto;
</code></pre>
<p>Ne, die kenn' ich schon lang. Auch das andere Beispiel ist bekannt.<br />
Ich hatte da einen Denkfehler. Also war das von mir verlinkte Zitat richtig; die Variable muss noch einmal mit Array-Bounds deklariert werden, um sie dann nutzen zu können. (richtig?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2326901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326901</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 28 May 2013 19:26:25 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Tue, 28 May 2013 21:56:38 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<pre><code>static char some_data[];
    static foo proto;
</code></pre>
<p>Ne, die kenn' ich schon lang. Auch das andere Beispiel ist bekannt.<br />
Ich hatte da einen Denkfehler. Also war das von mir verlinkte Zitat richtig; die Variable muss noch einmal mit Array-Bounds deklariert werden, um sie dann nutzen zu können. (richtig?)</p>
</blockquote>
<p>Wie bei anderen Variablen auch müssen Arrays, sofern sie (odr-) benutzt werden im Programm auch definiert werden. Die obigen Codebeispiele sind keine Definitionen.<br />
Die Definition eines Objektes erfordert, dass der Typ des zu definierenden Objektes an dieser Stelle vollständig ist, mit der speziellen Ausnahme, dass im Falle von Arrays auch eine unbestimmte Größe angegeben werden darf, wenn die tatsächliche Größe aus dem Initialisierer bestimmt werden kann.</p>
<p>Die zitierte Aussage ist aus einem anderen Grund wichtig. Im Gegensatz zu dem Fall, das ein Klasseobjekt zunächst mit einer noch nicht vollständigen Klasse deklariert und erst später definiert wird, führt die spätere Definition eines Arrays, dass in der ursprünglichen Deklaration noch unbestimmte Größe hat, dazu, dass sich der Typ des deklarierten Objektes ändert (von Array unbestimmter Größte aus T zu Array mit Größe X aus T). Das würde ohne die zitierte Stelle ill-formed sein (alle Deklarationen eines Objektes im selben Scope müssen schließlich eigentlich den gleichen Typ haben). Das führt dann nat. auch dazu, dass man so ganz unbemerkt die ODR verletzen kann, z.B. wenn das Array für die Bestimmung eines Templateparameters herangezogen wird.</p>
<p>Edit: Beispiel entfernt, war nicht ganz passend.</p>
<p>Das führt mich zu einem weiteren Beispiel:<br />
unique_ptr&lt;T[]&gt; hast du bestimmt auch schon gesehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2326921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326921</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 28 May 2013 21:56:38 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Thu, 12 Jun 2014 00:14:14 GMT]]></title><description><![CDATA[<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2326931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2326931</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 12 Jun 2014 00:14:14 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Wed, 29 May 2013 12:41:56 GMT]]></title><description><![CDATA[<p>Ich dachte, es gibt überhaupt nicht sowas wie einen unvollständigen Array-Typen, sondern nur vollständige mit einer festen Größe. Jetzt weiß ich es besser. Vielen Dank für die Erklärung. <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="👍"
    /><br />
Shame on me -</p>
<p>Swordfish schrieb:</p>
<blockquote>
<p>once again.</p>
</blockquote>
<p>Eine Frage noch - ist dann dieser Array-Typ ohne Größenangabe ein opaker Datentyp? Nein, oder? Man kann es ja ganz gewöhnlich benutzen, nur mit der Ausnahme das man bspw. die Größe nicht bekommen kann da der Typ ja noch nicht bekannt ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327066</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 29 May 2013 12:41:56 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Wed, 29 May 2013 12:51:46 GMT]]></title><description><![CDATA[<p>Das heißt, <code>is_array</code> muss auch eine Spezialisierung für alle solche unvollständigen Array-Typen haben:</p>
<pre><code>template&lt;typename T&gt; struct is_array : std::false_type {};
template&lt;typename T, std::size_t N&gt; struct is_array&lt;T[N]&gt; : std::true_type {};
template&lt;typename T&gt; struct is_array&lt;T[]&gt; : std::true_type {};
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
<p>Edit: Nah, mir fällt gerade ein- die Type-Traits leiten ja einfach von <code>std::integral_constant</code> ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327071</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327071</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 29 May 2013 12:51:46 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Wed, 29 May 2013 14:15:50 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Das heißt, <code>is_array</code> muss auch eine Spezialisierung für alle solche unvollständigen Array-Typen haben:</p>
</blockquote>
<p>genau. Wird aber offensichtlich selten gebraucht.</p>
<p>Habe mal aus dem meinem Archiv einen type printer hevorgekramt (finde Thread nicht mehr, muss irgendwann in 2011 gewesen sein), damit kann man es auch schön demonstrieren:</p>
<pre><code>#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;utility&gt;
#include &lt;type_traits&gt;
#include &lt;boost/mpl/pair.hpp&gt;
#include &lt;boost/mpl/map.hpp&gt;
#include &lt;boost/mpl/at.hpp&gt;
#include &lt;boost/mpl/if.hpp&gt;
#include &lt;boost/mpl/has_key.hpp&gt;
#include &lt;boost/mpl/insert.hpp&gt;

template &lt;char... c&gt; struct literal
{
    static constexpr char str[sizeof...( c ) + 1] = { c... };
    typedef literal type;
};
template &lt;char... c&gt;
constexpr char literal&lt;c...&gt;::str[];

template &lt;typename... s&gt; struct concat
    : concat&lt;typename s::type...&gt; {};
template &lt;char... c1, char... c2, typename... s&gt; struct concat&lt;literal&lt;c1...&gt;,literal&lt;c2...&gt;, s...&gt;
    : concat&lt;literal&lt;c1..., c2...&gt;, s...&gt; {};
template &lt;char... c&gt; struct concat&lt;literal&lt;c...&gt;&gt;
    : literal&lt;c...&gt; {};
template &lt;&gt; struct concat&lt;&gt;
    : literal&lt;&gt; {};

template &lt;std::size_t N, typename L = literal&lt;&gt;&gt; struct N_to_literal
    : N_to_literal&lt;N / 10, concat&lt;literal&lt;('0' + N % 10)&gt;,L&gt;&gt; {};
template &lt;typename L&gt; struct N_to_literal&lt;0, L&gt;
    : L {};
template &lt;&gt; struct N_to_literal&lt;0, literal&lt;&gt;&gt;
    : literal&lt;'0'&gt; {};

typedef boost::mpl::map&lt;
    boost::mpl::pair&lt;void,               literal&lt;'v','o','i','d'&gt;&gt;,
    boost::mpl::pair&lt;char,               literal&lt;'c','h','a','r'&gt;&gt;,
    boost::mpl::pair&lt;signed char,        literal&lt;'s','i','g','n','e','d',' ','c','h','a','r'&gt;&gt;,
    boost::mpl::pair&lt;unsigned char,      literal&lt;'u','n','s','i','g','n','e','d',' ','c','h','a','r'&gt;&gt;,
    boost::mpl::pair&lt;short,              literal&lt;'s','h','o','r','t'&gt;&gt;,
    boost::mpl::pair&lt;unsigned short,     literal&lt;'u','n','s','i','g','n','e','d',' ','s','h','o','r','t'&gt;&gt;,
    boost::mpl::pair&lt;int,                literal&lt;'i','n','t'&gt;&gt;,
    boost::mpl::pair&lt;unsigned,           literal&lt;'u','n','s','i','g','n','e','d'&gt;&gt;,
    boost::mpl::pair&lt;long,               literal&lt;'l','o','n','g'&gt;&gt;,
    boost::mpl::pair&lt;unsigned long,      literal&lt;'u','n','s','i','g','n','e','d',' ','l','o','n','g'&gt;&gt;,
    boost::mpl::pair&lt;long long,          literal&lt;'l','o','n','g',' ','l','o','n','g'&gt;&gt;,
    boost::mpl::pair&lt;unsigned long long, literal&lt;'u','n','s','i','g','n','e','d',' ','l','o','n','g',' ','l','o','n','g'&gt;&gt;,
    boost::mpl::pair&lt;wchar_t,            literal&lt;'w','c','h','a','r','_','t'&gt;&gt;,
    boost::mpl::pair&lt;char16_t,           literal&lt;'c','h','a','r','1','6','_','t'&gt;&gt;,
    boost::mpl::pair&lt;char32_t,           literal&lt;'c','h','a','r','3','2','_','t'&gt;&gt;,
    boost::mpl::pair&lt;float,              literal&lt;'f','l','o','a','t'&gt;&gt;,
    boost::mpl::pair&lt;double,             literal&lt;'d','o','u','b','l','e'&gt;&gt;,
    boost::mpl::pair&lt;long double,        literal&lt;'l','o','n','g',' ','d','o','u','b','l','e'&gt;&gt;,
    boost::mpl::pair&lt;std::nullptr_t,     literal&lt;'s','t','d',':',':','n','u','l','l','p','t','r','_','t'&gt;&gt;&gt; fundamental_types;

template &lt;typename L, typename R, bool b&gt; struct type_name_parts
{
    typedef L left;
    typedef R right;
    static constexpr bool right_last = b;
};

template &lt;typename T, typename M&gt; struct derive_name_parts;

template &lt;typename T, typename M = fundamental_types&gt; struct type_name
    : concat&lt;typename derive_name_parts&lt;T, M&gt;::left, typename derive_name_parts&lt;T, M&gt;::right&gt; {};

template &lt;typename P, typename S&gt; struct derive_left
    : type_name_parts&lt;
        concat&lt;typename P::left, boost::mpl::if_c&lt;P::right_last, literal&lt;'('&gt;, literal&lt;&gt;&gt;, S&gt;,
        concat&lt;boost::mpl::if_c&lt;P::right_last, literal&lt;')'&gt;, literal&lt;&gt;&gt;, typename P::right&gt;,
        false&gt; {};

template &lt;typename P, typename S&gt; struct derive_right
    : type_name_parts&lt;typename P::left, concat&lt;S, typename P::right&gt;, true&gt; {};

template &lt;typename P, typename S&gt; struct mem_fun_suffix
    : type_name_parts&lt;typename P::left, concat&lt;typename P::right, S&gt;, true&gt; {};

template &lt;typename M, typename...&gt; struct pretty_args;
template &lt;typename M&gt; struct pretty_args&lt;M&gt;
    : literal&lt;&gt; {};
template &lt;typename M, typename T&gt; struct pretty_args&lt;M, T&gt;
    : type_name&lt;T, M&gt; {};
template &lt;typename M, typename T, typename... Args&gt; struct pretty_args&lt;M, T, Args...&gt;
    : concat&lt;pretty_args&lt;M, T&gt;,literal&lt;','&gt;, pretty_args&lt;M, Args...&gt;&gt; {};

template &lt;typename T, typename M&gt; struct derive_name_parts
    : type_name_parts&lt;boost::mpl::if_&lt;boost::mpl::has_key&lt;M, T&gt;, boost::mpl::at&lt;M, T&gt;, literal&lt;'u','n','k','n','o','w','n'&gt;&gt;, literal&lt;&gt;, false&gt; {};

template &lt;typename T, typename M&gt; struct derive_name_parts&lt;const T, M&gt;
    : derive_left&lt;derive_name_parts&lt;T, M&gt;, literal&lt;' ','c','o','n','s','t'&gt;&gt; {};
template &lt;typename T, typename M&gt; struct derive_name_parts&lt;volatile T, M&gt;
    : derive_left&lt;derive_name_parts&lt;T, M&gt;, literal&lt;' ','v','o','l','a','t','i','l','e'&gt;&gt; {};
template &lt;typename T, typename M&gt; struct derive_name_parts&lt;const volatile T, M&gt;
    : derive_left&lt;derive_name_parts&lt;T, M&gt;, literal&lt;' ','c','o','n','s','t',' ','v','o','l','a','t','i','l','e'&gt;&gt; {};
template &lt;typename T, typename M&gt; struct derive_name_parts&lt;T*, M&gt;
    : derive_left&lt;derive_name_parts&lt;T, M&gt;, literal&lt;'*'&gt;&gt; {};
template &lt;typename T, typename M&gt; struct derive_name_parts&lt;T&amp;, M&gt;
    : derive_left&lt;derive_name_parts&lt;T, M&gt;, literal&lt;'&amp;'&gt;&gt; {};
template &lt;typename T, typename M&gt; struct derive_name_parts&lt;T&amp;&amp;, M&gt;
    : derive_left&lt;derive_name_parts&lt;T, M&gt;, literal&lt;'&amp;','&amp;'&gt;&gt; {};
template &lt;typename T, typename M, std::size_t N&gt; struct derive_name_parts&lt;T[N], M&gt;
    : derive_right&lt;derive_name_parts&lt;T, M&gt;, concat&lt;literal&lt;'['&gt;,N_to_literal&lt;N&gt;,literal&lt;']'&gt;&gt;&gt; {};
template &lt;typename T, typename M&gt; struct derive_name_parts&lt;T[], M&gt;
    : derive_right&lt;derive_name_parts&lt;T, M&gt;, literal&lt;'[',']'&gt;&gt; {};
template &lt;typename T, typename M, typename... Args&gt; struct derive_name_parts&lt;T(Args...), M&gt;
    : derive_right&lt;derive_name_parts&lt;T, M&gt;, concat&lt;literal&lt;'('&gt;, pretty_args&lt;M, Args...&gt;, literal&lt;')'&gt;&gt;&gt; {};
template &lt;typename T, typename M, typename... Args&gt; struct derive_name_parts&lt;T(Args...) const, M&gt;
    : derive_right&lt;derive_name_parts&lt;T, M&gt;, concat&lt;literal&lt;'('&gt;, pretty_args&lt;M, Args...&gt;, literal&lt;')',' ','c','o','n','s','t'&gt;&gt;&gt; {};
template &lt;typename T, typename M, typename... Args&gt; struct derive_name_parts&lt;T(Args...) volatile, M&gt;
    : derive_right&lt;derive_name_parts&lt;T, M&gt;, concat&lt;literal&lt;'('&gt;, pretty_args&lt;M, Args...&gt;, literal&lt;')',' ','v','o','l','a','t','i','l','e'&gt;&gt;&gt; {};
template &lt;typename T, typename M, typename... Args&gt; struct derive_name_parts&lt;T(Args...) const volatile, M&gt;
    : derive_right&lt;derive_name_parts&lt;T, M&gt;, concat&lt;literal&lt;'('&gt;, pretty_args&lt;M, Args...&gt;, literal&lt;')',' ','c','o','n','s','t',' ','v','o','l','a','t','i','l','e'&gt;&gt;&gt; {};
// again...
template &lt;typename T, typename M, typename... Args&gt; struct derive_name_parts&lt;T(Args...) &amp;, M&gt;
    : derive_right&lt;derive_name_parts&lt;T, M&gt;, concat&lt;literal&lt;'('&gt;, pretty_args&lt;M, Args...&gt;, literal&lt;')',' ','&amp;'&gt;&gt;&gt; {};
template &lt;typename T, typename M, typename... Args&gt; struct derive_name_parts&lt;T(Args...) const &amp;, M&gt;
    : derive_right&lt;derive_name_parts&lt;T, M&gt;, concat&lt;literal&lt;'('&gt;, pretty_args&lt;M, Args...&gt;, literal&lt;')',' ','c','o','n','s','t',' ','&amp;'&gt;&gt;&gt; {};
template &lt;typename T, typename M, typename... Args&gt; struct derive_name_parts&lt;T(Args...) volatile &amp;, M&gt;
    : derive_right&lt;derive_name_parts&lt;T, M&gt;, concat&lt;literal&lt;'('&gt;, pretty_args&lt;M, Args...&gt;, literal&lt;')',' ','v','o','l','a','t','i','l','e',' ','&amp;'&gt;&gt;&gt; {};
template &lt;typename T, typename M, typename... Args&gt; struct derive_name_parts&lt;T(Args...) const volatile &amp;, M&gt;
    : derive_right&lt;derive_name_parts&lt;T, M&gt;, concat&lt;literal&lt;'('&gt;, pretty_args&lt;M, Args...&gt;, literal&lt;')',' ','c','o','n','s','t',' ','v','o','l','a','t','i','l','e',' ','&amp;'&gt;&gt;&gt; {};
// yet again...
template &lt;typename T, typename M, typename... Args&gt; struct derive_name_parts&lt;T(Args...) &amp;&amp;, M&gt;
    : derive_right&lt;derive_name_parts&lt;T, M&gt;, concat&lt;literal&lt;'('&gt;, pretty_args&lt;M, Args...&gt;, literal&lt;')',' ','&amp;','&amp;'&gt;&gt;&gt; {};
template &lt;typename T, typename M, typename... Args&gt; struct derive_name_parts&lt;T(Args...) const &amp;&amp;, M&gt;
    : derive_right&lt;derive_name_parts&lt;T, M&gt;, concat&lt;literal&lt;'('&gt;, pretty_args&lt;M, Args...&gt;, literal&lt;')',' ','c','o','n','s','t',' ','&amp;','&amp;'&gt;&gt;&gt; {};
template &lt;typename T, typename M, typename... Args&gt; struct derive_name_parts&lt;T(Args...) volatile &amp;&amp;, M&gt;
    : derive_right&lt;derive_name_parts&lt;T, M&gt;, concat&lt;literal&lt;'('&gt;, pretty_args&lt;M, Args...&gt;, literal&lt;')',' ','v','o','l','a','t','i','l','e',' ','&amp;','&amp;'&gt;&gt;&gt; {};
template &lt;typename T, typename M, typename... Args&gt; struct derive_name_parts&lt;T(Args...) const volatile &amp;&amp;, M&gt;
    : derive_right&lt;derive_name_parts&lt;T, M&gt;, concat&lt;literal&lt;'('&gt;, pretty_args&lt;M, Args...&gt;, literal&lt;')',' ','c','o','n','s','t',' ','v','o','l','a','t','i','l','e',' ','&amp;','&amp;'&gt;&gt;&gt; {};
//
template &lt;typename T, typename M, typename C&gt; struct derive_name_parts&lt;T C::*, M&gt;
    : derive_left&lt;derive_name_parts&lt;T, M&gt;, concat&lt;literal&lt;' '&gt;, type_name&lt;C, M&gt;, literal&lt;':',':','*'&gt;&gt;&gt; {};

int main()
{
    struct Foo;
    std::cout &lt;&lt; type_name&lt;int&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;int const&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;int*&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;int&amp;&amp;&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;int[]&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;int(void)&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;int(*)[12345]&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;void(int)&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;int&amp;(int*, char)&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;int&amp;(int*, char, int&amp;(*&amp;)(long,long long))&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;Foo&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;int Foo::*&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;int (Foo::*)()&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;int (Foo::*)(int, char)const volatile&gt;::type::str &lt;&lt; '\n';

    typedef boost::mpl::insert&lt;
        boost::mpl::insert&lt;fundamental_types, boost::mpl::pair&lt;Foo, literal&lt;'F','o','o'&gt;&gt;&gt;::type,
        boost::mpl::pair&lt;std::string, literal&lt;':',':','s','t','d',':',':','s','t','r','i','n','g'&gt;&gt;&gt;::type more_types;
    std::cout &lt;&lt; type_name&lt;Foo, more_types&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;int Foo::*, more_types&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;int (Foo::*)(), more_types&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;int (Foo::*)()&amp;, more_types&gt;::type::str &lt;&lt; '\n';
    std::cout &lt;&lt; type_name&lt;std::string (Foo::*)(int, char)const volatile, more_types&gt;::type::str &lt;&lt; '\n';
}
</code></pre>
<p>ideone hat leider kein boost</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327108</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 29 May 2013 14:15:50 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Wed, 29 May 2013 14:25:40 GMT]]></title><description><![CDATA[<p>Das sieht ja geil aus.<br />
Wobei das bei mir nicht kompiliert, offensichtlich hat mein Compiler wohl einen Bug:</p>
<pre><code>C:\Programming\C++\Saves\TEMPS\TEMP.cxx|117|error: wrong number of template arguments (1, should be 2)|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|64|error: provided for 'template&lt;class T, class M&gt; struct derive_name_parts'|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|119|error: wrong number of template arguments (1, should be 2)|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|64|error: provided for 'template&lt;class T, class M&gt; struct derive_name_parts'|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|121|error: wrong number of template arguments (1, should be 2)|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|64|error: provided for 'template&lt;class T, class M&gt; struct derive_name_parts'|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|123|error: wrong number of template arguments (1, should be 2)|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|64|error: provided for 'template&lt;class T, class M&gt; struct derive_name_parts'|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|126|error: wrong number of template arguments (1, should be 2)|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|64|error: provided for 'template&lt;class T, class M&gt; struct derive_name_parts'|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|128|error: wrong number of template arguments (1, should be 2)|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|64|error: provided for 'template&lt;class T, class M&gt; struct derive_name_parts'|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|130|error: wrong number of template arguments (1, should be 2)|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|64|error: provided for 'template&lt;class T, class M&gt; struct derive_name_parts'|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|132|error: wrong number of template arguments (1, should be 2)|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|64|error: provided for 'template&lt;class T, class M&gt; struct derive_name_parts'|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx||In function 'int main()':|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|162|error: template argument 1 is invalid|
C:\Programming\C++\Saves\TEMPS\TEMP.cxx|162|error: '&lt;expression error&gt;::type' has not been declared|
</code></pre>
<p>(MinGW GCC 4.8, Boost 1.53)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327112</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 29 May 2013 14:25:40 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Wed, 29 May 2013 14:30:58 GMT]]></title><description><![CDATA[<p>Btw, hier der Thread <a href="http://www.c-plusplus.net/forum/290867-full" rel="nofollow">http://www.c-plusplus.net/forum/290867-full</a><br />
Ein Gott bleibt ein Gott.</p>
<p>Edit: Ich setz' mich ganz kurz mal ran, und schau, was bei mir rauskommt. Die MPL beherrsche ich leider nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327115</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 29 May 2013 14:30:58 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Wed, 29 May 2013 14:34:33 GMT]]></title><description><![CDATA[<p>Bug. g++ kommt offenbar nicht mit ref-Qualifizierer als Teil des Funktionstyps zurecht. g++-4.8 bringt den selben Fehler, 4.9 alpha bringt nur noch 4 Fehler (in den Zeilen, in denen ein Ref-Qualifizierer aber kein cv-Q. auftritt).<br />
clang schluckt es anstandslos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327118</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 29 May 2013 14:34:33 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Wed, 29 May 2013 14:59:15 GMT]]></title><description><![CDATA[<blockquote>
<p>4.9 alpha bringt nur noch 4 Fehler</p>
</blockquote>
<p>Wo hast du das her?<br />
Edit: Es ist doch noch nicht einmal 4.8.1 raus..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327130</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 29 May 2013 14:59:15 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Wed, 29 May 2013 15:29:32 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Wo hast du das her?</p>
</blockquote>
<p>svn-Snapshots.</p>
<p>Aus Bequemlichkeit verwende ich Gentoos toolchain-Overlay.</p>
<p>Sieht so aus, als ob wir mit C++1y einen neuen <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3639.html" rel="nofollow">Arraytyp</a> (of runtime bound) bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327133</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 29 May 2013 15:29:32 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Wed, 29 May 2013 17:13:15 GMT]]></title><description><![CDATA[<p>Habe mal den boost-Teil entfernt und die problematischen Stellen mit einem #ifdef versehen. So läuft es auch auf <a href="http://ideone.com/Offh0Y" rel="nofollow">ideone</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327169</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 29 May 2013 17:13:15 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Wed, 29 May 2013 17:12:44 GMT]]></title><description><![CDATA[<blockquote>
<p>Das heißt, is_array muss auch eine Spezialisierung für alle solche unvollständigen Array-Typen haben</p>
</blockquote>
<p>Dachte, dass unvollstaendige Typen keine Templateparameter sein koennen ... ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327174</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Wed, 29 May 2013 17:12:44 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Wed, 29 May 2013 17:15:00 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>Das heißt, is_array muss auch eine Spezialisierung für alle solche unvollständigen Array-Typen haben</p>
</blockquote>
<p>Dachte, dass unvollstaendige Typen keine Templateparameter sein koennen ... ?</p>
</blockquote>
<p>Können schon. Nur führt das bei Templates der Standardbibliothek zu undefiniertem verhalten, <em>es sei denn</em>, die betreffende Komponente der Standardbibliothek macht explizit eine Ausnahme. Für (einige) type_traits ist das der Fall.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2327175</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327175</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 29 May 2013 17:15:00 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Wed, 29 May 2013 17:22:11 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>Das heißt, is_array muss auch eine Spezialisierung für alle solche unvollständigen Array-Typen haben</p>
</blockquote>
<p>Dachte, dass unvollstaendige Typen keine Templateparameter sein koennen ... ?</p>
</blockquote>
<p>Das Zitat hab' ich schon vor einer Weile <a href="http://www.c-plusplus.net/forum/316903" rel="nofollow">gepostet</a> - erinnerst du dich?</p>
<p>Sone schrieb:</p>
<blockquote>
<p>JETZT hab ich dich!</p>
<p>[temp.arg.type]/2 schrieb:</p>
<blockquote>
<p>A template type argument may be an incomplete type</p>
</blockquote>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2327181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2327181</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 29 May 2013 17:22:11 GMT</pubDate></item><item><title><![CDATA[Reply to Java Umsteiger benötigt Hilfe bei &amp;quot;For-Each&amp;quot; Schleife on Mon, 03 Jun 2013 19:57:27 GMT]]></title><description><![CDATA[<p>kleines Update: gcc-4.8.1 und ein aktueller 4.9er-Snapshot kommen mit meinem Code ohne Probleme zurecht.<br />
und 4.8 erzeugt auch bessere <a href="http://www.c-plusplus.net/forum/317243-full" rel="nofollow">Fehlermeldungen</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328383</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 03 Jun 2013 19:57:27 GMT</pubDate></item></channel></rss>