<?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[g++, Fehlermeldung bei cast operatoren]]></title><description><![CDATA[<pre><code>#include &lt;string&gt;

struct test
{
	operator std::string()  const { return &quot;&quot;; }
	operator unsigned int() const { return 12; }

	template &lt;typename T&gt;
	operator T&amp;() { return T(); } // nur zu Testzwecken!
};

int main()
{
	const test value;
	std::string tmp = static_cast&lt;std::string&gt;(value);
        // std::string tmp = value;
}
</code></pre>
<p>Wenn man das normal compiliert, dann meldet g++(4.8.0):</p>
<pre><code>ped.cpp: In function 'int main()':
ped.cpp:16:50: error: call of overloaded 'basic_string(const test&amp;)' is ambiguous
ped.cpp:16:50: note: candidates are:
In file included from string:54:0,
                 from ped.cpp:2:
basic_string.h:519:7: note: std::basic_string&lt;_CharT, _Traits, _Alloc&gt;::basic_string(std::initializer_list&lt;_CharT&gt;, const _Alloc&amp;) [with _CharT = char; _Traits = std::char_traits&lt;char&gt;; _Alloc = std::allocator&lt;char&gt;] &lt;near match&gt;
basic_string.h:519:7: note:   no known conversion for argument 1 from 'const test' to 'std::initializer_list&lt;char&gt;'
basic_string.h:504:7: note: std::basic_string&lt;_CharT, _Traits, _Alloc&gt;::basic_string(std::basic_string&lt;_CharT, _Traits, _Alloc&gt;&amp;&amp;) [with _CharT = char; _Traits = std::char_traits&lt;char&gt;; _Alloc = std::allocator&lt;char&gt;; std::basic_string&lt;_CharT, _Traits, _Alloc&gt; = std::basic_string&lt;char&gt;] &lt;near match&gt;
basic_string.h:504:7: note:   no known conversion for argument 1 from 'const test' to 'std::basic_string&lt;char&gt;&amp;&amp;'
basic_string.h:487:7: note: std::basic_string&lt;_CharT, _Traits, _Alloc&gt;::basic_string(const _CharT*, const _Alloc&amp;) [with _CharT = char; _Traits = std::char_traits&lt;char&gt;; _Alloc = std::allocator&lt;char&gt;] &lt;near match&gt;
basic_string.h:487:7: note:   no known conversion for argument 1 from 'const test' to 'const char*'
basic_string.h:452:7: note: std::basic_string&lt;_CharT, _Traits, _Alloc&gt;::basic_string(const std::basic_string&lt;_CharT, _Traits, _Alloc&gt;&amp;) [with _CharT = char; _Traits = std::char_traits&lt;char&gt;; _Alloc = std::allocator&lt;char&gt;; std::basic_string&lt;_CharT, _Traits, _Alloc&gt; = std::basic_string&lt;char&gt;] &lt;near match&gt;
basic_string.h:452:7: note:   no known conversion for argument 1 from 'const test' to 'const std::basic_string&lt;char&gt;&amp;'
basic_string.h:445:7: note: std::basic_string&lt;_CharT, _Traits, _Alloc&gt;::basic_string(const _Alloc&amp;) [with _CharT = char; _Traits = std::char_traits&lt;char&gt;; _Alloc = std::allocator&lt;char&gt;] &lt;near match&gt;
basic_string.h:445:7: note:   no known conversion for argument 1 from 'const test' to 'const std::allocator&lt;char&gt;&amp;'
</code></pre>
<p>Wenn man allerdings -pedantic mitgibt, dann ist der Fehler weg.<br />
Wer hat recht? g++ oder g++?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/317441/g-fehlermeldung-bei-cast-operatoren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Jul 2026 23:06:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317441.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 08 Jun 2013 20:52:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to g++, Fehlermeldung bei cast operatoren on Sat, 08 Jun 2013 20:52:29 GMT]]></title><description><![CDATA[<pre><code>#include &lt;string&gt;

struct test
{
	operator std::string()  const { return &quot;&quot;; }
	operator unsigned int() const { return 12; }

	template &lt;typename T&gt;
	operator T&amp;() { return T(); } // nur zu Testzwecken!
};

int main()
{
	const test value;
	std::string tmp = static_cast&lt;std::string&gt;(value);
        // std::string tmp = value;
}
</code></pre>
<p>Wenn man das normal compiliert, dann meldet g++(4.8.0):</p>
<pre><code>ped.cpp: In function 'int main()':
ped.cpp:16:50: error: call of overloaded 'basic_string(const test&amp;)' is ambiguous
ped.cpp:16:50: note: candidates are:
In file included from string:54:0,
                 from ped.cpp:2:
basic_string.h:519:7: note: std::basic_string&lt;_CharT, _Traits, _Alloc&gt;::basic_string(std::initializer_list&lt;_CharT&gt;, const _Alloc&amp;) [with _CharT = char; _Traits = std::char_traits&lt;char&gt;; _Alloc = std::allocator&lt;char&gt;] &lt;near match&gt;
basic_string.h:519:7: note:   no known conversion for argument 1 from 'const test' to 'std::initializer_list&lt;char&gt;'
basic_string.h:504:7: note: std::basic_string&lt;_CharT, _Traits, _Alloc&gt;::basic_string(std::basic_string&lt;_CharT, _Traits, _Alloc&gt;&amp;&amp;) [with _CharT = char; _Traits = std::char_traits&lt;char&gt;; _Alloc = std::allocator&lt;char&gt;; std::basic_string&lt;_CharT, _Traits, _Alloc&gt; = std::basic_string&lt;char&gt;] &lt;near match&gt;
basic_string.h:504:7: note:   no known conversion for argument 1 from 'const test' to 'std::basic_string&lt;char&gt;&amp;&amp;'
basic_string.h:487:7: note: std::basic_string&lt;_CharT, _Traits, _Alloc&gt;::basic_string(const _CharT*, const _Alloc&amp;) [with _CharT = char; _Traits = std::char_traits&lt;char&gt;; _Alloc = std::allocator&lt;char&gt;] &lt;near match&gt;
basic_string.h:487:7: note:   no known conversion for argument 1 from 'const test' to 'const char*'
basic_string.h:452:7: note: std::basic_string&lt;_CharT, _Traits, _Alloc&gt;::basic_string(const std::basic_string&lt;_CharT, _Traits, _Alloc&gt;&amp;) [with _CharT = char; _Traits = std::char_traits&lt;char&gt;; _Alloc = std::allocator&lt;char&gt;; std::basic_string&lt;_CharT, _Traits, _Alloc&gt; = std::basic_string&lt;char&gt;] &lt;near match&gt;
basic_string.h:452:7: note:   no known conversion for argument 1 from 'const test' to 'const std::basic_string&lt;char&gt;&amp;'
basic_string.h:445:7: note: std::basic_string&lt;_CharT, _Traits, _Alloc&gt;::basic_string(const _Alloc&amp;) [with _CharT = char; _Traits = std::char_traits&lt;char&gt;; _Alloc = std::allocator&lt;char&gt;] &lt;near match&gt;
basic_string.h:445:7: note:   no known conversion for argument 1 from 'const test' to 'const std::allocator&lt;char&gt;&amp;'
</code></pre>
<p>Wenn man allerdings -pedantic mitgibt, dann ist der Fehler weg.<br />
Wer hat recht? g++ oder g++?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2329460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2329460</guid><dc:creator><![CDATA[cu__]]></dc:creator><pubDate>Sat, 08 Jun 2013 20:52:29 GMT</pubDate></item><item><title><![CDATA[Reply to g++, Fehlermeldung bei cast operatoren on Sat, 08 Jun 2013 22:20:57 GMT]]></title><description><![CDATA[<pre><code>template &lt;typename T&gt; 
    operator T&amp;() { return T(); } // nur zu Testzwecken!
</code></pre>
<p>Edit: Jo, das geht für OR, weil die Funktion nicht instantiiert wird, bevor sie nicht der beste Match ist.</p>
<p>Alles andere war falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2329466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2329466</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sat, 08 Jun 2013 22:20:57 GMT</pubDate></item><item><title><![CDATA[Reply to g++, Fehlermeldung bei cast operatoren on Sat, 08 Jun 2013 22:29:41 GMT]]></title><description><![CDATA[<p>gcc hat eine Reihe von Bugs mit Konvertierungsoperatoren.<br />
Der T&amp;-Operator sollte eigentlich irrelevant sein, weil er nicht auf ein const-Objekt angewendet werden kann.<br />
Die Implementierung spielt dabei keine Rolle (die ist übnrigens nicht per se problematisch: T könnte const sein, oder einen Konvertierungsoperator für T&amp; haben).<br />
Interessant auch, dass sich der Compiler nicht über die Zeile darüber beschwert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2329469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2329469</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 08 Jun 2013 22:29:41 GMT</pubDate></item><item><title><![CDATA[Reply to g++, Fehlermeldung bei cast operatoren on Sun, 09 Jun 2013 07:21:23 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Interessant auch, dass sich der Compiler nicht über die Zeile darüber beschwert.</p>
</blockquote>
<p>Ich musste erst clang drüberlaufen lassen, bis mir das überhaupt aufgefallen ist.<br />
Anscheinend war g++ da früher sogar mal besser: <a href="http://stackoverflow.com/questions/4674332/declaring-a-const-instance-of-a-class" rel="nofollow">http://stackoverflow.com/questions/4674332/declaring-a-const-instance-of-a-class</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2329503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2329503</guid><dc:creator><![CDATA[cu__]]></dc:creator><pubDate>Sun, 09 Jun 2013 07:21:23 GMT</pubDate></item></channel></rss>