<?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[decltype(expr)::member]]></title><description><![CDATA[<p>Der Code</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

int main()
{
	std::vector&lt;int&gt; v;
	decltype(v)::iterator i = v.begin();
}
</code></pre>
<p>kompiliert weder auf MSVC noch g++. Hingegen macht</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

int main()
{
	std::vector&lt;int&gt; v;
	typedef decltype(v) type;
	type::iterator i = v.begin();
}
</code></pre>
<p>keine Probleme.</p>
<p>Gibt es eine Regel im Standard, die direkten Memberzugriff eines <code>decltype</code> -Ausdrucks verbietet, oder handelt es sich lediglich um unausgereifte C++11-Unterstützung?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/291806/decltype-expr-member</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Jul 2026 16:26:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291806.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 27 Aug 2011 15:24:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to decltype(expr)::member on Sat, 27 Aug 2011 15:24:47 GMT]]></title><description><![CDATA[<p>Der Code</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

int main()
{
	std::vector&lt;int&gt; v;
	decltype(v)::iterator i = v.begin();
}
</code></pre>
<p>kompiliert weder auf MSVC noch g++. Hingegen macht</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

int main()
{
	std::vector&lt;int&gt; v;
	typedef decltype(v) type;
	type::iterator i = v.begin();
}
</code></pre>
<p>keine Probleme.</p>
<p>Gibt es eine Regel im Standard, die direkten Memberzugriff eines <code>decltype</code> -Ausdrucks verbietet, oder handelt es sich lediglich um unausgereifte C++11-Unterstützung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111358</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 27 Aug 2011 15:24:47 GMT</pubDate></item><item><title><![CDATA[Reply to decltype(expr)::member on Sat, 27 Aug 2011 15:34:55 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Gibt es eine Regel im Standard, die direkten Memberzugriff eines <code>decltype</code> -Ausdrucks verbietet, oder handelt es sich lediglich um unausgereifte C++11-Unterstützung?</p>
</blockquote>
<p>Ich glaube, decltype ist einfach nicht aufgezählt, bei wo was steht, was links von :: stehen darf.</p>
<p>Ich schätze, hiermit bist DU dann auch nicht glücklich.</p>
<pre><code class="language-cpp">#define decltype(x) ::std::identity&lt;decltype(x)&gt;::type
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2111364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111364</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 27 Aug 2011 15:34:55 GMT</pubDate></item><item><title><![CDATA[Reply to decltype(expr)::member on Sat, 27 Aug 2011 15:55:16 GMT]]></title><description><![CDATA[<p>Ich habe irgendwie in Erinnerung, dass diese &quot;Macke&quot; behoben wurde. (kann mich aber irren). Im besten Fall, unterstützen die Compiler das einfach noch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111373</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 27 Aug 2011 15:55:16 GMT</pubDate></item><item><title><![CDATA[Reply to decltype(expr)::member on Sat, 27 Aug 2011 15:55:19 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Ich glaube, decltype ist einfach nicht aufgezählt, bei wo was steht, was links von :: stehen darf.</p>
</blockquote>
<p>So habe ich das noch nicht gesehen. Ich bin bisher aber davon ausgegangen, der <code>decltype</code> -Ausdruck könnte 1:1 mit dem Typen seines Arguments ersetzt werden.</p>
<p>So wie ich es verstehe, sollte <code>decltype(expr)::member</code> eigentlich syntaktisch möglich sein:</p>
<p>N3290, §5.1.1 schrieb:</p>
<blockquote>
<p>unqualified-id:<br />
identifier<br />
operator-function-id<br />
conversion-function-id<br />
literal-operator-id<br />
~ class-name<br />
~ decltype-specifier<br />
template-id</p>
<p>qualified-id:<br />
<strong>nested-name-specifier template<sub>opt</sub> unqualified-id</strong><br />
:: identifier<br />
:: operator-function-id<br />
:: literal-operator-id<br />
:: template-id</p>
<p>nested-name-specifier:<br />
::opt type-name ::<br />
::opt namespace-name ::<br />
<strong>decltype-specifier ::</strong><br />
nested-name-specifier identifier ::<br />
nested-name-specifier templateopt simple-template-id ::</p>
</blockquote>
<p>Und der Vollständigkeit halber:</p>
<p>§7.1.6.2/4 schrieb:</p>
<blockquote>
<p>The type denoted by <code>decltype(e)</code> is defined as follows:<br />
— if e is an unparenthesized <em>id-expression</em> or an unparenthesized class member access (5.2.5), <code>decltype(e)</code> is the type of the entity named by <code>e</code> . [...]</p>
</blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>Ich schätze, hiermit bist DU dann auch nicht glücklich.</p>
<pre><code class="language-cpp">#define decltype(x) ::std::identity&lt;decltype(x)&gt;::type
</code></pre>
</blockquote>
<p>Interessante Idee, sonst wäre auch <code>typeof</code> eine Möglichkeit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111374</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 27 Aug 2011 15:55:19 GMT</pubDate></item><item><title><![CDATA[Reply to decltype(expr)::member on Sat, 27 Aug 2011 16:00:49 GMT]]></title><description><![CDATA[<p>Dein Zitat von N3290 klingt überzeugen. Also ist wohl die Macke behoben. Und das Makro muß tatsächlich her und die Lücke füllen, bis der Compiler repariert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111377</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 27 Aug 2011 16:00:49 GMT</pubDate></item><item><title><![CDATA[Reply to decltype(expr)::member on Sat, 27 Aug 2011 16:12:55 GMT]]></title><description><![CDATA[<p>Jetzt bin ich gerade auf den <a href="http://connect.microsoft.com/VisualStudio/feedback/details/613565/incorrect-parsing-of-expressions-with-decltype" rel="nofollow">Bug-Report für MSVC</a> gestossen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111382</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 27 Aug 2011 16:12:55 GMT</pubDate></item><item><title><![CDATA[Reply to decltype(expr)::member on Sun, 28 Aug 2011 10:12:07 GMT]]></title><description><![CDATA[<blockquote>
<pre><code class="language-cpp">#include &lt;vector&gt;

int main()
{
    std::vector&lt;int&gt; v;
    decltype(v)::iterator i = v.begin();
}
</code></pre>
</blockquote>
<p>Wäre in dem Fall</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

int main()
{
    std::vector&lt;int&gt; v;
    auto i = v.begin();
}
</code></pre>
<p>Nicht die einfachere Lösung?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111567</guid><dc:creator><![CDATA[gastgast]]></dc:creator><pubDate>Sun, 28 Aug 2011 10:12:07 GMT</pubDate></item><item><title><![CDATA[Reply to decltype(expr)::member on Sun, 28 Aug 2011 10:21:04 GMT]]></title><description><![CDATA[<p>Doch, aber das sollte nur ein Minimalbeispiel sein. In einigen Situationen( z.B. bei Klassentemplateparametern) braucht man den Typen nach wie vor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2111568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2111568</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 28 Aug 2011 10:21:04 GMT</pubDate></item></channel></rss>