<?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[typename trouble]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin gerade dabei, ein Stück Code mit Visual C++ lauffähig zu machen. Das nachfolgende Beispiel illustriert das Problem, das ich dabei habe:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
  struct SomeType
{};

template &lt;typename T&gt;
  struct TemplateTypedef
{
  typedef SomeType &lt;T&gt; type;
};

#define SOME_DEFINITION_1(T) TemplateTypedef&lt;T&gt;::type theVar1;
#define SOME_DEFINITION_2(T) typename TemplateTypedef&lt;T&gt;::type theVar2;

class NormalClass
{
  SOME_DEFINITION_1 (int)
  SOME_DEFINITION_2 (int) // (1)
};

template &lt;typename T&gt;
  struct ClassTemplate
{
  SOME_DEFINITION_1 (T) // (2)
  SOME_DEFINITION_2 (T)
};
</code></pre>
<p>BCC ist bei der Verwendung von 'typename' nicht zimperlich und kompiliert alles anstandslos. Comeau C++ und Visual C++ allerdings beklagen sich über die Zeilen (1) und (2): in (1) soll das 'typename' nicht erlaubt sein, in (2) soll es fehlen. Das sehe ich zwar ein, aber es steht der Konsistenz gerade sehr im Wege - in diesem Fall bräuchte ich verschiedene Makros für die Verwendung in und außerhalb von Klassentemplates.</p>
<p>Wenn ich bei Comeau C++ die C++-0x-Extensions aktiviere, akzeptiert es (1), VC habe ich aber bisher nicht dazu bringen können. Nun stelle ich mir diese Fragen:</p>
<p>- Gibt es irgendeinen Switch, der VC dazu bringt, eine der Varianten, möglichst die mit 'typename', durchgängig zu akzeptieren? Ich verwende VC 2005, wenn es wirklich sein muß, kann ich aber auch auf aktuellere Versionen wechseln.<br />
- Wäre ansonsten irgendein Workaround denkbar, der ohne das Verändern aller Makro-Aufrufe in oder außerhalb Templates auskommt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264758/typename-trouble</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 13:20:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264758.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 Apr 2010 13:57:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to typename trouble on Mon, 12 Apr 2010 13:57:10 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin gerade dabei, ein Stück Code mit Visual C++ lauffähig zu machen. Das nachfolgende Beispiel illustriert das Problem, das ich dabei habe:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
  struct SomeType
{};

template &lt;typename T&gt;
  struct TemplateTypedef
{
  typedef SomeType &lt;T&gt; type;
};

#define SOME_DEFINITION_1(T) TemplateTypedef&lt;T&gt;::type theVar1;
#define SOME_DEFINITION_2(T) typename TemplateTypedef&lt;T&gt;::type theVar2;

class NormalClass
{
  SOME_DEFINITION_1 (int)
  SOME_DEFINITION_2 (int) // (1)
};

template &lt;typename T&gt;
  struct ClassTemplate
{
  SOME_DEFINITION_1 (T) // (2)
  SOME_DEFINITION_2 (T)
};
</code></pre>
<p>BCC ist bei der Verwendung von 'typename' nicht zimperlich und kompiliert alles anstandslos. Comeau C++ und Visual C++ allerdings beklagen sich über die Zeilen (1) und (2): in (1) soll das 'typename' nicht erlaubt sein, in (2) soll es fehlen. Das sehe ich zwar ein, aber es steht der Konsistenz gerade sehr im Wege - in diesem Fall bräuchte ich verschiedene Makros für die Verwendung in und außerhalb von Klassentemplates.</p>
<p>Wenn ich bei Comeau C++ die C++-0x-Extensions aktiviere, akzeptiert es (1), VC habe ich aber bisher nicht dazu bringen können. Nun stelle ich mir diese Fragen:</p>
<p>- Gibt es irgendeinen Switch, der VC dazu bringt, eine der Varianten, möglichst die mit 'typename', durchgängig zu akzeptieren? Ich verwende VC 2005, wenn es wirklich sein muß, kann ich aber auch auf aktuellere Versionen wechseln.<br />
- Wäre ansonsten irgendein Workaround denkbar, der ohne das Verändern aller Makro-Aufrufe in oder außerhalb Templates auskommt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1881611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1881611</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Mon, 12 Apr 2010 13:57:10 GMT</pubDate></item></channel></rss>