<?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[Template auf const oder &amp;amp; Typen?]]></title><description><![CDATA[<p>Hallo,<br />
ich habe mir heute den Nachmittag mit dem schreiben einer Collection Klasse vertrieben.<br />
Gemeint ist mehr oder weniger eine Wrapper um eine std::list&lt;T*&gt; der es erlaubt mittels einer Methode apply() eine beliebige Methode für jedes Objekt in der Liste aufzurufen. Funktioniert soweit alles. Hier kurzer Codeausschnitt</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class Coll
{
public:
    // apply fuer parameterlose Methoden
    template &lt;class R&gt;
    void apply( R (T::*method) ( ) );

    // apply fuer Methoden mit einem Parameter
    template &lt;class R,class A&gt;
    void apply( R (T::*method) (A) , A a);

    // ... usw fuer mehrparametrige Methoden
protected:
    typedef typename list&lt;T*&gt;::iterator iterator;
    typedef typename list&lt;T*&gt;::const_iterator const_iterator;
    std::list&lt;T*&gt; m_list;
};

template &lt;class T&gt;
template &lt;class R&gt;
void Coll&lt;T&gt;::apply( R (T::*method) ( ) )
{
    iterator it;
    for ( it=m_list.begin(); it != m_list.end(); it++ ) {
        ((*it)-&gt;*method)();
    }
}

template &lt;class T&gt;
template &lt;class R,class A&gt;
void Coll&lt;T&gt;::apply( R (T::*method) (A) , A a)
{
    iterator it;
    for ( it=m_list.begin(); it != m_list.end(); it++ )
        ((*it)-&gt;*method)(a);
}
</code></pre>
<p>Ich war bis vor kurzem noch total happy, dass alles funktioniert. Bis ich dann versucht habe Methoden mit const oder &amp; Parametern aufzurufen.<br />
z.B.</p>
<pre><code class="language-cpp">foo(const Bar&amp; b)
</code></pre>
<p>Da war es vorbei mit der Freude <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>Gibts da irgendeine Möglichkeit ohne apply für sämtliche Permutationen von<br />
(A),(A&amp;),(const A), (const A&amp;) etc. zu deklarieren und definieren?</p>
<p>Vielen Dank schon mal<br />
buergi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/245909/template-auf-const-oder-amp-typen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 00:21:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245909.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Jul 2009 19:59:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template auf const oder &amp;amp; Typen? on Mon, 20 Jul 2009 19:59:09 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe mir heute den Nachmittag mit dem schreiben einer Collection Klasse vertrieben.<br />
Gemeint ist mehr oder weniger eine Wrapper um eine std::list&lt;T*&gt; der es erlaubt mittels einer Methode apply() eine beliebige Methode für jedes Objekt in der Liste aufzurufen. Funktioniert soweit alles. Hier kurzer Codeausschnitt</p>
<pre><code class="language-cpp">template &lt;class T&gt;
class Coll
{
public:
    // apply fuer parameterlose Methoden
    template &lt;class R&gt;
    void apply( R (T::*method) ( ) );

    // apply fuer Methoden mit einem Parameter
    template &lt;class R,class A&gt;
    void apply( R (T::*method) (A) , A a);

    // ... usw fuer mehrparametrige Methoden
protected:
    typedef typename list&lt;T*&gt;::iterator iterator;
    typedef typename list&lt;T*&gt;::const_iterator const_iterator;
    std::list&lt;T*&gt; m_list;
};

template &lt;class T&gt;
template &lt;class R&gt;
void Coll&lt;T&gt;::apply( R (T::*method) ( ) )
{
    iterator it;
    for ( it=m_list.begin(); it != m_list.end(); it++ ) {
        ((*it)-&gt;*method)();
    }
}

template &lt;class T&gt;
template &lt;class R,class A&gt;
void Coll&lt;T&gt;::apply( R (T::*method) (A) , A a)
{
    iterator it;
    for ( it=m_list.begin(); it != m_list.end(); it++ )
        ((*it)-&gt;*method)(a);
}
</code></pre>
<p>Ich war bis vor kurzem noch total happy, dass alles funktioniert. Bis ich dann versucht habe Methoden mit const oder &amp; Parametern aufzurufen.<br />
z.B.</p>
<pre><code class="language-cpp">foo(const Bar&amp; b)
</code></pre>
<p>Da war es vorbei mit der Freude <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>Gibts da irgendeine Möglichkeit ohne apply für sämtliche Permutationen von<br />
(A),(A&amp;),(const A), (const A&amp;) etc. zu deklarieren und definieren?</p>
<p>Vielen Dank schon mal<br />
buergi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1746538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1746538</guid><dc:creator><![CDATA[buergi]]></dc:creator><pubDate>Mon, 20 Jul 2009 19:59:09 GMT</pubDate></item><item><title><![CDATA[Reply to Template auf const oder &amp;amp; Typen? on Tue, 21 Jul 2009 21:44:16 GMT]]></title><description><![CDATA[<p>Diese Coll-Klasse bringt Dir irgendwie nicht viel. Du kannst auch direkt eine std::list&lt;&gt; nehmen und einfach for_each aufrufen. Damit bist Du auch viel flexibler.</p>
<p>Dass Du Zeiger speicherst, ignoriere ich jetzt mal.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;list&gt;
#include &lt;algorithm&gt;
#include &lt;functional&gt;

using namespace std;

class dings
{
public:
	explicit dings(int zahl) : z(zahl) {}
	void transmogrify() const {cout &lt;&lt; z;}
private:
	int z;
};

int main()
{
	list&lt;dings&gt; l;
	l.push_back(dings(1));
	l.push_back(dings(2));
	l.push_back(dings(3));
	for_each(l.begin(), l.end(), mem_fun_ref(&amp;dings::transmogrify));
	cout &lt;&lt; '\n';
}
</code></pre>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1747260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1747260</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Tue, 21 Jul 2009 21:44:16 GMT</pubDate></item><item><title><![CDATA[Reply to Template auf const oder &amp;amp; Typen? on Tue, 21 Jul 2009 21:57:01 GMT]]></title><description><![CDATA[<p>Ich vergaß: mem_fun und mem_fun_ref unterstützen auch Elementfunktionen, die einen Parameter erwarten. Schreibst Du halt bind2dn(mem_fun_ref(&amp;dings::blah),42) als Funktor.</p>
<p>BTW: Es gibt noch mehr Fälle, über die man sich Gedanken machen muss. ZB unterstütut Dein Code keine const-member functions. <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>
<p>Dein Problem mit const&amp; bzgl Parameter habe ich übrigens nicht verstanden.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1747263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1747263</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Tue, 21 Jul 2009 21:57:01 GMT</pubDate></item><item><title><![CDATA[Reply to Template auf const oder &amp;amp; Typen? on Wed, 22 Jul 2009 11:17:10 GMT]]></title><description><![CDATA[<p>Hallo Sebastian,<br />
erst mal danke für die Antwort,<br />
for_each und bind1st/bind2nd habe ich schon gefunden, das Problem ist das sie nicht erlauben mehr Parameter zu übergeben, deshalb die Idee mit den vielen apply Methoden für jeweils andere Parameterzahl (bis 7 oder so das reicht in jedem Fall).<br />
Problem war nur, dass ich mit</p>
<pre><code class="language-cpp">template &lt;class R,class A&gt;
void apply( R (T::*method) (A) , A a);
</code></pre>
<p>zwar alle Methoden abdecke die irgendeinen einzigen Parameter verlangen, der allerdings weder const noch &amp; etc sein darf. Ich kann damit also z.B. nicht aufrufen</p>
<pre><code class="language-cpp">Obj::foo(const string&amp; str) {
    cout &lt;&lt; str &lt;&lt; endl;
}
// [...]
string s(&quot;foobar&quot;);
objlist.apply(&amp;Obj::foo,s);
</code></pre>
<p>Ist zwar ein sinnloses Beispiel aber hoff man versteht was gemeint ist.</p>
<p>Aber ich habe die Lösung mit den apply Methoden schon aufgegeben, da mach ich lieber iterator loops über die Liste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1747495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1747495</guid><dc:creator><![CDATA[buergi]]></dc:creator><pubDate>Wed, 22 Jul 2009 11:17:10 GMT</pubDate></item><item><title><![CDATA[Reply to Template auf const oder &amp;amp; Typen? on Wed, 22 Jul 2009 11:36:21 GMT]]></title><description><![CDATA[<p>AFAIK kannst du mit Boost.Function genau das was du willst, nämlich Funktionen mit mehreren Parametern verwenden.<br />
<a href="http://www.boost.org/doc/libs/1_39_0/doc/html/function.html" rel="nofollow">http://www.boost.org/doc/libs/1_39_0/doc/html/function.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1747515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1747515</guid><dc:creator><![CDATA[Somelier]]></dc:creator><pubDate>Wed, 22 Jul 2009 11:36:21 GMT</pubDate></item><item><title><![CDATA[Reply to Template auf const oder &amp;amp; Typen? on Wed, 22 Jul 2009 20:01:04 GMT]]></title><description><![CDATA[<p>buergi schrieb:</p>
<blockquote>
<p>[...]<br />
zwar alle Methoden abdecke die irgendeinen einzigen Parameter verlangen, der allerdings weder const noch &amp; etc sein darf.</p>
</blockquote>
<p>Wieso nicht? Was verpasse ich denn da?, Dann ist A eben ein &quot;const T&amp;&quot;, oder &quot;T&amp;&quot; für irgend ein nicht-Referenz-Typ T.</p>
<p>buergi schrieb:</p>
<blockquote>
<p>Ich kann damit also z.B. nicht aufrufen</p>
<pre><code class="language-cpp">Obj::foo(const string&amp; str) {
    cout &lt;&lt; str &lt;&lt; endl;
}
// [...]
string s(&quot;foobar&quot;);
objlist.apply(&amp;Obj::foo,s);
</code></pre>
</blockquote>
<p>A = const string&amp;</p>
<p>Und? Wo ist das Problem?<br />
Ich hab's jetzt nicht ausprobiert und vielleicht irre ich mich jetzt auch total. Aber ich sehe hier jetzt kein Problem.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1747861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1747861</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Wed, 22 Jul 2009 20:01:04 GMT</pubDate></item><item><title><![CDATA[Reply to Template auf const oder &amp;amp; Typen? on Thu, 23 Jul 2009 02:40:28 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16473">@buergi</a><br />
Ich verstehe den Sinn deiner Klasse nicht. Genau dafür gibt es std::for_each und boost::bind.</p>
<pre><code class="language-cpp">std::list&lt;Foo*&gt; li;

std::for_each(li.begin(), li.end(), boost::bind(&amp;Foo::bar, _1));
std::for_each(li.begin(), li.end(), boost::bind(&amp;Foo::baz, _1, arg1, arg2));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1747972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1747972</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 23 Jul 2009 02:40:28 GMT</pubDate></item><item><title><![CDATA[Reply to Template auf const oder &amp;amp; Typen? on Sat, 25 Jul 2009 01:34:12 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Diese Coll-Klasse bringt Dir irgendwie nicht viel. Du kannst auch direkt eine std::list&lt;&gt; nehmen und einfach for_each aufrufen. Damit bist Du auch viel flexibler.</p>
<p>Dass Du Zeiger speicherst, ignoriere ich jetzt mal.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;list&gt;
#include &lt;algorithm&gt;
#include &lt;functional&gt;

using namespace std;

class dings
{
public:
	explicit dings(int zahl) : z(zahl) {}
	void transmogrify() const {cout &lt;&lt; z;}
private:
	int z;
};

int main()
{
	list&lt;dings&gt; l;
	l.push_back(dings(1));
	l.push_back(dings(2));
	l.push_back(dings(3));
	for_each(l.begin(), l.end(), mem_fun_ref(&amp;dings::transmogrify));
	cout &lt;&lt; '\n';
}
</code></pre>
<p>Gruß,<br />
SP</p>
</blockquote>
<p>mal was in kürzer</p>
<pre><code class="language-cpp">struct Foo{
  void operator()(int i){ /* work */ }; // &lt;- der nice operator :D
};

Foo foo;
for_each(l.begin(), l.end(), foo); // &lt;- change, kürzer und einfacher ihmo
</code></pre>
<p>Template ua. mal weggelassen, wollte nur das Konzept vorstellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1749225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1749225</guid><dc:creator><![CDATA[kung]]></dc:creator><pubDate>Sat, 25 Jul 2009 01:34:12 GMT</pubDate></item><item><title><![CDATA[Reply to Template auf const oder &amp;amp; Typen? on Sat, 25 Jul 2009 08:09:44 GMT]]></title><description><![CDATA[<p>Hallo<br />
erst mal danke für die vielen Antworten</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/36159">@Sebastian</a></p>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Wieso nicht? Was verpasse ich denn da?, Dann ist A eben ein &quot;const T&amp;&quot;, oder &quot;T&amp;&quot; für irgend ein nicht-Referenz-Typ T.<br />
[...]<br />
A = const string&amp;</p>
</blockquote>
<p>Hm ich meine beim ausprobieren, dass ein template A eben nicht darauf passt, sonst hätt ja alles funktioniert und ich wär zufrieden gewesen und hätte diesen Thread nicht angefangen. Hab unten nochmal Codeschnipsel mit den Compiler Fehlern angehängt.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/36159">@Sebastian</a>+kung<br />
wie gesagt for_each mit den std::bind1st etc kann ja nur maximal 2 Parameter übergeben soweit ich gesehn habe.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>+Somelier</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Ich verstehe den Sinn deiner Klasse nicht.Genau dafür gibt es std::for_each und boost::bind.</p>
</blockquote>
<p>Sinn soll sein, dass die Klasse auch andere Tätigkeiten übernimmt, die ich hier jetzt ausgelassen habe, z.B. wird ein Element nur hinzugefügt wenn es nicht schon in der Liste existiert (klar da gibts sicher auch was von Boost Allmächtig)</p>
<p>boost::bind, ja genial das is ja wirklich genau was ich will. Nachdem ich gestern meine gesamt Festplatte aufgeräumt habe um die 37.3 GB freizuschaufeln, die man zum boost builden braucht und nach stundenlanger Rechenzeit habe ich jetzt festgestellt, die header reichen für boost::bind</p>
<p>Naja whatever hier nochmal Codeschnipsel, boost::bind funzt, Zugriff auf Referenzen etc über Templates klappt nicht (klar über void apply( R (T::*method) (A) , A&amp; a) würds funzen aber das ist bei mehreren Parametern keine Alternative, da gibts ja zig Kombinationen)</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;list&gt;
#include &lt;boost/bind.hpp&gt;

class Obj
{
public:
    Obj(int _x) : x(_x) {};
    void p(int a)
        { std::cout &lt;&lt; x &lt;&lt; &quot;:p(&quot;     &lt;&lt;  a &lt;&lt; &quot;)&quot; &lt;&lt; std::endl; };
    void p_p(int* a)
        { std::cout &lt;&lt; x &lt;&lt; &quot;:p_p(&quot;   &lt;&lt; *a &lt;&lt; &quot;)&quot; &lt;&lt; std::endl; };
    void p_cp(const int* a)
        { std::cout &lt;&lt; x &lt;&lt; &quot;:p_cp(&quot;  &lt;&lt; *a &lt;&lt; &quot;)&quot; &lt;&lt; std::endl; };
    void p_r(int&amp; a)
        { std::cout &lt;&lt; x &lt;&lt; &quot;:p_r(&quot;   &lt;&lt;  a &lt;&lt; &quot;)&quot; &lt;&lt; std::endl; };
    void p_cr(const int&amp; a)
        { std::cout &lt;&lt; x &lt;&lt; &quot;:p_cr(&quot;  &lt;&lt;  a &lt;&lt; &quot;)&quot; &lt;&lt; std::endl; };
protected:
    int x;
};

template &lt;class T&gt;
class Coll
{
public:

    void add(T* t)
    {
        m_list.push_back(t);
    }

    template &lt;class R,class A&gt;
    void apply( R (T::*method) (A) , A a)
    {
        typename std::list&lt;T*&gt;::iterator it;
        for ( it=m_list.begin(); it != m_list.end(); it++ )
            ((*it)-&gt;*method)(a);
    }

//protected: (nich gut)
    std::list&lt;T*&gt; m_list;
};

int main()
{
    Coll&lt;Obj&gt; c;
    c.add(new Obj(1));
    c.add(new Obj(2));
    c.add(new Obj(3));

    int a=1;
    c.apply(&amp;Obj::p,a);
    c.apply(&amp;Obj::p_p,&amp;a);
    // c.apply(&amp;Obj::p_r,a);   // error: no matching function for call to `Coll&lt;Obj&gt;::apply(void (Obj::*)(int&amp;), int&amp;)'
    // c.apply(&amp;Obj::p_cr,a);  // error: no matching function for call to `Coll&lt;Obj&gt;::apply(void (Obj::*)(const int&amp;), int&amp;)'
    // c.apply(&amp;Obj::p_cp,&amp;a); // error: no matching function for call to `Coll&lt;Obj&gt;::apply(void (Obj::*)(const int*), int*)'

    // zugriff auf m_list, nich gut! nur zum testen
    std::for_each(c.m_list.begin(), c.m_list.end(), boost::bind(&amp;Obj::p_cr, _1, a));

    return 0;
}
</code></pre>
<p>Also nochmal vielen Dank, denk ich werds mit boost::bind und for_each machen, des scheint ja gut zu klappen. Wird zeit, dass ich mich in boost einlese.</p>
<p>Gruß<br />
buergi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1749257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1749257</guid><dc:creator><![CDATA[buergi]]></dc:creator><pubDate>Sat, 25 Jul 2009 08:09:44 GMT</pubDate></item><item><title><![CDATA[Reply to Template auf const oder &amp;amp; Typen? on Sat, 25 Jul 2009 09:18:39 GMT]]></title><description><![CDATA[<p>buergi schrieb:</p>
<blockquote>
<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Wieso nicht? Was verpasse ich denn da?, Dann ist A eben ein &quot;const T&amp;&quot;, oder &quot;T&amp;&quot; für irgend ein nicht-Referenz-Typ T.<br />
[...]<br />
A = const string&amp;</p>
</blockquote>
<p>Hm ich meine beim ausprobieren, dass ein template A eben nicht darauf passt, sonst hätt ja alles funktioniert und ich wär zufrieden gewesen und hätte diesen Thread nicht angefangen. Hab unten nochmal Codeschnipsel mit den Compiler Fehlern angehängt.</p>
</blockquote>
<p>Sicher, dass es nicht vielleicht eine const member function war?</p>
<pre><code>class A
{
public:
  void foo();
  void bar() const;
};

void xxx()
{
  void(A::*pmf1)()       = &amp;A::foo;
  void(A::*pmf2)() [b]const[/b] = &amp;A::bar;
}
</code></pre>
<p>Das ätzende bei Elementfunktionen ist, dass man die Qualifizierungen für this (const, volatile und demnächst auch &amp; und &amp;&amp;) nicht generisch behandeln kann. boost::bind und std::mem_fun behandeln also zwei Sonderfälle: non-const member functions und const member functions. Wenn demnächst (C++1x) noch die ref-qualifier dazukommen, sollte man mindestens 4 Kombinationen behandeln können: nix, const, &amp;, const&amp;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1749291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1749291</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Sat, 25 Jul 2009 09:18:39 GMT</pubDate></item><item><title><![CDATA[Reply to Template auf const oder &amp;amp; Typen? on Thu, 30 Jul 2009 14:02:11 GMT]]></title><description><![CDATA[<p>so sry war mit Klausurvorbereitung beschäftigt da war grad keine Zeit für C++.</p>
<p>Sebastian Pilzer schrieb:</p>
<blockquote>
<p>Sicher, dass es nicht vielleicht eine const member function war?</p>
</blockquote>
<p>ich habe doch in meinem letzten Post unten den Codeschnipsel angehängt. Der sollte kompilierbar sein, aber wenn man die auskommentierten Zeilen mit nimmt kommen bei mir die angegebenen Fehlermeldungen.<br />
Aber ist auch egal mit Boost gehts ja.</p>
<p>Danke nochmal. Gruß<br />
buergi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1752409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1752409</guid><dc:creator><![CDATA[buergi]]></dc:creator><pubDate>Thu, 30 Jul 2009 14:02:11 GMT</pubDate></item></channel></rss>