<?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-Syntax für Template-Operatoren]]></title><description><![CDATA[<p>Wie sieht die korrekte friend-Syntax aus? Meine hier ist ja anscheinend falsch.</p>
<pre><code>template&lt;typename T&gt;
class foo;

template&lt;typename T&gt;
class bar;

template&lt;typename T, typename U&gt;
foo&lt;T&gt; operator&lt;&lt; (bar&lt;T&gt;&amp; obj, U const&amp; val);

template&lt;typename T&gt;
class foo
{
	template&lt;typename U&gt;
	friend foo&lt;T&gt; operator&lt;&lt; &lt;T, U&gt;(bar&lt;T&gt;&amp; obj, U const&amp; val);//??

	template&lt;typename U&gt;
	friend foo&lt;T&gt; bar&lt;T&gt;::template operator= &lt;U&gt; (U const&amp; val);//??
};

template&lt;typename T&gt;
class bar
{
public:
	template&lt;typename U&gt;
	foo&lt;T&gt; operator= (U const&amp; val);
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/327760/friend-syntax-für-template-operatoren</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Jul 2026 22:44:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/327760.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Sep 2014 12:40:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to friend-Syntax für Template-Operatoren on Tue, 02 Sep 2014 12:40:56 GMT]]></title><description><![CDATA[<p>Wie sieht die korrekte friend-Syntax aus? Meine hier ist ja anscheinend falsch.</p>
<pre><code>template&lt;typename T&gt;
class foo;

template&lt;typename T&gt;
class bar;

template&lt;typename T, typename U&gt;
foo&lt;T&gt; operator&lt;&lt; (bar&lt;T&gt;&amp; obj, U const&amp; val);

template&lt;typename T&gt;
class foo
{
	template&lt;typename U&gt;
	friend foo&lt;T&gt; operator&lt;&lt; &lt;T, U&gt;(bar&lt;T&gt;&amp; obj, U const&amp; val);//??

	template&lt;typename U&gt;
	friend foo&lt;T&gt; bar&lt;T&gt;::template operator= &lt;U&gt; (U const&amp; val);//??
};

template&lt;typename T&gt;
class bar
{
public:
	template&lt;typename U&gt;
	foo&lt;T&gt; operator= (U const&amp; val);
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2415815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2415815</guid><dc:creator><![CDATA[Statist]]></dc:creator><pubDate>Tue, 02 Sep 2014 12:40:56 GMT</pubDate></item><item><title><![CDATA[Reply to friend-Syntax für Template-Operatoren on Tue, 02 Sep 2014 13:37:56 GMT]]></title><description><![CDATA[<p>Eine Template<em>deklaration</em> (template-Schlüsselwort verwendet), die auch eine Templateargumentliste enthält (der Teil in den Spitzen Klammern) bezieht sich immer auf eine Spezialisierung eines Templates (partiell oder explizit).</p>
<p>Template-friends sind speziell.<br />
friend-Templatedeklarationen dürfen keine (partiellen oder explizite) Spezialisierungen deklarieren. In beiden Deklarationen (sowohl op &lt;&lt; als auch op=) muss also (mindestens) entweder das Templateschlüsselwort oder die Templateargumentliste entfernt werden.</p>
<p>Weiter:</p>
<pre><code class="language-cpp">template&lt;typename U&gt;
    friend foo&lt;T&gt; operator&lt;&lt; (bar&lt;T&gt;&amp; obj, U const&amp; val);
</code></pre>
<p>ist eine zulässige Deklaration, passt aber nicht zu der vorherigen Deklaration des op&lt;&lt;, bezieht sich also auf ein <em>anderes</em> Template. Falls der Operator gleich inline in dieser friend-Deklaration definiert werden kann, besteht kein Problem. Soll die Definition erst später passieren, muss in den sauren Apfel gebissen werden: die friend-Deklaration ist dann umfassender als eigentlich notwendig:</p>
<pre><code class="language-cpp">template&lt;typename V, typename U&gt;
    friend foo&lt;V&gt; operator&lt;&lt; (bar&lt;V&gt;&amp; obj, U const&amp; val);
</code></pre>
<p>op= bereitet in dieser Hinsicht keine Probleme:</p>
<pre><code class="language-cpp">template&lt;typename U&gt;
    friend foo&lt;T&gt; bar&lt;T&gt;::operator=(U const&amp; val);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2415823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2415823</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 02 Sep 2014 13:37:56 GMT</pubDate></item></channel></rss>