<?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-Template-Argumente, Defaultargumente und VC++ 2010]]></title><description><![CDATA[<p>Ich habe einigen Code, der sowas macht:</p>
<pre><code class="language-cpp">template &lt;typename T, template &lt;typename T&gt; class ContT&gt;
        static void pushBackOrFree (ContT&lt;T*&gt;&amp; cont, T* value);
</code></pre>
<p>In C++Builder funktioniert das auch schön, aber VC++ 2010 scheint zu erwarten, daß ich da schön alle Template-Argumente von ContT aufliste, also auch den Allokator und weitere Argumente, etwa bei std::basic_string&lt;&gt; noch den Trait-Parameter. Das finde ich natürlich ziemlich lästig, habe etwas nachgeforscht und <a href="http://www.progdoc.de/papers/ttp/psi-ttp.pdf" rel="nofollow">dieses Paper</a> gefunden, das in einer Fußnote auf S. 4 behauptet:</p>
<blockquote>
<p>The C++ Standardization Committee currently discusses if this a defect, inadequately restricting library writers.</p>
</blockquote>
<p>Das hieße also, VC++ hat recht und C++Builder ist zu nachlässig, was ich mir schon gedacht hatte.</p>
<p>Weiß jemand, ob das in C++11 behoben wurde? Oder kann man sich ansonsten darauf verlassen, daß alle Standard-Container exakt zwei Template-Argumente haben und nicht irgendein STL-Anbieter (z.B. frühere Versionen der STL von SGI, wie das zitierte Paper behauptet) zusätzliche Argumente mit Defaultwerten hinzufügt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/308130/template-template-argumente-defaultargumente-und-vc-2010</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 02:03:50 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/308130.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 Sep 2012 22:41:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template-Template-Argumente, Defaultargumente und VC++ 2010 on Sat, 15 Sep 2012 22:41:56 GMT]]></title><description><![CDATA[<p>Ich habe einigen Code, der sowas macht:</p>
<pre><code class="language-cpp">template &lt;typename T, template &lt;typename T&gt; class ContT&gt;
        static void pushBackOrFree (ContT&lt;T*&gt;&amp; cont, T* value);
</code></pre>
<p>In C++Builder funktioniert das auch schön, aber VC++ 2010 scheint zu erwarten, daß ich da schön alle Template-Argumente von ContT aufliste, also auch den Allokator und weitere Argumente, etwa bei std::basic_string&lt;&gt; noch den Trait-Parameter. Das finde ich natürlich ziemlich lästig, habe etwas nachgeforscht und <a href="http://www.progdoc.de/papers/ttp/psi-ttp.pdf" rel="nofollow">dieses Paper</a> gefunden, das in einer Fußnote auf S. 4 behauptet:</p>
<blockquote>
<p>The C++ Standardization Committee currently discusses if this a defect, inadequately restricting library writers.</p>
</blockquote>
<p>Das hieße also, VC++ hat recht und C++Builder ist zu nachlässig, was ich mir schon gedacht hatte.</p>
<p>Weiß jemand, ob das in C++11 behoben wurde? Oder kann man sich ansonsten darauf verlassen, daß alle Standard-Container exakt zwei Template-Argumente haben und nicht irgendein STL-Anbieter (z.B. frühere Versionen der STL von SGI, wie das zitierte Paper behauptet) zusätzliche Argumente mit Defaultwerten hinzufügt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251525</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Sat, 15 Sep 2012 22:41:56 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Template-Argumente, Defaultargumente und VC++ 2010 on Sun, 16 Sep 2012 00:03:26 GMT]]></title><description><![CDATA[<p>Mich würd sehr interessieren, von wann dieses Paper ist. Da gibt es nicht zu beheben. Bei template template Parametern musst du eine passende Argumentliste angeben. Der C++ Standard legt genau fest, welche Argumente die Standard Container haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251528</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251528</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sun, 16 Sep 2012 00:03:26 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Template-Argumente, Defaultargumente und VC++ 2010 on Sun, 16 Sep 2012 00:28:23 GMT]]></title><description><![CDATA[<p>Gcc frisst mit -std=c++11 Folgendes:</p>
<pre><code class="language-cpp">template&lt;template&lt;typename&gt; class&gt; struct foo { };

template&lt;typename T&gt; using bar = std::vector&lt;T&gt;;

foo&lt;bar&gt; baz;
</code></pre>
<p>Ich bin mit dem neuen Standard noch nicht vertraut genug, um mich für die Konformität dieses Ansatzes zu verbürgen, aber für den Moment ist das ein Workaround.</p>
<p>Wobei es erfahrungsgemäß in aller Regel sinnvoller ist, komplett konkretisierte Typen als Parameter anzugeben; die Standardcontainer haben ja den Allokator auch nicht als template&lt;typename&gt; class-Parameter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251530</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 16 Sep 2012 00:28:23 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Template-Argumente, Defaultargumente und VC++ 2010 on Sun, 16 Sep 2012 00:46:50 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;typename...&gt; class ContT
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2251532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251532</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sun, 16 Sep 2012 00:46:50 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Template-Argumente, Defaultargumente und VC++ 2010 on Sun, 16 Sep 2012 01:32:23 GMT]]></title><description><![CDATA[<p>Vielen Dank für die Antworten.</p>
<p>dot schrieb:</p>
<blockquote>
<p>Mich würd sehr interessieren, von wann dieses Paper ist.</p>
</blockquote>
<p>Adobe Reader zufolge vom 17.06.2002.</p>
<p>dot schrieb:</p>
<blockquote>
<p>Da gibt es nicht zu beheben. Bei template template Parametern musst du eine passende Argumentliste angeben.</p>
</blockquote>
<p>Wunderbar - aber das hilft mir nichts, wenn ich std::basic_string&lt;&gt; <em>und</em> std::vector&lt;&gt; unterstützen will.</p>
<blockquote>
<p>Der C++ Standard legt genau fest, welche Argumente die Standard Container haben.</p>
</blockquote>
<p>Wenigstens das. So sieht denn auch mein Workaround aus - den Allokator aufzählen ist zwar häßlich, aber es funktioniert; und für die Situation, wo string und vector möglich waren, war es tatsächlich einfacher, einen gewöhnlichen Templateparameter zu übergeben.</p>
<p>Kellerautomat schrieb:</p>
<blockquote>
<pre><code class="language-cpp">template &lt;typename...&gt; class ContT
</code></pre>
</blockquote>
<p>Wenn VC++ und C++Builder nur variadic templates könnten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251533</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Sun, 16 Sep 2012 01:32:23 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Template-Argumente, Defaultargumente und VC++ 2010 on Sun, 16 Sep 2012 02:48:16 GMT]]></title><description><![CDATA[<p>Welchen Sinn hat das ganze überhaupt, wenn du das Template eh direkt wieder instanziierst. Lass dir doch nen normalen Typen geben, und wenn du unbedingt willst dass keine Konvertierung durchgeführt wird, frage static_assert oder enable_if.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251535</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sun, 16 Sep 2012 02:48:16 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Template-Argumente, Defaultargumente und VC++ 2010 on Sun, 16 Sep 2012 07:01:39 GMT]]></title><description><![CDATA[<p>audacia schrieb:</p>
<blockquote>
<p>Ich habe einigen Code, der sowas macht:</p>
<pre><code class="language-cpp">template &lt;typename T, template &lt;typename T&gt; class ContT&gt;  
    static void pushBackOrFree (ContT&lt;T*&gt;&amp; cont, T* value);
</code></pre>
</blockquote>
<p>Was du hättest schreiben sollen:</p>
<pre><code class="language-cpp">template &lt;typename T, class Cont&gt;  
    static void pushBackOrFree (Cont&amp; cont, T* value);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2251542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251542</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 16 Sep 2012 07:01:39 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Template-Argumente, Defaultargumente und VC++ 2010 on Sun, 16 Sep 2012 08:32:48 GMT]]></title><description><![CDATA[<p>audacia schrieb:</p>
<blockquote>
<p>dot schrieb:</p>
<blockquote>
<p>Da gibt es nicht zu beheben. Bei template template Parametern musst du eine passende Argumentliste angeben.</p>
</blockquote>
<p>Wunderbar - aber das hilft mir nichts, wenn ich std::basic_string&lt;&gt; <em>und</em> std::vector&lt;&gt; unterstützen will.</p>
</blockquote>
<p>Wieso genau muss es eigentlich ein template template Parameter sein?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251555</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sun, 16 Sep 2012 08:32:48 GMT</pubDate></item><item><title><![CDATA[Reply to Template-Template-Argumente, Defaultargumente und VC++ 2010 on Sun, 16 Sep 2012 15:33:27 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>audacia schrieb:</p>
<blockquote>
<p>Ich habe einigen Code, der sowas macht:</p>
<pre><code class="language-cpp">template &lt;typename T, template &lt;typename T&gt; class ContT&gt;  
    static void pushBackOrFree (ContT&lt;T*&gt;&amp; cont, T* value);
</code></pre>
</blockquote>
<p>Was du hättest schreiben sollen:</p>
<pre><code class="language-cpp">template &lt;typename T, class Cont&gt;  
    static void pushBackOrFree (Cont&amp; cont, T* value);
</code></pre>
</blockquote>
<p>Das wäre schon hier nicht mehr ausreichend gewesen:</p>
<pre><code class="language-cpp">template &lt;typename T, template &lt;typename T&gt; class ContT&gt;  
    static void destroy(ContT&lt;T*&gt;&amp; cont)
{
    for (ContT&lt;T*&gt;::iterator i = cont.begin (), e = cont.end (); i != e; ++i)
        i-&gt;~T ();
}
</code></pre>
<p>Andererseits, vielleicht hätte ich</p>
<pre><code class="language-cpp">template &lt;typename T, template Cont&gt;
    static void destroy(Cont&amp; cont)
{
    for (Cont::iterator i = cont.begin (), e = cont.end (); i != e; ++i)
        i-&gt;~Cont::value_type ();
}
</code></pre>
<p>schreiben können. Werde ich mal probieren.</p>
<p>dot schrieb:</p>
<blockquote>
<p>Wieso genau muss es eigentlich ein template template Parameter sein?</p>
</blockquote>
<p>Das war in einem anderen Fall, da fand ich es eleganter,</p>
<pre><code class="language-cpp">MyTrie&lt;char, PayloadType, std::basic_string&gt;
MyTrie&lt;std::string, PayLoadType, std::vector&gt;
</code></pre>
<p>schreiben zu können anstelle von</p>
<pre><code class="language-cpp">MyTrie&lt;char, PayloadType, std::string&gt;
MyTrie&lt;std::string, PayLoadType, std::vector&lt;std::string&gt; &gt;
</code></pre>
<p>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2251649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2251649</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Sun, 16 Sep 2012 15:33:27 GMT</pubDate></item></channel></rss>