Ist hier UB zu erkennen?



  • verschwindet der Fehler, wenn du aus dem std::atomic irgendwas anderes machst?



  • otze schrieb:

    verschwindet der Fehler, wenn du aus dem std::atomic irgendwas anderes machst?

    Nö, leider nicht.

    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.



  • Tatsächlich! Hab die Bibliothek mal so umgeschrieben, dass sie andere atomics als die aus std verwendet, und der Bug ist verschwunden.



  • You are welcome.



  • Sone schrieb:

    virtual ~Task() = 0 {};
    

    Ok, das kann nur Pseudo-Code sein... 🙂

    Wieso das?



  • Tachyon schrieb:

    Sone schrieb:

    virtual ~Task() = 0 {};
    

    Ok, das kann nur Pseudo-Code sein... 🙂

    Wieso das?

    Weil das kein gültiges Standard-C++ ist. Oder es ist eine Implementations-Erweiterung von VC++...

    §10.4/2 schrieb:

    A function declaration cannot provide both a pure-specifier and a definition



  • Tachyon schrieb:

    Sone schrieb:

    virtual ~Task() = 0 {};
    

    Ok, das kann nur Pseudo-Code sein... 🙂

    Wieso das?

    Man kann pure virtual functions nur außerhalb der Klassendefinition definieren.



  • Nathan schrieb:

    Man kann pure virtual functions nur außerhalb der Klassendefinition definieren.

    Das weiß er doch - würde mich schwer wundern wenn nicht.



  • Sone schrieb:

    Nathan schrieb:

    Man kann pure virtual functions nur außerhalb der Klassendefinition definieren.

    Das weiß er doch - würde mich schwer wundern wenn nicht.

    Tachyon fragte, wieso das nur Pseudocode sein kann, ich gab einen Grund.
    Wieso meinst du, dass er das dann schon weiß, wenn er doch fragt?
    Du hast ihm doch auch geantwortet.



  • Was den Körper von Destruktoren von abstrakten Klassen angeht: Ist erlaubt. Hier ( http://stackoverflow.com/questions/1219607/why-do-we-need-a-pure-virtual-destructor-in-c ) wird sogar behauptet, dass pur virtuelle Destruktoren eine Implementierung benötigen, aber ich hab keinen Standard auf der Festplatte und bei Google finde ich keine Quellen.



  • Nathan schrieb:

    Sone schrieb:

    Nathan schrieb:

    Man kann pure virtual functions nur außerhalb der Klassendefinition definieren.

    Das weiß er doch - würde mich schwer wundern wenn nicht.

    Tachyon fragte, wieso das nur Pseudocode sein kann, ich gab einen Grund.
    Wieso meinst du, dass er das dann schon weiß, wenn er doch fragt?
    Du hast ihm doch auch geantwortet.

    Stimmt, tut mir Leid. Tachyon sollte das aber wissen, der Kerl ist schon viel länger dabei als ich oder du.

    Was den Körper von Destruktoren von abstrakten Klassen angeht: Ist erlaubt.

    Klar, aber nicht bei der Deklaration. Dass sie definiert werden müssen ist klar.



  • Sone schrieb:

    Nathan schrieb:

    Sone schrieb:

    Nathan schrieb:

    Man kann pure virtual functions nur außerhalb der Klassendefinition definieren.

    Das weiß er doch - würde mich schwer wundern wenn nicht.

    Tachyon fragte, wieso das nur Pseudocode sein kann, ich gab einen Grund.
    Wieso meinst du, dass er das dann schon weiß, wenn er doch fragt?
    Du hast ihm doch auch geantwortet.

    Stimmt, tut mir Leid. Tachyon sollte das aber wissen, der Kerl ist schon viel länger dabei als ich oder du.

    Was den Körper von Destruktoren von abstrakten Klassen angeht: Ist erlaubt.

    Klar, aber nicht bei der Deklaration. Dass sie definiert werden müssen ist klar.

    Achso, dann hab ich falsch verstanden worum es geht, sorry 🙂



  • Sone schrieb:

    [[...]Tachyon sollte das aber wissen, der Kerl ist schon viel länger dabei als ich oder du.[...]

    Ach ja, da war was. Ich habe schlicht die Definition überlesen...


Anmelden zum Antworten