boost::split mit boost::to_lower_copy



  • Hi,

    folgendes Programm wird nicht compiliert (g++):

    #include <boost/algorithm/string.hpp>
    #include <iostream>
    #include <vector>
    #include <string>
    
    int main()
    {
       std::vector<std::string> splitted_line;
       boost::split(splitted_line,boost::to_lower_copy(std::string("Test Test")); , boost::is_any_of(" "));
       return 0;
    }
    

    Folgendes program wird compiliert:

    #include <boost/algorithm/string.hpp>
    #include <iostream>
    #include <vector>
    #include <string>
    
    int main()
    {
       std::vector<std::string> splitted_line;
       std::string s = boost::to_lower_copy(std::string("Test Test"));
       boost::split(splitted_line, s , boost::is_any_of(" "));
       return 0;
    }
    

    Der Fehler im ersten Programm ist:

    : error: invalid initialization of non-const reference of type ‘std::basic_string<char>&’ from an rvalue of type ‘std::basic_string<char>’
        boost::split(splitted_line, boost::to_lower_copy(std::string("Test Test")) , boost::is_any_of(" "));
    

    Warum muss ich den Rueckgabewert von "to_lower_copy" erst einer anderen Variable zuweisen?

    Compiler: g++

    Unter Windows mit dem MSVC wurde das erste Programm ohne Probleme kompiliert. Wollte es jetzt aber auch unter Linux benutzten und bin auf den Fehler gestossen.

    mfg
    🙂



  • Hallo
    Sicher das der obere Teil kopiert ist. Wenn Ja ist der Fehler nach:

    ... Test")); ...
    

    Entferne hier bitte denn Strichpunkt.

    Mfg Marco


  • Mod

    Du kannst keinen temporären Wert an boost::split übergeben. split ist insofern optimiert, dass man als Ergebnis auch Referenzen auf das Original erhalten kann. Das geht logischerweise nicht mit einem temporären Wert.



  • SeppJ schrieb:

    Du kannst keinen temporären Wert an boost::split übergeben. split ist insofern optimiert, dass man als Ergebnis auch Referenzen auf das Original erhalten kann. Das geht logischerweise nicht mit einem temporären Wert.

    Verstehe, aber wieso wurde das Programm dann unter MSVC 2013 ohne Probleme kompiliert ?



  • Boost-Wust schrieb:

    Verstehe, aber wieso wurde das Programm dann unter MSVC 2013 ohne Probleme kompiliert ?

    Da ist VS nicht standardkonform.
    Wenn Du das Warninglevel erhöhst, dann sollte das hier kommen:

    https://msdn.microsoft.com/en-us/library/186yxbac.aspx


Anmelden zum Antworten