<?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[friend + namespace]]></title><description><![CDATA[<p>warum geht das nicht?</p>
<pre><code class="language-cpp">struct foo{
	foo(int) { }
};

class bar;

namespace some
{
	foo fun(const bar&amp; t);
}

class bar {
	int member = 10;
public:
	friend foo ::some::fun(const bar&amp;); // Error: foo is not a type
};

foo some::fun(const bar&amp; t) {
	return t.member;
}

int main() {
	bar b;
	some::fun(b);
}
</code></pre>
<p>wenn ich den rückgabetyp von fun auf int wähle, kompiliert es anstandslos</p>
<p><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/topic/326835/friend-namespace</link><generator>RSS for Node</generator><lastBuildDate>Mon, 25 May 2026 17:43:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326835.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 Jul 2014 16:39:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to friend + namespace on Wed, 09 Jul 2014 16:39:51 GMT]]></title><description><![CDATA[<p>warum geht das nicht?</p>
<pre><code class="language-cpp">struct foo{
	foo(int) { }
};

class bar;

namespace some
{
	foo fun(const bar&amp; t);
}

class bar {
	int member = 10;
public:
	friend foo ::some::fun(const bar&amp;); // Error: foo is not a type
};

foo some::fun(const bar&amp; t) {
	return t.member;
}

int main() {
	bar b;
	some::fun(b);
}
</code></pre>
<p>wenn ich den rückgabetyp von fun auf int wähle, kompiliert es anstandslos</p>
<p><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/2407803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407803</guid><dc:creator><![CDATA[Unreg #1]]></dc:creator><pubDate>Wed, 09 Jul 2014 16:39:51 GMT</pubDate></item><item><title><![CDATA[Reply to friend + namespace on Wed, 09 Jul 2014 16:49:11 GMT]]></title><description><![CDATA[<pre><code>foo ::some::fun
</code></pre>
<p>Ist äquivalent zu</p>
<pre><code>foo::some::fun
</code></pre>
<p>Leerzeichen zwischen Operatoren sind i.d.R. wegzudenken (das ist natürlich nur grob gemeint!).<br />
<code>foo</code> wird hier als Teil des <em>nested-name-specifiers</em> angesehen. Nicht als der Rückgabetyp.</p>
<p>Eine Lösung wäre es natürlich den globalen Scope-Operator zu entfernen</p>
<pre><code>friend foo some::fun(const bar&amp;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2407805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407805</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 09 Jul 2014 16:49:11 GMT</pubDate></item><item><title><![CDATA[Reply to friend + namespace on Wed, 09 Jul 2014 17:03:33 GMT]]></title><description><![CDATA[<p>andere Möglichkeiten</p>
<pre><code class="language-cpp">friend foo (::some::fun(const bar&amp;));
friend auto ::some::fun(const bar&amp;) -&gt; foo;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2407811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407811</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 09 Jul 2014 17:03:33 GMT</pubDate></item><item><title><![CDATA[Reply to friend + namespace on Wed, 09 Jul 2014 17:16:14 GMT]]></title><description><![CDATA[<p>Danke und tschö</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2407816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2407816</guid><dc:creator><![CDATA[Unreg #1]]></dc:creator><pubDate>Wed, 09 Jul 2014 17:16:14 GMT</pubDate></item><item><title><![CDATA[Reply to friend + namespace on Fri, 11 Jul 2014 15:45:10 GMT]]></title><description><![CDATA[<blockquote>
<p>wenn ich den rückgabetyp von fun auf int wähle, kompiliert es anstandslos</p>
</blockquote>
<p>Der Rückgabetyp von</p>
<pre><code>foo some::fun(const bar&amp; t)
</code></pre>
<p>ist foo aber nicht int. Du gibts aber mit t.member einen int zurück!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408230</guid><dc:creator><![CDATA[Keksman]]></dc:creator><pubDate>Fri, 11 Jul 2014 15:45:10 GMT</pubDate></item><item><title><![CDATA[Reply to friend + namespace on Fri, 11 Jul 2014 15:46:38 GMT]]></title><description><![CDATA[<p>Keksman schrieb:</p>
<blockquote>
<blockquote>
<p>wenn ich den rückgabetyp von fun auf int wähle, kompiliert es anstandslos</p>
</blockquote>
<p>Der Rückgabetyp von</p>
<pre><code>foo some::fun(const bar&amp; t)
</code></pre>
<p>ist foo aber nicht int. Du gibts aber mit t.member einen int zurück!</p>
</blockquote>
<p>Aber int kann implizit in einen foo umgewandelt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408232</guid><dc:creator><![CDATA[bumerangtyp]]></dc:creator><pubDate>Fri, 11 Jul 2014 15:46:38 GMT</pubDate></item><item><title><![CDATA[Reply to friend + namespace on Fri, 11 Jul 2014 16:00:27 GMT]]></title><description><![CDATA[<p>bumerangtyp schrieb:</p>
<blockquote>
<p>Aber int kann implizit in einen foo umgewandelt werden.</p>
</blockquote>
<p>ARgg. Sorry ich wollte eigentlich nur helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408233</guid><dc:creator><![CDATA[Keksman]]></dc:creator><pubDate>Fri, 11 Jul 2014 16:00:27 GMT</pubDate></item><item><title><![CDATA[Reply to friend + namespace on Fri, 11 Jul 2014 21:30:49 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>andere Möglichkeiten</p>
<pre><code class="language-cpp">friend foo (::some::fun(const bar&amp;));
</code></pre>
</blockquote>
<p>Huch?<br />
Nicht</p>
<pre><code class="language-cpp">friend foo (::some::fun)(const bar&amp;);
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408273</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 11 Jul 2014 21:30:49 GMT</pubDate></item><item><title><![CDATA[Reply to friend + namespace on Fri, 11 Jul 2014 21:59:30 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>andere Möglichkeiten</p>
<pre><code class="language-cpp">friend foo (::some::fun(const bar&amp;));
</code></pre>
</blockquote>
<p>Huch?<br />
Nicht</p>
<pre><code class="language-cpp">friend foo (::some::fun)(const bar&amp;);
</code></pre>
<p>?</p>
</blockquote>
<p>so geht es auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408277</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 11 Jul 2014 21:59:30 GMT</pubDate></item><item><title><![CDATA[Reply to friend + namespace on Sat, 12 Jul 2014 01:34:59 GMT]]></title><description><![CDATA[<p>Seit wann kann man da denn Klammern hinsetzen? Das ist doch keine expression. Gibts dafuer irgendwo eine spezielle Regel?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408283</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sat, 12 Jul 2014 01:34:59 GMT</pubDate></item><item><title><![CDATA[Reply to friend + namespace on Sat, 12 Jul 2014 02:35:01 GMT]]></title><description><![CDATA[<p>Ich dachte mir halt, wenns bei <code>typedef</code> so geht, wieso sollte es dann bei <code>friend</code> nicht gehen?</p>
<pre><code class="language-cpp">typedef int (*FunctionPtr)();
</code></pre>
<p>Die Schreibweise von camper kannte ich aber auch noch nicht.</p>
<p>Funktionsnamen klammern ist auch eine gute Möglichkeit um die Auswertung als Function-Style-Makro zu verhindern:</p>
<pre><code class="language-cpp">#define max(a, b) ((a) &gt; (b) ? (a) : (b))

//int x = std::max(foo(), bar());
int x = (std::max)(foo(), bar());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2408284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408284</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 12 Jul 2014 02:35:01 GMT</pubDate></item><item><title><![CDATA[Reply to friend + namespace on Sat, 12 Jul 2014 08:15:17 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Seit wann kann man da denn Klammern hinsetzen? Das ist doch keine expression. Gibts dafuer irgendwo eine spezielle Regel?</p>
</blockquote>
<p>Du kannst vieles in Klammern setzen.</p>
<pre><code>int(a);
</code></pre>
<p>Solltest du kennen, oder?</p>
<p>Lässt sich auf</p>
<p>§8.3/4 schrieb:</p>
<blockquote>
<p>In a declaration <code>T D</code> where <code>D</code> has the form<br />
<em>( D1 )</em><br />
the type of the contained <em>declarator-id</em> is the same as that of the contained <em>declarator-id</em> in the declaration<br />
<code>T D1</code><br />
<strong>Parentheses do not alter the type of the embedded <em>declarator-id</em>, but they can alter the binding of complex declarators.</strong></p>
</blockquote>
<p>zurückführen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408289</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408289</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sat, 12 Jul 2014 08:15:17 GMT</pubDate></item><item><title><![CDATA[Reply to friend + namespace on Sat, 12 Jul 2014 11:20:02 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Du kannst vieles in Klammern setzen.</p>
<pre><code>int(a);
</code></pre>
<p>Solltest du kennen, oder?</p>
</blockquote>
<p>Noe. Bzw, jetzt schon. Wasn Mist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2408295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2408295</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sat, 12 Jul 2014 11:20:02 GMT</pubDate></item></channel></rss>