<?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[high sophisticated Compile Fehler .. verschwindet]]></title><description><![CDATA[<p>Hallo Experten,</p>
<p>um es kurz zu machen: folgendes - auf das notwendigste reduzierte - Programm generiert einen Fehler in Zeile 48 nachdem die Klasse Pups hinzugefügt wurde:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Base
{
public:
    virtual ~Base() =0 {}
    friend std::ostream&amp; operator&lt;&lt;( std::ostream&amp; out, const Base&amp; base )
    {
        base.print( out );
        return out;
    }
protected:
    virtual void print( std::ostream&amp; out ) const =0;
};

class Foo : public Base
{
protected:
    virtual void print( std::ostream&amp; out ) const
    {
        out &lt;&lt; &quot;I'm Foo&quot;;
    }
};

class Pups
{
public:
    template&lt; typename T &gt;
    /*implizit!*/ Pups( T x ) 
        : m_x( static_cast&lt; unsigned char &gt;( x ) ) {}
    template&lt; typename E, typename Traits &gt; friend
        std::basic_ostream&lt; E, Traits &gt;&amp; operator&lt;&lt;( std::basic_ostream&lt; E, Traits &gt;&amp; out, Pups pups );
private:
    unsigned char m_x;
};

template&lt; typename E, typename Traits &gt;
    std::basic_ostream&lt; E, Traits &gt;&amp; operator&lt;&lt;( std::basic_ostream&lt; E, Traits &gt;&amp; out, Pups pups )
{
    return out &lt;&lt; &quot;Pups &quot; &lt;&lt; unsigned( pups.m_x );
}

int main()
{
    using namespace std;
    Foo foo;
    Base* ptr_Base = &amp;foo;
    cout &lt;&lt; *ptr_Base &lt;&lt; endl; // compilert nicht wg. 'cannot instantiate abstract class'
    return 0;
}
</code></pre>
<p>warum das geschieht ist klar. Der Compiler versucht in Zeile 48 aus einer Base&amp; ein Pups-Objekt zu machen, wozu es aber kopiert werden muss, was nicht geht.</p>
<p>Ok - das interessante dabei ist jetzt, der gleiche Fehler tritt nicht mehr auf, wenn ich den Streaming-Operator von Pups inline mache, also die Zeilen 39-41 nach Zeile 33 in die Klassendefinition verschiebe. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Kann jemand erklären warum das so ist? Bzw. wodurch unterscheiden sich diese beiden friend-Funktionen von einander?<br />
Verwendete Compiler: VC8 und Comeau 4.3.10. Das Verhalten ist bei beiden Compiler das selbe.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271550/high-sophisticated-compile-fehler-verschwindet</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 07:51:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271550.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 30 Jul 2010 12:53:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Fri, 30 Jul 2010 12:53:53 GMT]]></title><description><![CDATA[<p>Hallo Experten,</p>
<p>um es kurz zu machen: folgendes - auf das notwendigste reduzierte - Programm generiert einen Fehler in Zeile 48 nachdem die Klasse Pups hinzugefügt wurde:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

class Base
{
public:
    virtual ~Base() =0 {}
    friend std::ostream&amp; operator&lt;&lt;( std::ostream&amp; out, const Base&amp; base )
    {
        base.print( out );
        return out;
    }
protected:
    virtual void print( std::ostream&amp; out ) const =0;
};

class Foo : public Base
{
protected:
    virtual void print( std::ostream&amp; out ) const
    {
        out &lt;&lt; &quot;I'm Foo&quot;;
    }
};

class Pups
{
public:
    template&lt; typename T &gt;
    /*implizit!*/ Pups( T x ) 
        : m_x( static_cast&lt; unsigned char &gt;( x ) ) {}
    template&lt; typename E, typename Traits &gt; friend
        std::basic_ostream&lt; E, Traits &gt;&amp; operator&lt;&lt;( std::basic_ostream&lt; E, Traits &gt;&amp; out, Pups pups );
private:
    unsigned char m_x;
};

template&lt; typename E, typename Traits &gt;
    std::basic_ostream&lt; E, Traits &gt;&amp; operator&lt;&lt;( std::basic_ostream&lt; E, Traits &gt;&amp; out, Pups pups )
{
    return out &lt;&lt; &quot;Pups &quot; &lt;&lt; unsigned( pups.m_x );
}

int main()
{
    using namespace std;
    Foo foo;
    Base* ptr_Base = &amp;foo;
    cout &lt;&lt; *ptr_Base &lt;&lt; endl; // compilert nicht wg. 'cannot instantiate abstract class'
    return 0;
}
</code></pre>
<p>warum das geschieht ist klar. Der Compiler versucht in Zeile 48 aus einer Base&amp; ein Pups-Objekt zu machen, wozu es aber kopiert werden muss, was nicht geht.</p>
<p>Ok - das interessante dabei ist jetzt, der gleiche Fehler tritt nicht mehr auf, wenn ich den Streaming-Operator von Pups inline mache, also die Zeilen 39-41 nach Zeile 33 in die Klassendefinition verschiebe. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Kann jemand erklären warum das so ist? Bzw. wodurch unterscheiden sich diese beiden friend-Funktionen von einander?<br />
Verwendete Compiler: VC8 und Comeau 4.3.10. Das Verhalten ist bei beiden Compiler das selbe.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934021</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 30 Jul 2010 12:53:53 GMT</pubDate></item><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Fri, 30 Jul 2010 12:59:36 GMT]]></title><description><![CDATA[<p>Weil keine Kopie angelegt werden muss, weil kein Konstruktor aufgerufen werden muss, weil kein Objekt erzeugt werden muss, ...?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934026</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 30 Jul 2010 12:59:36 GMT</pubDate></item><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Fri, 30 Jul 2010 13:29:15 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Weil keine Kopie angelegt werden muss, weil kein Konstruktor aufgerufen werden muss, weil kein Objekt erzeugt werden muss, ...?</p>
</blockquote>
<p>.. das würde bedeuten: Der Compiler versucht *ptr_Base nach Pups&lt; Base &gt; zu konvertieren und merkt - da es jetzt inline ist - erst beim static_cast&lt;unsigend char&gt;, dass das nicht geht. Nach dem Motto SFINAE verwirft er diese Variante, ohne einen Fehler zu melden, und versucht es mit dem Streamingoperator von Base; was funktioniert.</p>
<p>ist das so richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934048</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 30 Jul 2010 13:29:15 GMT</pubDate></item><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Fri, 30 Jul 2010 15:00:33 GMT]]></title><description><![CDATA[<p>Keine Ahnung: Ich habs grad mal mit g++ 4.4.1 uebersetzt und er meckert schon bei:</p>
<pre><code class="language-cpp">virtual ~Base() =0 {}
</code></pre>
<p>Sehe ich auch zum ersten Mal. Bei virtuellen Destruktoren wird sichergestellt, dass alle Basisklassendestruktoren aufgerufen werden. Am Ende der Kette steht also ein Aufruf einer pure virtual function.</p>
<p>Ist das korrigiert wird, werden beide Varianten ohne Probleme uebersetzt und es wird &quot;I'm Foo&quot; ausgegeben. Wahrscheinlich ein Compilerbug.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934087</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 30 Jul 2010 15:00:33 GMT</pubDate></item><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Fri, 30 Jul 2010 14:59:14 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Keine Ahnung: Ich habs grad mal mit g++ 4.4.1 uebersetzt und er meckert schon bei:</p>
<pre><code class="language-cpp">virtual ~Base() =0 {}
</code></pre>
<p>Sehe ich auch zum ersten Mal. Bei virtuellen Destruktoren wird sichergestellt, dass alle Basisklassendestruktoren aufgerufen werden. Am Ende der Kette steht also ein Aufruf einer pure virtual function.</p>
</blockquote>
<p>Das würde mich jetzt auch wundern, wenn's da keine Mecker gäbe. Was soll das denn bitte sein? <code>=0</code> und Funktiondefinition durch <code>{}</code> schließen sich gegenseitig aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934088</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 30 Jul 2010 14:59:14 GMT</pubDate></item><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Fri, 30 Jul 2010 15:13:07 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<pre><code class="language-cpp">virtual ~Base() =0 {}
</code></pre>
<p>Das würde mich jetzt auch wundern, wenn's da keine Mecker gäbe. Was soll das denn bitte sein? <code>=0</code> und Funktiondefinition durch <code>{}</code> schließen sich gegenseitig aus.</p>
</blockquote>
<p>Ja - ausgenommen beim Destruktor. Den Tipp habe ich aus einem der Scott Meyers Bücher. Man spart sich halt den Body des Destruktors und erzwingt eine abstrakte Basisklasse<br />
.. aber das ist hier nicht das Thema. Wäre nett, wenn sich noch mal jemand meiner ursprünglichen Frage zuwenden würde. Ich bin noch nicht ganz überzeugt.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934099</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 30 Jul 2010 15:13:07 GMT</pubDate></item><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Fri, 30 Jul 2010 15:37:03 GMT]]></title><description><![CDATA[<p>Und warum sagt g++: test.cpp:6: Fehler: pure-specifier on function-definition? Desweiteren ist der Fehler &quot;inline&quot; mit g++ nicht reproduzierbar. Was willst du mehr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934108</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 30 Jul 2010 15:37:03 GMT</pubDate></item><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Fri, 30 Jul 2010 15:53:50 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Ja - ausgenommen beim Destruktor.</p>
</blockquote>
<p>Der Standard sagt etwas anderes.</p>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Den Tipp habe ich aus einem der Scott Meyers Bücher.</p>
</blockquote>
<p>Jedenfalls nicht in den Effective-Büchern.</p>
<p>Die zu Pups gehörende Überladung wird, wenn sie außerhalb von Pups defeiniert wird, per unqualifziertem Lookup gefunden. Da es hier zu einem Substitutionsfehler kommt, muss diese Überladung aber verworfen werden. Selbst ohne SFINAE wäre es jedenfalls eine schlechtere Überladung als die zu base gehörende (Standartkonvertierung vs. Konvertierung mittels Konstruktor beim 2. Parameter). Da die fehlerhafte Destruktordeklaration bereits gemeldet wird, steht es dem Compiler frei, danach noch jede Menge Unfug zu melden (das könnte hier z.B. daran liegen, dass die Base-Definition eben wegen der Fehlerhaften Destruktordeklaration unvollständig bleibt und der Compiler beim weiteren Parsen unsicher ist, ob denn nun ein Copykonstruktor möglich ist oder nicht. Jedenfalls sind alle gemeldeten Folgefehler ohne große Relevanz.</p>
<p>Wird der zu Pups gehörende Operator inline in Pups definiert, wird er in dem Ausdruck</p>
<pre><code class="language-cpp">cout &lt;&lt; *ptr_Base
</code></pre>
<p>gar nicht erst gefunden werden (weil eine friend-Deklaration den entsprechenden Namen nicht in den umligenden Namensraum injiziert und ADNL die Klasse Pups gar nicht erst betrachtet), folglich wird auch keine Fehlermeldung produziert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934114</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 30 Jul 2010 15:53:50 GMT</pubDate></item><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Fri, 30 Jul 2010 16:01:05 GMT]]></title><description><![CDATA[<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Bzw. wodurch unterscheiden sich diese beiden friend-Funktionen von einander?</p>
</blockquote>
<p>Der C++-Standard sagt dazu:</p>
<p>Friends §11.4/5 schrieb:</p>
<blockquote>
<p>A function can be defined in a friend declaration of a class if and only if the class is a non-local class (9.8),<br />
the function name is unqualified, and the function has namespace scope. [Example:</p>
<pre><code class="language-cpp">class M {
friend void f() { } // definition of global f, a friend of M,
// not the definition of a member function
};
</code></pre>
<p>—end example] Such a function is implicitly inline. A friend function defined in a class is in the (lexical) scope of the class in which it is defined. A friend function defined outside the class is not (3.4.1).</p>
</blockquote>
<p>Unqualified name lookup §3.4.1/9 schrieb:</p>
<blockquote>
<p>Name lookup for a name used in the definition of a friend function (11.4) defined inline in the class granting friendship shall proceed as described for lookup in member function definitions. If the friend function is not defined in the class granting friendship, name lookup in the friend function definition shall proceed as described for lookup in namespace member function definitions</p>
</blockquote>
<p>Also wird ADL nicht in beiden Fällen herangezogen.</p>
<p><em>Edit: camper war schneller und ausführlicher</em> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934116</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 30 Jul 2010 16:01:05 GMT</pubDate></item><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Fri, 30 Jul 2010 16:07:37 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Ja - ausgenommen beim Destruktor.</p>
</blockquote>
<p>Der Standard sagt etwas anderes.</p>
</blockquote>
<p>Richtig. Der Standard sagt, dass für alle pure-virtual-Funktionen eine Implementation bereitgestellt werden kann.</p>
<p>camper schrieb:</p>
<blockquote>
<p>Werner Salomon schrieb:</p>
<blockquote>
<p>Den Tipp habe ich aus einem der Scott Meyers Bücher.</p>
</blockquote>
<p>Jedenfalls nicht in den Effective-Büchern.</p>
</blockquote>
<p>Effective C++, Third Edition, Item 34 (S. 166/167).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934120</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 30 Jul 2010 16:07:37 GMT</pubDate></item><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Fri, 30 Jul 2010 16:13:27 GMT]]></title><description><![CDATA[<blockquote>
<p>&gt; Effective C++, Third Edition, Item 34 (S. 166/167).</p>
</blockquote>
<p>Nicht in der deutschen von Addison Wesley.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934123</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Fri, 30 Jul 2010 16:13:27 GMT</pubDate></item><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Fri, 30 Jul 2010 16:27:35 GMT]]></title><description><![CDATA[<p>Effective C++, Item 34 schrieb:</p>
<blockquote>
<p>(...)</p>
<p>Some people object to the idea of having separate functions for prividing interface and default implementation, such as <em>fly</em> and <em>defaultFly</em> above. For one thing, they note, it pollutes the class namespace with a proliferation of closely related function names. Yet they still agree that interface and default implementation should be separated. How do they resolve this seeming contradiction? By taking advantage of the fact that pure virtual functions must be redeclared in concrete derived classes, <strong>but they may also have implementations of their own.</strong> Here's how the Airplane hierarchy could take advantage of the ability to define a pure virtual function:</p>
<pre><code class="language-cpp">class Airplane {
public:
  virtual void fly(const Airport&amp; destination) = 0;

  ...
};

void Airplane::fly(const Airport&amp; destination)
{
  default code for flying an airplane to
  the given destination
}

class ModelA : public Airplane {
public:
  virtual void fly(const Airport&amp; destination)
  { Airplane::fly(destination); }

  ...
};

(...)
</code></pre>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1934138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934138</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 30 Jul 2010 16:27:35 GMT</pubDate></item><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Fri, 30 Jul 2010 16:28:13 GMT]]></title><description><![CDATA[<p>Ad aCTa schrieb:</p>
<blockquote>
<blockquote>
<p>&gt; Effective C++, Third Edition, Item 34 (S. 166/167).</p>
</blockquote>
<p>Nicht in der deutschen von Addison Wesley.</p>
</blockquote>
<p>In meiner englischen Ausgabe auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934140</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 30 Jul 2010 16:28:13 GMT</pubDate></item><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Fri, 30 Jul 2010 16:32:40 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Effective C++, Item 34 schrieb:</p>
<blockquote>
<p>(...)</p>
<p>Some people object to the idea of having separate functions for prividing interface and default implementation, such as <em>fly</em> and <em>defaultFly</em> above. For one thing, they note, it pollutes the class namespace with a proliferation of closely related function names. Yet they still agree that interface and default implementation should be separated. How do they resolve this seeming contradiction? By taking advantage of the fact that pure virtual functions must be redeclared in concrete derived classes, <strong>but they may also have implementations of their own.</strong> Here's how the Airplane hierarchy could take advantage of the ability to define a pure virtual function:</p>
<pre><code class="language-cpp">class Airplane {
public:
  virtual void fly(const Airport&amp; destination) = 0;

  ...
};

void Airplane::fly(const Airport&amp; destination)
{
  default code for flying an airplane to
  the given destination
}

class ModelA : public Airplane {
public:
  virtual void fly(const Airport&amp; destination)
  { Airplane::fly(destination); }

  ...
};

(...)
</code></pre>
</blockquote>
</blockquote>
<p>Und? Da steht nicht, dass eine Funktion in der gleichen Deklaration, die auch die Definition enthält (d.h. eine inline-Definition in der Klassendefinition), reinvirtuell deklariert werden darf. Da steht lediglich, dass eine reinvirtuelle Funktion eine Funktionsdefinition haben darf (im Falle des Destruktors: (praktisch) muss). Diese Regeln bringt man zusammen, indem man sich überlegt, dass eine reinvirtuelle Deklaration inline-Definitionen in der Klassedefinition ausschließt.</p>
<p>Und siehe da, bei Meyers erfolgt die Funktionsdefinition auch außerhalb der Klassendefinition.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934144</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 30 Jul 2010 16:32:40 GMT</pubDate></item><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Fri, 30 Jul 2010 16:45:13 GMT]]></title><description><![CDATA[<p>Wenn's um die Syntax geht, geht das so hintereinander weg nicht (wenn's darum ging - mein Fehler, ich habe das so nicht wahrgenommen). Man kann pure-virtual-Funktionen (wenn man das unbedingt will) aber immer noch inline deklarieren:</p>
<pre><code class="language-cpp">struct foo {
  inline virtual ~foo() = 0;
};

inline foo::~foo() { }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1934153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934153</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 30 Jul 2010 16:45:13 GMT</pubDate></item><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Sat, 31 Jul 2010 08:40:46 GMT]]></title><description><![CDATA[<p>Der MSVC unterstützt diese Form (als Erweiterung), ist aber, wie schon gesagt wurde, kein Standard:</p>
<pre><code class="language-cpp">virtual ~Base() =0 {}
</code></pre>
<p>Ist halt bequem zu schreiben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1934304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1934304</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 31 Jul 2010 08:40:46 GMT</pubDate></item><item><title><![CDATA[Reply to high sophisticated Compile Fehler .. verschwindet on Mon, 02 Aug 2010 13:17:22 GMT]]></title><description><![CDATA[<p>Ein Dankeschön an camper und Nexus; insbesondere für den Hinweis auf 3.4.1 Absatz 9.<br />
Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1935156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1935156</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Mon, 02 Aug 2010 13:17:22 GMT</pubDate></item></channel></rss>