<?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[Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse)]]></title><description><![CDATA[<p>Geht darum, dass ich eine Klasse &quot;Room&quot; habe. Die swap-Funktion muss als friend deklariert sein. Allerdings benutzt die STL std::swap und kommt an meinen Namespace bzw. eine Swap-Funktion ohne NameSpace nicht dran. Durch ausprobieren geht es zwar unter G++4.7, c++11, aber ist es auch überall definiert?</p>
<pre><code class="language-cpp">// ohne Namespace
namespace std
{
    template&lt;&gt; void swap(Room&amp; rhs, Room&amp; lhs)
    {
        swap(rhs, lhs);
    }
}

// mit Namespace
namespace std
{
    template&lt;&gt; void swap(Room&amp; rhs, Room&amp; lhs)
    {
        MySpace::swap(rhs, lhs);
    }
}
</code></pre>
<p>Der Effekt sollte klar sein, die std::swap Funktion ruft die standard-swapfunktion auf</p>
<p>Wenn es definiert ist, ist der Compiler so gut, die Funktion zu inlinen? Als Inline deklarieren wird ja nicht gehen, da dies ja nur eine Templatespezialisierung ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/306796/ist-dieser-code-standard-c-std-swap-überladung-als-friend-einer-klasse</link><generator>RSS for Node</generator><lastBuildDate>Fri, 07 Aug 2026 08:33:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/306796.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 07 Aug 2012 16:55:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Tue, 07 Aug 2012 16:55:13 GMT]]></title><description><![CDATA[<p>Geht darum, dass ich eine Klasse &quot;Room&quot; habe. Die swap-Funktion muss als friend deklariert sein. Allerdings benutzt die STL std::swap und kommt an meinen Namespace bzw. eine Swap-Funktion ohne NameSpace nicht dran. Durch ausprobieren geht es zwar unter G++4.7, c++11, aber ist es auch überall definiert?</p>
<pre><code class="language-cpp">// ohne Namespace
namespace std
{
    template&lt;&gt; void swap(Room&amp; rhs, Room&amp; lhs)
    {
        swap(rhs, lhs);
    }
}

// mit Namespace
namespace std
{
    template&lt;&gt; void swap(Room&amp; rhs, Room&amp; lhs)
    {
        MySpace::swap(rhs, lhs);
    }
}
</code></pre>
<p>Der Effekt sollte klar sein, die std::swap Funktion ruft die standard-swapfunktion auf</p>
<p>Wenn es definiert ist, ist der Compiler so gut, die Funktion zu inlinen? Als Inline deklarieren wird ja nicht gehen, da dies ja nur eine Templatespezialisierung ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2239750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2239750</guid><dc:creator><![CDATA[Cyres]]></dc:creator><pubDate>Tue, 07 Aug 2012 16:55:13 GMT</pubDate></item><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Tue, 07 Aug 2012 17:09:19 GMT]]></title><description><![CDATA[<p>Das soll vermutlich MySpace::Room sein?</p>
<p>Beide Varianten sollten funktionieren, sofern MySpace::swap als normale Funktion</p>
<pre><code class="language-cpp">void swap(Room&amp; rhs, Room&amp; lhs);
</code></pre>
<p>deklariert wurde. Dann wird sie dem std::swap aus diesem Grund vorgezogen werden. Das ist allerdings recht subtil, ich würde deshalb die qualifizierte Variante vorziehen.</p>
<p>Ansonsten ist wie üblich die ODR zu beachten. Wenn du eine Spezialisierung deklarierst, muss das in jeder Übersetzungseinheit geschehen, die die Spezialisierung benutzt. Und da du vermutlich bei so einer Funktion auch die Funktionsdefinition im Header erledigen wirst, <em>muss</em> diese explizite Spezialisierung inline deklariert werden (die Deklaration einer expliziten Spezialisierung eines Funktionstemplates deklariert eine Funktion, kein Template...).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2239759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2239759</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 07 Aug 2012 17:09:19 GMT</pubDate></item><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Tue, 07 Aug 2012 17:17:06 GMT]]></title><description><![CDATA[<p>Japs, Room liegt in MySpace</p>
<pre><code class="language-cpp">namespace MySpace
{
    class Room
    {
        size_t width_;
        size_t height_;
        Floor** floor_;

    public:
        // ...
        friend void swap(Room&amp;, Room&amp;);
        // ...
    };
}
</code></pre>
<p>Stimmt, was ich übersehen hatte, dass std::swap inline deklariert ist, also muss ich das auch übertragen, macht Sinn.</p>
<p>Danke! <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/2239760</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2239760</guid><dc:creator><![CDATA[Cyres]]></dc:creator><pubDate>Tue, 07 Aug 2012 17:17:06 GMT</pubDate></item><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Tue, 07 Aug 2012 17:29:31 GMT]]></title><description><![CDATA[<p>Cyres schrieb:</p>
<blockquote>
<p>Stimmt, was ich übersehen hatte, dass std::swap inline deklariert ist, also muss ich das auch übertragen, macht Sinn.</p>
</blockquote>
<p>Wenn du damit meinst, dass die Standardbibliothek deines Compilers das primäre Template std::swap inline deklariert: das ist völlig irrelevant.</p>
<p>Deine Spezialisierung muss inline deklariert werden, weil es eine Funktionsdefinition ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2239764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2239764</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 07 Aug 2012 17:29:31 GMT</pubDate></item><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Tue, 07 Aug 2012 17:32:08 GMT]]></title><description><![CDATA[<p>Ah, okay, jetzt hab ichs <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="😃"
    /> Besten Dank <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/2239765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2239765</guid><dc:creator><![CDATA[Cyres]]></dc:creator><pubDate>Tue, 07 Aug 2012 17:32:08 GMT</pubDate></item><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Tue, 07 Aug 2012 18:00:21 GMT]]></title><description><![CDATA[<p>Cyres schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Floor** floor_;
</code></pre>
</blockquote>
<p>&lt;sarkasmus&gt;Ich glaube, da fehlt noch ein Sternchen.&lt;/sarkasmus&gt;<br />
<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/2239774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2239774</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 07 Aug 2012 18:00:21 GMT</pubDate></item><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Tue, 07 Aug 2012 18:06:01 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Cyres schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Floor** floor_;
</code></pre>
</blockquote>
<p>&lt;sarkasmus&gt;Ich glaube, da fehlt noch ein Sternchen.&lt;/sarkasmus&gt;<br />
<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>ogottogottogott, jetzt werden hier krümel gekackt!<br />
bin dann schnell mal weg *regenschirm aufspann*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2239775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2239775</guid><dc:creator><![CDATA[ogott]]></dc:creator><pubDate>Tue, 07 Aug 2012 18:06:01 GMT</pubDate></item><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Tue, 07 Aug 2012 18:42:40 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Cyres schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Floor** floor_;
</code></pre>
</blockquote>
<p>&lt;sarkasmus&gt;Ich glaube, da fehlt noch ein Sternchen.&lt;/sarkasmus&gt;<br />
<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>[sarkasmus]HTML ist hier aber nicht erlaubt ;)[/sarkasmus]<br />
Ja, aber wenn man ein Array in ein Array packt (STL) braucht man keine Pointer und somit swap-Funktion 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>
]]></description><link>https://www.c-plusplus.net/forum/post/2239784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2239784</guid><dc:creator><![CDATA[Cyres]]></dc:creator><pubDate>Tue, 07 Aug 2012 18:42:40 GMT</pubDate></item><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Wed, 08 Aug 2012 07:45:18 GMT]]></title><description><![CDATA[<p>Guten Morgen!</p>
<p>Cyres schrieb:</p>
<blockquote>
<p>Allerdings benutzt die STL std::swap und kommt an meinen Namespace bzw. eine Swap-Funktion ohne NameSpace nicht dran.</p>
</blockquote>
<p>Kannst Du mir bitte mal ein Beispiel nennen, wo das Problem auftritt? Also: wo die STL std::swap() aufruft und nicht einfach swap(), das Deine Version per ADL aufgreift?!<br />
Ich sehe das Problem gerade nicht... <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/2239954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2239954</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 08 Aug 2012 07:45:18 GMT</pubDate></item><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Wed, 08 Aug 2012 09:02:38 GMT]]></title><description><![CDATA[<p>Furble Wurble schrieb:</p>
<blockquote>
<p>Guten Morgen!</p>
<p>Cyres schrieb:</p>
<blockquote>
<p>Allerdings benutzt die STL std::swap und kommt an meinen Namespace bzw. eine Swap-Funktion ohne NameSpace nicht dran.</p>
</blockquote>
<p>Kannst Du mir bitte mal ein Beispiel nennen, wo das Problem auftritt? Also: wo die STL std::swap() aufruft und nicht einfach swap(), das Deine Version per ADL aufgreift?!<br />
Ich sehe das Problem gerade nicht... <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>C++03 kannte noch keine Bedingungen für &quot;Swappable&quot;, jeder Verweis auf swap bezog sich daher auf std::swap und eine Implementation hatte es zu unterlassen, ggf. eine Funktion per ADL auszuwählen.<br />
In C++11 ist das anders. Hier müssen durch die Standardbibliothek immer auch Nonmemberswapfunktionen per ADL berücksichtigt werden (17.6.3.2). Eine Spezialisierung in std ist dann also häufig nicht mehr erforderlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2239969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2239969</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 08 Aug 2012 09:02:38 GMT</pubDate></item><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Wed, 08 Aug 2012 09:40:47 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// ohne Namespace
namespace std
{
    template&lt;&gt; void swap(Room&amp; rhs, Room&amp; lhs)
    {
        swap(rhs, lhs);
    }
}

// mit Namespace
namespace std
{
    template&lt;&gt; void swap(Room&amp; rhs, Room&amp; lhs)
    {
        MySpace::swap(rhs, lhs);
    }
}
</code></pre>
<p>Was scheinbar noch nicht aufgefallen ist: Wenn es sich um MySpace::Room handelt, dann ist für beide definitionen entweder ein geöffneter namespace MySpace oder ein using namespace MySpace nötig. Im ersten Fall würde man MySpace::Std::swap&lt;Room&gt; definieren, was nicht der Absicht entspricht (und außerdem den Compiler veranlassen würde, die Spezialisierung ohne Deklaration des allgemeinen Templates MySpace::swap abzulehnen). Im zweiten Fall hätte man vor/in einen Header eine using-Direktive geschrieben, was böse ist. Also bitte MySpace::Room voll qualifizieren, ohne usings &amp; Co.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2239980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2239980</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 08 Aug 2012 09:40:47 GMT</pubDate></item><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Wed, 08 Aug 2012 09:52:33 GMT]]></title><description><![CDATA[<p>Deshalb meine Frage zuerst. Evtl. sollte der ursprüngliche Beitrag diesbzgl. nochmal edietiert werden, so ist er nämlich nicht so gut verständlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2239984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2239984</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 08 Aug 2012 09:52:33 GMT</pubDate></item><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Wed, 08 Aug 2012 09:59:42 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Furble Wurble schrieb:</p>
<blockquote>
<p>Guten Morgen!</p>
<p>Cyres schrieb:</p>
<blockquote>
<p>Allerdings benutzt die STL std::swap und kommt an meinen Namespace bzw. eine Swap-Funktion ohne NameSpace nicht dran.</p>
</blockquote>
<p>Kannst Du mir bitte mal ein Beispiel nennen, wo das Problem auftritt? Also: wo die STL std::swap() aufruft und nicht einfach swap(), das Deine Version per ADL aufgreift?!<br />
Ich sehe das Problem gerade nicht... <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>C++03 kannte noch keine Bedingungen für &quot;Swappable&quot;, jeder Verweis auf swap bezog sich daher auf std::swap und eine Implementation hatte es zu unterlassen, ggf. eine Funktion per ADL auszuwählen.<br />
In C++11 ist das anders. Hier müssen durch die Standardbibliothek immer auch Nonmemberswapfunktionen per ADL berücksichtigt werden (17.6.3.2). Eine Spezialisierung in std ist dann also häufig nicht mehr erforderlich.</p>
</blockquote>
<p>Es gibt ja eine Überladung von <code>swap()</code> für <code>MySpace::MyRoom&amp;</code> , mir wäre jetzt nicht bekannt, dass c++03, c++11 hin oder her, noch eine Spezialisierung in std:: vonnöten ist. (Darum auch meine Bitte ein Beispiel für das Problem dass die zusätzliche Spezialisierung löst.)</p>
<p>Und warum sollte swap() mit user-defined types in C+03 nicht ADL benutzen? Mir schwant ein Missverständnis.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2239986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2239986</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 08 Aug 2012 09:59:42 GMT</pubDate></item><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Wed, 08 Aug 2012 10:23:40 GMT]]></title><description><![CDATA[<p>Furble Wurble schrieb:</p>
<blockquote>
<p>Und warum sollte swap() mit user-defined types in C+03 nicht ADL benutzen? Mir schwant ein Missverständnis.</p>
</blockquote>
<p>Sofern in deinem Code ein Ausdruck der Form</p>
<pre><code class="language-cpp">swap(foo, bar)
</code></pre>
<p>auftritt, wird natürlich schon immer ADL eingesetzt (sofern nicht sinnloserweise eine ungeeignete swap-Deklaration beim unqualifizierten Lookup gefunden wird).<br />
Die Aussage ist die, dass die Algorithmen der Standardbibliothek, die selbst swap benutzen, in C++03 grundsätzlich nur das in std befindliche swap berücksichtigen dürfen.<br />
Die Logik dahinter ist indirekt:<br />
1. der alte Standard spezifiziert nicht ausdrücklich, das ADL genutzt werden soll,<br />
2. der alte Standard spezifiziert auch keine Beschränkungen/bestimmtes Verhalten für non-member-swap für UDTs,<br />
3. käme ADL zum Einsatz und würde ein Algorithmus der Standardbibliothek eine solche nicht in std befindliche Funktion aufrufen, wäre nicht mehr garantiert (wegen 2.), dass dieser Algorithmus das richtige tut.</p>
<p>Meistens steht ohnehin nicht dabei, dass swap benutzt werden soll; man denke z.B. an std::sort.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2239992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2239992</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 08 Aug 2012 10:23:40 GMT</pubDate></item><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Wed, 08 Aug 2012 11:23:53 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Die Aussage ist die, dass die Algorithmen der Standardbibliothek, die selbst swap benutzen, in C++03 grundsätzlich nur das in std befindliche swap berücksichtigen dürfen.<br />
Die Logik dahinter ist indirekt:<br />
1. der alte Standard spezifiziert nicht ausdrücklich, das ADL genutzt werden soll,<br />
2. der alte Standard spezifiziert auch keine Beschränkungen/bestimmtes Verhalten für non-member-swap für UDTs,<br />
3. käme ADL zum Einsatz und würde ein Algorithmus der Standardbibliothek eine solche nicht in std befindliche Funktion aufrufen, wäre nicht mehr garantiert (wegen 2.), dass dieser Algorithmus das richtige tut.</p>
<p>Meistens steht ohnehin nicht dabei, dass swap benutzt werden soll; man denke z.B. an std::sort.</p>
</blockquote>
<p>Evtl. kann man das aus dem Standard herauslesen, weil nur für std::swap ein Effekt und die Bedingungen aufgeführt sind. Die gesamten spezialisierten swap()s verweisen dann auf std::swap.<br />
Eine Implementierung, die sicher spielen will, sollte also von Überladungen die Finger lassen - kann ja sein, dass swap() nicht gleich swap ist. <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>
<p>Mein gcc 4.6.1 freut sich allerdings ueber die Muehe, die ich mir gemacht habe (kompiliert mit <code>-std=c++03</code> ):</p>
<pre><code class="language-cpp">#include &lt;iterator&gt;
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
#include &lt;cstddef&gt;

namespace Furble{
  struct Wurble{
    int i;
    void swap(Wurble&amp; x) {
      using std::swap;  // bring into scope
      swap(i, x.i);     // use whatever fits best...
      std::cout &lt;&lt; &quot;Furble::Wurble::swap()\n&quot;;
    }
  };
  void swap(Wurble&amp; x, Wurble&amp; y){ x.swap(y); }
  std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const Wurble&amp; w) { return os &lt;&lt; w.i; }
}

template&lt;typename T, std::size_t N&gt;
T* begin(T(&amp;arr)[N]) { return arr; }

template&lt;typename T, std::size_t N&gt;
T* end(T(&amp;arr)[N]) { return arr+N; }

int main(){
  using Furble::Wurble;
  Wurble arr[] = {{1},{2},{3},{4},{5},{6},{7}};
  std::copy(begin(arr), end(arr), std::ostream_iterator&lt;Wurble&gt;(std::cout &lt;&lt; &quot;before:\t&quot;, &quot; &quot;));
  std::cout &lt;&lt; '\n';
  std::reverse(begin(arr), end(arr));
  std::copy(begin(arr), end(arr), std::ostream_iterator&lt;Wurble&gt;(std::cout &lt;&lt; &quot;after:\t&quot;, &quot; &quot;));
  std::cout &lt;&lt; '\n';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2240010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240010</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 08 Aug 2012 11:23:53 GMT</pubDate></item><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Wed, 08 Aug 2012 13:11:45 GMT]]></title><description><![CDATA[<p>begin und end gibt es schon in &lt;iterator&gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240063</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 08 Aug 2012 13:11:45 GMT</pubDate></item><item><title><![CDATA[Reply to Ist dieser Code Standard-C++? (std::swap überladung als friend einer Klasse) on Wed, 08 Aug 2012 13:37:59 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>begin und end gibt es schon in &lt;iterator&gt;</p>
</blockquote>
<p>Danke - aber ich habe für C++03 getestet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240080</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240080</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 08 Aug 2012 13:37:59 GMT</pubDate></item></channel></rss>