<?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 und const Problem]]></title><description><![CDATA[<p>Hi, warum compiliert das folgende Beispiel nicht ohne die kommentierten Zeilen? Mit rohen Zeigern geht die Umwandlung eines nicht const Zeigers in einen const Zeiger ja auch.</p>
<pre><code>class Base
{
public:
	Base() {};
};

template &lt;class T&gt;
class MyPtr
{
public:
	MyPtr() {};
	MyPtr(const MyPtr&lt;T&gt;&amp; value) {};
	/*template &lt;class U&gt;
	MyPtr(const MyPtr&lt;U&gt;&amp; value) {};*/

	MyPtr&lt;T&gt;&amp; operator=(const MyPtr&lt;T&gt;&amp; value) { return *this; };
	/*template &lt;class U&gt;
	MyPtr&lt;T&gt;&amp; operator=(const MyPtr&lt;U&gt;&amp; value) { return *this; };*/
};

int main()
{
	Base *obj1 = nullptr;
	const Base* obj2 = nullptr;
	obj2 = obj1;

	MyPtr&lt;Base&gt; ptr1;
	MyPtr&lt;const Base&gt; ptr2;
	ptr2 = ptr1;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/324709/template-und-const-problem</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 03:48:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324709.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Mar 2014 18:43:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template und const Problem on Fri, 28 Mar 2014 18:43:50 GMT]]></title><description><![CDATA[<p>Hi, warum compiliert das folgende Beispiel nicht ohne die kommentierten Zeilen? Mit rohen Zeigern geht die Umwandlung eines nicht const Zeigers in einen const Zeiger ja auch.</p>
<pre><code>class Base
{
public:
	Base() {};
};

template &lt;class T&gt;
class MyPtr
{
public:
	MyPtr() {};
	MyPtr(const MyPtr&lt;T&gt;&amp; value) {};
	/*template &lt;class U&gt;
	MyPtr(const MyPtr&lt;U&gt;&amp; value) {};*/

	MyPtr&lt;T&gt;&amp; operator=(const MyPtr&lt;T&gt;&amp; value) { return *this; };
	/*template &lt;class U&gt;
	MyPtr&lt;T&gt;&amp; operator=(const MyPtr&lt;U&gt;&amp; value) { return *this; };*/
};

int main()
{
	Base *obj1 = nullptr;
	const Base* obj2 = nullptr;
	obj2 = obj1;

	MyPtr&lt;Base&gt; ptr1;
	MyPtr&lt;const Base&gt; ptr2;
	ptr2 = ptr1;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2391649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391649</guid><dc:creator><![CDATA[Enumerator]]></dc:creator><pubDate>Fri, 28 Mar 2014 18:43:50 GMT</pubDate></item><item><title><![CDATA[Reply to Template und const Problem on Fri, 28 Mar 2014 18:56:56 GMT]]></title><description><![CDATA[<p>Das hat nichts mit der Pointer-Konvertierung zu tun.<br />
Für den Compiler hat MyPtr&lt;foo&gt; genau so viel mit MyPtr&lt;const foo&gt; zu tun wie MyPtr&lt;bar&gt;. Das sind komplett verschiedene Klassen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391652</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 28 Mar 2014 18:56:56 GMT</pubDate></item><item><title><![CDATA[Reply to Template und const Problem on Fri, 28 Mar 2014 18:57:28 GMT]]></title><description><![CDATA[<p>Ganz einfach: <code>MyPtr&lt;Base&gt;</code> und <code>MyPtr&lt;Base const&gt;</code> sind zwei völlig verschiedene Typen. Du kannst sie nicht ohne weiteres ineinander konvertieren. Und genau das musst du, wenn du für das Funktionsargument von <code>operator=</code>  <code>MyPtr&lt;Base const&gt;</code> übergibst.</p>
<p>Du könntest auch</p>
<pre><code>MyPtr&amp; operator=(const MyPtr&amp; value) { return *this; };
</code></pre>
<p>schreiben, das würde verdeutlichen dass dieser überladene Operator nur mit der jeweiligen Spezialisierung funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391653</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 28 Mar 2014 18:57:28 GMT</pubDate></item><item><title><![CDATA[Reply to Template und const Problem on Fri, 28 Mar 2014 19:04:35 GMT]]></title><description><![CDATA[<p>Ok, das Problem ist, dass Construktoren anderer Klassen mit mehreren MyPtr-Argumenten, dann nicht mehr eindeutig sind, wenn ich die kommentierten Zeilen dazu nehme. Kann man das vermeiden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391656</guid><dc:creator><![CDATA[Enumerator]]></dc:creator><pubDate>Fri, 28 Mar 2014 19:04:35 GMT</pubDate></item><item><title><![CDATA[Reply to Template und const Problem on Fri, 28 Mar 2014 19:21:51 GMT]]></title><description><![CDATA[<p>Enumerator schrieb:</p>
<blockquote>
<p>Ok, das Problem ist, dass Construktoren anderer Klassen mit mehreren MyPtr-Argumenten, dann nicht mehr eindeutig sind, wenn ich die kommentierten Zeilen dazu nehme. Kann man das vermeiden?</p>
</blockquote>
<p>decltype-SFINAE-Tricks?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2391661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2391661</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 28 Mar 2014 19:21:51 GMT</pubDate></item></channel></rss>