Frage zu Templates und Überladung



  • Hallo!

    Könnt ihr mir folgendes Verhalten erklären?

    template<typename T> void Func(T value);
    
    void Func(const unsigned char* val);
    void Func(const std::string& val);
    
    const unsigned char* cuc = 0;
    unsigned char* uc = 0;
    
    Func(cuc); // non-template
    Func(uc); // template
    
    const std::string cs;
    std::string s;
    
    Func(cs); // non-template
    Func(s); // non-template, aber warum?
    

    Danke!


  • Mod

    Binden an eine Referenz und Kopieren eines Wertes sind bzgl. Überladungsauflösung gleichrangig. Das macht eine Menge SInn: Letzteres involviert ja bei Klassen den Aufruf des Copy- oder Move-Ctors, und für dessen Aufruf muss ja auch eine Referenz gebunden werden.


Anmelden zum Antworten