<?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[Visual C++ (2010) Bug]]></title><description><![CDATA[<p>Hallihallo!</p>
<p>Ich bin gerade über einen Compiler-Bug bei folgendem Code gestolpert:</p>
<pre><code class="language-cpp">#include &lt;type_traits&gt;

template&lt;class T&gt;
void foo(T&amp;&amp; t)
{
   typedef typename std::remove_reference&lt;T&gt;::type some_type;
}

void bar()
{}

int main()
{
   foo(bar);
   return 0;
}
</code></pre>
<pre><code>c:\program files (x86)\microsoft visual studio 10.0\vc\include\type_traits(197): error C2752: 'std::tr1::_Remove_reference&lt;_Ty&gt;':
Mindestens eine teilweise Spezialisierung stimmt mit der Vorlagenargumentliste überein
1&gt;          with
1&gt;          [
1&gt;              _Ty=void (__cdecl &amp;)(void)
1&gt;          ]
1&gt;          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xtr1common(356): kann 'std::tr1::_Remove_reference&lt;_Ty&amp;&amp;&gt;' sein
1&gt;          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xtr1common(350): oder &quot;std::tr1::_Remove_reference&lt;_Ty&amp;&gt;&quot;
1&gt;          xxx\bug4263.cpp(6): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template &quot;std::tr1::remove_reference&lt;_Ty&gt;&quot;.
1&gt;          with
1&gt;          [
1&gt;              _Ty=void (__cdecl &amp;)(void)
1&gt;          ]
1&gt;          xxx\bug4263.cpp(14): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template &quot;void foo&lt;void(__cdecl &amp;)(void)&gt;(T)&quot;.
1&gt;          with
1&gt;          [
1&gt;              T=void (__cdecl &amp;)(void)
1&gt;          ]
</code></pre>
<p>Leider gelingt es mir nicht, diesen Bug zu melden, da Microsoft scheinbar lieber Bug-Reports für VS2012 RC haben will. Wer von Euch VS 2012 RC hat, kann das ja mal testen und falls es immer noch nicht klappt, den Fehler melden ...</p>
<p>- kk</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/306880/visual-c-2010-bug</link><generator>RSS for Node</generator><lastBuildDate>Fri, 07 Aug 2026 07:49:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/306880.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 09 Aug 2012 17:19:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Visual C++ (2010) Bug on Thu, 09 Aug 2012 17:19:36 GMT]]></title><description><![CDATA[<p>Hallihallo!</p>
<p>Ich bin gerade über einen Compiler-Bug bei folgendem Code gestolpert:</p>
<pre><code class="language-cpp">#include &lt;type_traits&gt;

template&lt;class T&gt;
void foo(T&amp;&amp; t)
{
   typedef typename std::remove_reference&lt;T&gt;::type some_type;
}

void bar()
{}

int main()
{
   foo(bar);
   return 0;
}
</code></pre>
<pre><code>c:\program files (x86)\microsoft visual studio 10.0\vc\include\type_traits(197): error C2752: 'std::tr1::_Remove_reference&lt;_Ty&gt;':
Mindestens eine teilweise Spezialisierung stimmt mit der Vorlagenargumentliste überein
1&gt;          with
1&gt;          [
1&gt;              _Ty=void (__cdecl &amp;)(void)
1&gt;          ]
1&gt;          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xtr1common(356): kann 'std::tr1::_Remove_reference&lt;_Ty&amp;&amp;&gt;' sein
1&gt;          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xtr1common(350): oder &quot;std::tr1::_Remove_reference&lt;_Ty&amp;&gt;&quot;
1&gt;          xxx\bug4263.cpp(6): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template &quot;std::tr1::remove_reference&lt;_Ty&gt;&quot;.
1&gt;          with
1&gt;          [
1&gt;              _Ty=void (__cdecl &amp;)(void)
1&gt;          ]
1&gt;          xxx\bug4263.cpp(14): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template &quot;void foo&lt;void(__cdecl &amp;)(void)&gt;(T)&quot;.
1&gt;          with
1&gt;          [
1&gt;              T=void (__cdecl &amp;)(void)
1&gt;          ]
</code></pre>
<p>Leider gelingt es mir nicht, diesen Bug zu melden, da Microsoft scheinbar lieber Bug-Reports für VS2012 RC haben will. Wer von Euch VS 2012 RC hat, kann das ja mal testen und falls es immer noch nicht klappt, den Fehler melden ...</p>
<p>- kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240486</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 09 Aug 2012 17:19:36 GMT</pubDate></item><item><title><![CDATA[Reply to Visual C++ (2010) Bug on Thu, 09 Aug 2012 17:23:15 GMT]]></title><description><![CDATA[<p>VS2012 RC ist bugfrei <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240488</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240488</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Thu, 09 Aug 2012 17:23:15 GMT</pubDate></item><item><title><![CDATA[Reply to Visual C++ (2010) Bug on Thu, 09 Aug 2012 17:32:28 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;type_traits&gt; 

template&lt;class T&gt; 
void foo(T&amp;&amp; t) 
{ 
   typedef typename std::remove_reference&lt;T&gt;::type some_type; 
} 

void bar() 
{} 

int main() 
{ 
   foo(bar); 
   return 0; 
}
</code></pre>
<p>Wahnsinn. Schon wieder: Ein so einfacher Code, und so ein schwerer Bug.</p>
<p>Mein Gott, ich werde <strong>niemals</strong> VC++ benutzen! Jetzt weiß ich erst was PI meinte, als er sagte, VC++ ist bei Templates zum kotzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240491</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Thu, 09 Aug 2012 17:32:28 GMT</pubDate></item><item><title><![CDATA[Reply to Visual C++ (2010) Bug on Thu, 09 Aug 2012 17:54:36 GMT]]></title><description><![CDATA[<p>Also nimmt mat ein &amp; von T&amp;&amp; weg, so funktioniert es. VS 2010 unterstuetzt eben nicht wirklich C++11.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240496</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Thu, 09 Aug 2012 17:54:36 GMT</pubDate></item><item><title><![CDATA[Reply to Visual C++ (2010) Bug on Thu, 09 Aug 2012 18:24:47 GMT]]></title><description><![CDATA[<p>Der Haken ist glaub ich, dass der Compiler einfach intern &amp;&amp; zu &amp; bei Funktionsreferenzen ersetzt und dann auf einmal zwei gleich gut aussehende Spezialisierungen von remove_reference trifft.</p>
<p>Zeus schrieb:</p>
<blockquote>
<p>VS2012 RC ist bugfrei <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
</blockquote>
<p>Naja, sagen wir mal: Er kompiliert diesen Code fehlerfrei. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Aber gut zu wissen! Danke!</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240506</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 09 Aug 2012 18:24:47 GMT</pubDate></item><item><title><![CDATA[Reply to Visual C++ (2010) Bug on Fri, 10 Aug 2012 00:38:49 GMT]]></title><description><![CDATA[<p>Imo ist das kein Bug, sondern exakt das vom Standard vorgesehene Verhalten. Du gehst da vermutlich einer afaik für Perfect Forwarding eingeführten Template Argument Deduction Rule auf den Leim: Wenn einem Function Template ein lvalue übergeben wird, wo eine rvalue Reference erwartet wird, dann ist der deduzierte Typ eine lvalue Reference (§ 14.8.2.1-3).</p>
<p>Edit: Allerdings sollte std::remove_reference trotzdem funktionieren. Möglicherweise hat es allerdings was damit zu tun, dass sich an rvalue References nach dem Release von VC10 noch was geändert hat...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240545</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Fri, 10 Aug 2012 00:38:49 GMT</pubDate></item><item><title><![CDATA[Reply to Visual C++ (2010) Bug on Fri, 10 Aug 2012 07:14:56 GMT]]></title><description><![CDATA[<p>dot schrieb:</p>
<blockquote>
<p>Du gehst da vermutlich einer afaik für Perfect Forwarding eingeführten Template Argument Deduction Rule auf den Leim:</p>
</blockquote>
<p>Nein. Die Regel ist mir bewusst. Man kann das Problem weiter auf</p>
<pre><code class="language-cpp">#include &lt;type_traits&gt;

int main()
{
	typedef std::remove_reference&lt;int(&amp;)()&gt;::type foo;
}
</code></pre>
<p>reduzieren, wobei eigentlich der Funktionstyp <code>int()</code> rauskommen sollte.</p>
<blockquote>
<p>Edit: Allerdings sollte std::remove_reference trotzdem funktionieren.</p>
</blockquote>
<p>So sehe ich das auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2240571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2240571</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 10 Aug 2012 07:14:56 GMT</pubDate></item></channel></rss>