<?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[implizite konvertierungen]]></title><description><![CDATA[<p>hallo, ich konnte meinen quelltext eben nicht kompilieren, hier das minimalbeispiel meines codes:</p>
<pre><code>template&lt;class T&gt;
struct storage
{
	T data;
	storage(T data = T())
		: data(data)
	{
	}
	template&lt;class U&gt;
	inline operator storage&lt;U&gt; () const // implizit!
	{
		return storage&lt;U&gt;(this-&gt;data);
	}
};
struct some_class
{
	some_class(storage&lt;float&gt; arg = storage&lt;float&gt;()) // implizit!
	{
	}
};
void f(some_class const&amp; arg)
{
}
int main()
{
	storage&lt;float&gt; data1;	
	f(data1); // geht

	storage&lt;int&gt; data2;
	f(data2); // geht nicht

	f(some_class(data2)); // geht plötzlich wieder?????
}
</code></pre>
<p>für mich ist es unlogisch dass zeile 30 nicht geht, denn alle dazu nötigen funktionen sind implizit aufrufbar...<br />
noch unlogischer sieht es für mich aus da ich bei zeile 32 den implizit aufrufbaren konstruktor manuell aufrufe und es dann plötzlich geht. das könnte der compiler bei zeile 30 doch selbst auch machen...</p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320951/implizite-konvertierungen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 14:07:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320951.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Oct 2013 09:06:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to implizite konvertierungen on Fri, 18 Oct 2013 09:06:08 GMT]]></title><description><![CDATA[<p>hallo, ich konnte meinen quelltext eben nicht kompilieren, hier das minimalbeispiel meines codes:</p>
<pre><code>template&lt;class T&gt;
struct storage
{
	T data;
	storage(T data = T())
		: data(data)
	{
	}
	template&lt;class U&gt;
	inline operator storage&lt;U&gt; () const // implizit!
	{
		return storage&lt;U&gt;(this-&gt;data);
	}
};
struct some_class
{
	some_class(storage&lt;float&gt; arg = storage&lt;float&gt;()) // implizit!
	{
	}
};
void f(some_class const&amp; arg)
{
}
int main()
{
	storage&lt;float&gt; data1;	
	f(data1); // geht

	storage&lt;int&gt; data2;
	f(data2); // geht nicht

	f(some_class(data2)); // geht plötzlich wieder?????
}
</code></pre>
<p>für mich ist es unlogisch dass zeile 30 nicht geht, denn alle dazu nötigen funktionen sind implizit aufrufbar...<br />
noch unlogischer sieht es für mich aus da ich bei zeile 32 den implizit aufrufbaren konstruktor manuell aufrufe und es dann plötzlich geht. das könnte der compiler bei zeile 30 doch selbst auch machen...</p>
<p>gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361100</guid><dc:creator><![CDATA[implicer]]></dc:creator><pubDate>Fri, 18 Oct 2013 09:06:08 GMT</pubDate></item><item><title><![CDATA[Reply to implizite konvertierungen on Fri, 18 Oct 2013 09:08:33 GMT]]></title><description><![CDATA[<p>Bei Konvertierungssequenzen darf nur eine benutzerdefinierte Konvertierung stattfinden.<br />
Bei deinem zweiten Beispiel müssten aber zwei aufgerufen werden.<br />
Das macht man, damit man nicht endlos konvertiert und am Ende bei irgendwelchen Typen landet, die keiner haben wollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361101</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Fri, 18 Oct 2013 09:08:33 GMT</pubDate></item><item><title><![CDATA[Reply to implizite konvertierungen on Fri, 18 Oct 2013 10:57:21 GMT]]></title><description><![CDATA[<p>siehe auch 13.3.3.1.2 User-defined conversion sequences</p>
<blockquote>
<p>A user-defined conversion sequence consists of an initial standard conversion sequence followed by a userdefined conversion (12.3) followed by a second standard conversion sequence. If the user-defined conversion is specified by a constructor (12.3.1), the initial standard conversion sequence converts the source type to the type required by the argument of the constructor. If the user-defined conversion is specified by a conversion function (12.3.2), the initial standard conversion sequence converts the source type to the implicit object parameter of the conversion function.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2361133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361133</guid><dc:creator><![CDATA[dd++ 0]]></dc:creator><pubDate>Fri, 18 Oct 2013 10:57:21 GMT</pubDate></item></channel></rss>