<?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[Ist hier UB zu erkennen?]]></title><description><![CDATA[<p>(vs 2012 mit update 3)</p>
<p>Ich verfolge seit gestern einen lästigen Bug, der nur im Release Modus auftritt (d.h. wenn Zeug wegoptimiert wird).</p>
<p>Ich habe folgende Klasse (Code ist vollständig):</p>
<pre><code>extern std::atomic&lt;unsigned int&gt; taskIDCounter; //wird in ner cpp auf 0 initialisiert

class Task
{
public:
    Task() : started(false), unfinishedTasks(1), taskID(++taskIDCounter), parentID(0) {};
    Task(unsigned int parentID_) : started(false), unfinishedTasks(1), taskID(++taskIDCounter), parentID(parentID_)/*, taken(0)*/ {};
    virtual ~Task() = 0 {};

    virtual void execute() final
    {
        this-&gt;doActualWork();
        unfinishedTasks--;
    }

    virtual void doActualWork() = 0;
public:
    unsigned int taskID;    //ID of this task
    unsigned int parentID;  //ID of the parent of this task
    bool started;
    std::atomic&lt;unsigned int&gt; unfinishedTasks; //Number of child tasks that are still unfinished
    std::vector&lt;unsigned int&gt; dependencies; //list of IDs of all tasks that this task depends on

};
</code></pre>
<p>Der entsprechende Bug tritt nicht auf, wenn ich die Klasse mit #pragma optimize(&quot;&quot;,off) besähe, so dass der Compiler Optimierungen bei der Klasse nicht anwendet. Das riecht natürlich erstmal nach UB, aber irgendwie erkenne ich bei der Klasse nichts (die Tut ja auch nix außerordentlich komplexes).</p>
<p>Gibt's hier etwas, das UB auslösen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/319744/ist-hier-ub-zu-erkennen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 23:08:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/319744.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 01 Sep 2013 07:46:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 07:47:03 GMT]]></title><description><![CDATA[<p>(vs 2012 mit update 3)</p>
<p>Ich verfolge seit gestern einen lästigen Bug, der nur im Release Modus auftritt (d.h. wenn Zeug wegoptimiert wird).</p>
<p>Ich habe folgende Klasse (Code ist vollständig):</p>
<pre><code>extern std::atomic&lt;unsigned int&gt; taskIDCounter; //wird in ner cpp auf 0 initialisiert

class Task
{
public:
    Task() : started(false), unfinishedTasks(1), taskID(++taskIDCounter), parentID(0) {};
    Task(unsigned int parentID_) : started(false), unfinishedTasks(1), taskID(++taskIDCounter), parentID(parentID_)/*, taken(0)*/ {};
    virtual ~Task() = 0 {};

    virtual void execute() final
    {
        this-&gt;doActualWork();
        unfinishedTasks--;
    }

    virtual void doActualWork() = 0;
public:
    unsigned int taskID;    //ID of this task
    unsigned int parentID;  //ID of the parent of this task
    bool started;
    std::atomic&lt;unsigned int&gt; unfinishedTasks; //Number of child tasks that are still unfinished
    std::vector&lt;unsigned int&gt; dependencies; //list of IDs of all tasks that this task depends on

};
</code></pre>
<p>Der entsprechende Bug tritt nicht auf, wenn ich die Klasse mit #pragma optimize(&quot;&quot;,off) besähe, so dass der Compiler Optimierungen bei der Klasse nicht anwendet. Das riecht natürlich erstmal nach UB, aber irgendwie erkenne ich bei der Klasse nichts (die Tut ja auch nix außerordentlich komplexes).</p>
<p>Gibt's hier etwas, das UB auslösen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349589</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 01 Sep 2013 07:47:03 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 07:59:09 GMT]]></title><description><![CDATA[<p>~Edit: Anfangs nehme ich an, du zeigst uns den echten Code.~</p>
<pre><code>Task() : started(false), unfinishedTasks(1), taskID(++taskIDCounter), parentID(0) {}; 
    Task(unsigned int parentID_) : started(false), unfinishedTasks(1), taskID(++taskIDCounter), parentID(parentID_)/*, taken(0)*/ {};
</code></pre>
<p>Wieso kein Default-Argument? Oder delegierende Konstruktoren (C++11)?</p>
<pre><code>virtual void execute() final
    {
        this-&gt;doActualWork();
        unfinishedTasks--;
    }
</code></pre>
<p>... Wieso zum Teufel ist die Funktion virtuell, wenn sie in einer (nicht erbenden) Basisklasse schon als <code>final</code> deklariert wird...?</p>
<blockquote>
<p>die Tut ja auch nix außerordentlich komplexes</p>
</blockquote>
<p>Den ganzen Code haste uns ja laut eigener Aussage gar nicht gezeigt.</p>
<pre><code>virtual ~Task() = 0 {};
</code></pre>
<p>Ok, das kann nur Pseudo-Code sein... <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/2349591</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349591</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 01 Sep 2013 07:59:09 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 08:11:17 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<blockquote>
<p>die Tut ja auch nix außerordentlich komplexes</p>
</blockquote>
<p>Den ganzen Code haste uns ja laut eigener Aussage gar nicht gezeigt.</p>
</blockquote>
<p>Doch, das ist tatsächlich der ganze Code. Ihr seht zwar nicht, wie er benutzt wird, aber der Fehler ist auf diese Klasse reduzierbar.</p>
<p>Sone schrieb:</p>
<blockquote>
<p>~Edit: Anfangs nehme ich an, du zeigst uns den echten Code.~</p>
<pre><code>Task() : started(false), unfinishedTasks(1), taskID(++taskIDCounter), parentID(0) {}; 
    Task(unsigned int parentID_) : started(false), unfinishedTasks(1), taskID(++taskIDCounter), parentID(parentID_)/*, taken(0)*/ {};
</code></pre>
<p>Wieso kein Default-Argument? Oder delegierende Konstruktoren (C++11)?</p>
</blockquote>
<p>Hast Recht, Default-Argument wäre besser.</p>
<blockquote>
<pre><code>virtual void execute() final
    {
        this-&gt;doActualWork();
        unfinishedTasks--;
    }
</code></pre>
<p>... Wieso zum Teufel ist die Funktion virtuell, wenn sie in einer (nicht erbenden) Basisklasse schon als <code>final</code> deklariert wird...?</p>
</blockquote>
<p>Ups, das ist ein überbleibsel aus ner Zeit, als Task von ner anderen Klasse geerbt hat. Danke für den Hinweis (ändert nichts am Bug).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349595</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 01 Sep 2013 08:11:17 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 08:29:18 GMT]]></title><description><![CDATA[<p>Ich sehe keinen Fehler, aber ich würde ein paar asserts einbauen:</p>
<pre><code>void execute(){
    assert(this);
    assert(this-&gt;doActualWork);
    assert(unfinishedTasks);
    assert(started); //vielleicht nicht wichtig

    this-&gt;doActualWork(); 
    unfinishedTasks--; 
}
</code></pre>
<p>Vielleicht wird ein Pointer falsch gecastet und deswegen greift this-&gt;doActualWork daneben. Das könnte den Unterschied bei Release und Debug erklären.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349604</guid><dc:creator><![CDATA[nwp3]]></dc:creator><pubDate>Sun, 01 Sep 2013 08:29:18 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 08:32:16 GMT]]></title><description><![CDATA[<p>Und was ist der Bug?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349606</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 01 Sep 2013 08:32:16 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 08:44:50 GMT]]></title><description><![CDATA[<p>nwp3 schrieb:</p>
<blockquote>
<p>Ich sehe keinen Fehler, aber ich würde ein paar asserts einbauen:</p>
<pre><code>void execute(){
    assert(this);
    assert(this-&gt;doActualWork);
    assert(unfinishedTasks);
    assert(started); //vielleicht nicht wichtig
    
    this-&gt;doActualWork(); 
    unfinishedTasks--; 
}
</code></pre>
<p>Vielleicht wird ein Pointer falsch gecastet und deswegen greift this-&gt;doActualWork daneben. Das könnte den Unterschied bei Release und Debug erklären.</p>
</blockquote>
<p>Ich vermute eher nen Compiler-Bug. Wenn ich die Klasse dupliziere (namen ändere, extra dateien dafür, etc.) und dann in nem minimalen Beispiel verwende, existiert der Bug nicht. Wenn ich im gleichen minimalen Beispiel die originale Task Klasse verwende, tritt der Bug auch auf. Lustigerweise: Wenn ich dann im normalen Code (also nicht minimalbeispiel), die Verwendung von der Task Klasse auf die duplizierte Klasse umstelle, tritt der Bug auch auf - auch im minimalen Beispiel. Und ebenso tritt der Bug mit der originalklasse im Minimalbeispiel (im &quot;Haupt-Code&quot; schon) nicht auf, wenn ich im nicht-minimal-beispiel-code die duplizierte Klasse, und im Minimalbeispielcode die originale Klasse verwende.</p>
<p>D.h. in der Benutzung außerhalb des minimalen Beispiels der Task Klasse muss irgendwas passieren, dass dem Compiler sagt: Das hier kannst du wegoptimieren, und dann krachts irgendwo. Das ist aber aufgrund der Natur des Bugs noch verwirrender, weil in der auslösenden Stelle nur Zeiger rumgeschoben werden. Konkret:</p>
<p>manni66 schrieb:</p>
<blockquote>
<p>Und was ist der Bug?</p>
</blockquote>
<p>Wenn dich Details wirklich interessieren (sollte für das Beispiel aber nicht relevant sein): <a href="http://stackoverflow.com/questions/18550883/cds-library-michael-deque-causes-crash-when-pushing-back-derived-type-of-custom" rel="nofollow">http://stackoverflow.com/questions/18550883/cds-library-michael-deque-causes-crash-when-pushing-back-derived-type-of-custom</a></p>
<p>Im Prinzip mach ich ein push_back in einen Container von irgendeiner library (nicht STL), wobei der Container aber nur einen Zeiger auf Task* als Typ T hat und ich einen Zeiger auf einen abgeleiteten typen push_back()en will. Und da gibts nen Crash. Konkret stell ich fest, dass der Bug da auftritt, weil ich direkt davor und direkt danach ein cout&lt;&lt;&quot;hallo&quot;&lt;&lt;std::endl; mache und nur das cout vor dem push_back() ankommt bevor der Crash passiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349607</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 01 Sep 2013 08:44:50 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 08:46:42 GMT]]></title><description><![CDATA[<p>verschwindet der Fehler, wenn du aus dem std::atomic irgendwas anderes machst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349609</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 01 Sep 2013 08:46:42 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 08:58:04 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>verschwindet der Fehler, wenn du aus dem std::atomic irgendwas anderes machst?</p>
</blockquote>
<p>Nö, leider nicht.</p>
<p>edit: aha, jetzt da du std::atomic erwähnst... ich hab das ganze Projekt noch mal neu kompiliert, und eine neue Warnung entdeckt. Anscheinend modifiziert ne Template-Spezialisierung für 64 bit unsigned ints in xatomic.h (ein VS2012-Header) ebp ohne vorher ein backup auf den Stack zu schieben und danach wieder zu poppen. Ich glaub die verwendete Bibliothek benutzt ein atomic des Typs, bei dem das gemacht wird, was den Crash verursachen könnte. Muss mal bisschen nachforschen, brb.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349610</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 01 Sep 2013 08:58:04 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 09:20:18 GMT]]></title><description><![CDATA[<p>Tatsächlich! Hab die Bibliothek mal so umgeschrieben, dass sie andere atomics als die aus std verwendet, und der Bug ist verschwunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349620</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 01 Sep 2013 09:20:18 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 09:24:06 GMT]]></title><description><![CDATA[<p>You are welcome.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349621</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 01 Sep 2013 09:24:06 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 10:48:14 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<pre><code>virtual ~Task() = 0 {};
</code></pre>
<p>Ok, das kann nur Pseudo-Code sein... <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>
</blockquote>
<p>Wieso das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349631</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Sun, 01 Sep 2013 10:48:14 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 10:56:55 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<pre><code>virtual ~Task() = 0 {};
</code></pre>
<p>Ok, das kann nur Pseudo-Code sein... <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>
</blockquote>
<p>Wieso das?</p>
</blockquote>
<p>Weil das kein gültiges Standard-C++ ist. Oder es ist eine Implementations-Erweiterung von VC++...</p>
<p>§10.4/2 schrieb:</p>
<blockquote>
<p>A function declaration cannot provide both a pure-specifier and a definition</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2349633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349633</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 01 Sep 2013 10:56:55 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 10:58:44 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<pre><code>virtual ~Task() = 0 {};
</code></pre>
<p>Ok, das kann nur Pseudo-Code sein... <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>
</blockquote>
<p>Wieso das?</p>
</blockquote>
<p>Man kann pure virtual functions nur außerhalb der Klassendefinition definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349636</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 01 Sep 2013 10:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 11:04:40 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Man kann pure virtual functions nur außerhalb der Klassendefinition definieren.</p>
</blockquote>
<p>Das weiß er doch - würde mich schwer wundern wenn nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349641</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 01 Sep 2013 11:04:40 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 11:07:18 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>Man kann pure virtual functions nur außerhalb der Klassendefinition definieren.</p>
</blockquote>
<p>Das weiß er doch - würde mich schwer wundern wenn nicht.</p>
</blockquote>
<p>Tachyon fragte, wieso das nur Pseudocode sein kann, ich gab einen Grund.<br />
Wieso meinst du, dass er das dann schon weiß, wenn er doch fragt?<br />
Du hast ihm doch auch geantwortet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349642</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 01 Sep 2013 11:07:18 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 11:24:11 GMT]]></title><description><![CDATA[<p>Was den Körper von Destruktoren von abstrakten Klassen angeht: Ist erlaubt. Hier ( <a href="http://stackoverflow.com/questions/1219607/why-do-we-need-a-pure-virtual-destructor-in-c" rel="nofollow">http://stackoverflow.com/questions/1219607/why-do-we-need-a-pure-virtual-destructor-in-c</a> ) wird sogar behauptet, dass pur virtuelle Destruktoren eine Implementierung <strong>benötigen</strong>, aber ich hab keinen Standard auf der Festplatte und bei Google finde ich keine Quellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349650</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349650</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 01 Sep 2013 11:24:11 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 13:21:00 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>Man kann pure virtual functions nur außerhalb der Klassendefinition definieren.</p>
</blockquote>
<p>Das weiß er doch - würde mich schwer wundern wenn nicht.</p>
</blockquote>
<p>Tachyon fragte, wieso das nur Pseudocode sein kann, ich gab einen Grund.<br />
Wieso meinst du, dass er das dann schon weiß, wenn er doch fragt?<br />
Du hast ihm doch auch geantwortet.</p>
</blockquote>
<p>Stimmt, tut mir Leid. Tachyon sollte das aber wissen, der Kerl ist schon viel länger dabei als ich oder du.</p>
<blockquote>
<p>Was den Körper von Destruktoren von abstrakten Klassen angeht: Ist erlaubt.</p>
</blockquote>
<p>Klar, aber nicht bei der Deklaration. Dass sie definiert werden müssen ist klar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349677</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 01 Sep 2013 13:21:00 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 13:27:51 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>Man kann pure virtual functions nur außerhalb der Klassendefinition definieren.</p>
</blockquote>
<p>Das weiß er doch - würde mich schwer wundern wenn nicht.</p>
</blockquote>
<p>Tachyon fragte, wieso das nur Pseudocode sein kann, ich gab einen Grund.<br />
Wieso meinst du, dass er das dann schon weiß, wenn er doch fragt?<br />
Du hast ihm doch auch geantwortet.</p>
</blockquote>
<p>Stimmt, tut mir Leid. Tachyon sollte das aber wissen, der Kerl ist schon viel länger dabei als ich oder du.</p>
<blockquote>
<p>Was den Körper von Destruktoren von abstrakten Klassen angeht: Ist erlaubt.</p>
</blockquote>
<p>Klar, aber nicht bei der Deklaration. Dass sie definiert werden müssen ist klar.</p>
</blockquote>
<p>Achso, dann hab ich falsch verstanden worum es geht, sorry <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/2349678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349678</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Sun, 01 Sep 2013 13:27:51 GMT</pubDate></item><item><title><![CDATA[Reply to Ist hier UB zu erkennen? on Sun, 01 Sep 2013 19:29:43 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>&lsqb;&lsqb;...]Tachyon sollte das aber wissen, der Kerl ist schon viel länger dabei als ich oder du.[...]</p>
</blockquote>
<p>Ach ja, da war was. Ich habe schlicht die Definition überlesen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2349722</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2349722</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Sun, 01 Sep 2013 19:29:43 GMT</pubDate></item></channel></rss>