<?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[scopes, sichtbarkeit, namen und sonderregeln (theoretische frage)]]></title><description><![CDATA[<p>hallo,<br />
ich lese grad nach langer zeit (wieder einmal) den stroustrup in der aktuellsten fassung und probiere so nebenbei ein paar dinge aus, die eher theoretischer natur sind. dabei bin ich auf folgendes beispiel gestoßen, und ich weiß nicht, ob und warum es funktionieren (kompilieren) sollte oder nicht:</p>
<pre><code class="language-cpp">class klass { 
    public:
      klass (class klass (*klass) (class klass))
          :klass(klass){} 

      klass (*klass) (klass); 

} klass { nullptr };
</code></pre>
<p>vor allem im verhältnis dazu (clang schluckt es mir problemlos):</p>
<pre><code class="language-cpp">class klass { 
    public:
       klass (*klass) (klass); 

} klass { nullptr };
</code></pre>
<p>ohne funktionszeiger (nur zeiger auf class klass) erhalte ich wiederum andere fehlermeldungen. könnte jemand erläutern, was hier standardkonformes verhalten ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/338706/scopes-sichtbarkeit-namen-und-sonderregeln-theoretische-frage</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Apr 2026 10:15:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338706.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 04 Jul 2016 15:31:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to scopes, sichtbarkeit, namen und sonderregeln (theoretische frage) on Mon, 04 Jul 2016 15:31:50 GMT]]></title><description><![CDATA[<p>hallo,<br />
ich lese grad nach langer zeit (wieder einmal) den stroustrup in der aktuellsten fassung und probiere so nebenbei ein paar dinge aus, die eher theoretischer natur sind. dabei bin ich auf folgendes beispiel gestoßen, und ich weiß nicht, ob und warum es funktionieren (kompilieren) sollte oder nicht:</p>
<pre><code class="language-cpp">class klass { 
    public:
      klass (class klass (*klass) (class klass))
          :klass(klass){} 

      klass (*klass) (klass); 

} klass { nullptr };
</code></pre>
<p>vor allem im verhältnis dazu (clang schluckt es mir problemlos):</p>
<pre><code class="language-cpp">class klass { 
    public:
       klass (*klass) (klass); 

} klass { nullptr };
</code></pre>
<p>ohne funktionszeiger (nur zeiger auf class klass) erhalte ich wiederum andere fehlermeldungen. könnte jemand erläutern, was hier standardkonformes verhalten ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2501208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501208</guid><dc:creator><![CDATA[dove]]></dc:creator><pubDate>Mon, 04 Jul 2016 15:31:50 GMT</pubDate></item><item><title><![CDATA[Reply to scopes, sichtbarkeit, namen und sonderregeln (theoretische frage) on Mon, 04 Jul 2016 16:20:54 GMT]]></title><description><![CDATA[<p>dove schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class klass { 
    public:
      klass (class klass (*klass) (class klass))
          :klass(klass){} 
    
      klass (*klass) (klass); 
    
    
} klass { nullptr };
</code></pre>
</blockquote>
<p>An dem Konstruktor ist nichts auszusetzen; wenn ein Konstruktor deklariert wird, dürfen allerdings nicht-statische Member nicht den gleichen Namen wie die Klasse haben.</p>
<p>dove schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class klass { 
    public:
       klass (*klass) (klass); 
   
} klass { nullptr };
</code></pre>
</blockquote>
<p>Die Definition des Zeigers klass darf so nicht erfolgen:<br />
Ein Programm ist fehlerhaft (ill-formed), wenn sich die Bedeutung einer Memberdeklaration änderte, wenn einer Klassendefinition ein zweites mal geparsed wird:<br />
Im ersten Durchgang würden in<br />
<strong>klass</strong> (*klass) (<strong>klass</strong>)<br />
die fetten klass auf die Klasse klass verweisen, mithin ist das eine Definition eines Funktionszeigers.<br />
Im zweiten Durchgang würden sie hingegen auf den Zeiger klass verweisen (weil die Deklaration eines Objektes die Deklaration eines Typs im gleichen Scope (hier: der injizierte Klassenname) verdeckt), dass ist dann nat. keine gültige Definition mehr.<br />
Das ist einer der Fälle, in denen der Standard den Compiler nicht verpflicht einen Fehler zu melden.</p>
<blockquote>
<p>A name N used in a class S shall refer to the same declaration in its context and when re-evaluated in<br />
the completed scope of S. No diagnostic is required for a violation of this rule.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2501215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501215</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 04 Jul 2016 16:20:54 GMT</pubDate></item><item><title><![CDATA[Reply to scopes, sichtbarkeit, namen und sonderregeln (theoretische frage) on Mon, 04 Jul 2016 19:32:19 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>wenn ein Konstruktor deklariert wird, dürfen allerdings nicht-statische Member nicht den gleichen Namen wie die Klasse haben.</p>
</blockquote>
<blockquote>
<p>No diagnostic is required for a violation of this rule.</p>
</blockquote>
<p>vielen dank für die schnellen und präzisen antworten <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/2501230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2501230</guid><dc:creator><![CDATA[dove]]></dc:creator><pubDate>Mon, 04 Jul 2016 19:32:19 GMT</pubDate></item></channel></rss>