Typfrage



  • Warum funktioniert das nicht:

    #include <list>
    std::list<int> fn() { return std::list(2, 2); }
    
    int main() 
    { 
     std::list<int> l;
     l.splice(l.begin(), fn());
    }
    

    ..aber das schon?

    std::list<int> l, l2;
     l.splice(l.begin(), l2);
    }
    

    (list::splice verschiebt alle Elemente von l2 nach l1, aber darum geht es nicht).

    Beispiel 1 verursacht einen Typfehler (no call to splice with...), wie unterscheiden sich also die Typen der Parameter in beiden Aufrufen?

    -Gunnar



  • Die Methode splice() erwartet als zweiten Paramter eineReferenz. => Deine erste Version kann nicht funktionieren, da du keine Referenzen an temporäre Objekte binden kannst (was du aber durch den Funktionsaufruf fn() versuchst, da dieser ein temporäres Objekt zurückgibt).

    /edit: Verlesen und verschrieben...

    Gruß Caipi



  • Danke. Da wurde ich mal wieder durch wirre Template-Fehlermeldungen vom Compiler verwirrt 🙂
    -Gunnar


Anmelden zum Antworten