<?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[[C++0x] decltype + überladene Funktionstemplates]]></title><description><![CDATA[<p>Hallo zusammen, folgendes Szenario:<br />
Fremdcode:</p>
<pre><code class="language-cpp">//boost/assign/ptr_map_inserter.hpp:
    template&lt; class PtrMap &gt;
    inline ptr_map_inserter&lt; PtrMap, typename PtrMap::mapped_reference &gt;
    ptr_map_insert( PtrMap&amp; m )
    {
        return ptr_map_inserter&lt; PtrMap, typename PtrMap::mapped_reference &gt;( m );
    }

    template&lt; class T, class PtrMap &gt;
    inline ptr_map_inserter&lt; PtrMap, T &gt;
    ptr_map_insert( PtrMap&amp; m )
    {
        return ptr_map_inserter&lt; PtrMap, T &gt;( m );
    }
</code></pre>
<pre><code class="language-cpp">#include &lt;boost/assign/ptr_map_inserter.hpp&gt; 

template &lt;class T&gt; class DataHandler
{
  /* ... */
};

  template &lt;class T, class PtrMap&gt;
  //boost::assign::ptr_map_inserter&lt;PtrMap, DataHandler&lt;T&gt;&gt;
handlerMapInsert(PtrMap&amp; map) -&gt; decltype (boost::assign::ptr_map_insert&lt;DataHandler&lt;T&gt;&gt;(map))
  {
    return (boost::assign::ptr_map_insert&lt;DataHandler&lt;T&gt;&gt;(map));
  }
</code></pre>
<p>Ergibt in MSVC2010</p>
<pre><code>???.cpp(13): error C3557: Eine Funktion kann nicht sowohl einen Rückgabetyp als auch einen spät angegebenen Rückgabetyp aufweisen.
???.cpp(13): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.
</code></pre>
<p>Vor allem die erste Fehlermeldung will mir nicht einleuchten. Wenn ich den decltype auskommentiere und den Rückgabetyp davor ein, dann passts. Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/290690/c-0x-decltype-überladene-funktionstemplates</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 09:21:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/290690.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 01 Aug 2011 13:25:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [C++0x] decltype + überladene Funktionstemplates on Mon, 01 Aug 2011 13:26:02 GMT]]></title><description><![CDATA[<p>Hallo zusammen, folgendes Szenario:<br />
Fremdcode:</p>
<pre><code class="language-cpp">//boost/assign/ptr_map_inserter.hpp:
    template&lt; class PtrMap &gt;
    inline ptr_map_inserter&lt; PtrMap, typename PtrMap::mapped_reference &gt;
    ptr_map_insert( PtrMap&amp; m )
    {
        return ptr_map_inserter&lt; PtrMap, typename PtrMap::mapped_reference &gt;( m );
    }

    template&lt; class T, class PtrMap &gt;
    inline ptr_map_inserter&lt; PtrMap, T &gt;
    ptr_map_insert( PtrMap&amp; m )
    {
        return ptr_map_inserter&lt; PtrMap, T &gt;( m );
    }
</code></pre>
<pre><code class="language-cpp">#include &lt;boost/assign/ptr_map_inserter.hpp&gt; 

template &lt;class T&gt; class DataHandler
{
  /* ... */
};

  template &lt;class T, class PtrMap&gt;
  //boost::assign::ptr_map_inserter&lt;PtrMap, DataHandler&lt;T&gt;&gt;
handlerMapInsert(PtrMap&amp; map) -&gt; decltype (boost::assign::ptr_map_insert&lt;DataHandler&lt;T&gt;&gt;(map))
  {
    return (boost::assign::ptr_map_insert&lt;DataHandler&lt;T&gt;&gt;(map));
  }
</code></pre>
<p>Ergibt in MSVC2010</p>
<pre><code>???.cpp(13): error C3557: Eine Funktion kann nicht sowohl einen Rückgabetyp als auch einen spät angegebenen Rückgabetyp aufweisen.
???.cpp(13): error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.
</code></pre>
<p>Vor allem die erste Fehlermeldung will mir nicht einleuchten. Wenn ich den decltype auskommentiere und den Rückgabetyp davor ein, dann passts. Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2100411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2100411</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 01 Aug 2011 13:26:02 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] decltype + überladene Funktionstemplates on Mon, 01 Aug 2011 13:31:56 GMT]]></title><description><![CDATA[<p>auto vor den Funktionsnamen machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2100417</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2100417</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 01 Aug 2011 13:31:56 GMT</pubDate></item><item><title><![CDATA[Reply to [C++0x] decltype + überladene Funktionstemplates on Mon, 01 Aug 2011 13:35:06 GMT]]></title><description><![CDATA[<p>KasF schrieb:</p>
<blockquote>
<p>auto vor den Funktionsnamen machen.</p>
</blockquote>
<p>gnarf. Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2100419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2100419</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 01 Aug 2011 13:35:06 GMT</pubDate></item></channel></rss>