decltype und Templates



  • Hey Leute,

    angenommen man hat folgenden Code:

    template <typename L, typename R>
    auto operator+(Vector<L> & lhs, Vector<R> & rhs) ->  Vector<decltype(lhs[0] + rhs[0])> { ... }
    

    Kann man hier nicht anstatt

    decltype(lhs[0] + rhs[0])
    

    irgendwie so etwas der Art

    decltype(L+R)
    

    schreiben?

    decltype werte ja nicht aus, sondern überprüft nur die Typen soweit ich weiß, von daher erscheint mir die vorgeschlagene Alternative intuitiver.

    Gruß 🙂



  • decltype() wertet den Typ des Ausdrucks aus, L+R ist hier kein Ausdruck.



  • decltype(L() + R()) wäre ne Möglichkeit, wenn denn L und R default-constructible sind.
    Alternativ (und ganz allgemein):

    template <class T> T create();
    
    template <typename L, typename R>
    auto operator+(Vector<L> & lhs, Vector<R> & rhs) ->  Vector<decltype(create<L>() + create<R>())> {/*...*/}
    

    Allerdings ist lesabr und verständlich dann doch was anderes...



  • Dein create gibts im Standard übrigens schon als std::declval.


Anmelden zum Antworten