• fruitcantfly@programming.dev
    link
    fedilink
    arrow-up
    2
    ·
    4 hours ago

    Amusingly, modern C++ allows you to copy the rust signature nearly 1:1:

    auto getofmylawn(Lawn lawn) -> Option<Teenager> {
        return lawn.remove();
    }
    
    • Ephera@lemmy.ml
      link
      fedilink
      English
      arrow-up
      1
      ·
      3 hours ago

      Huh, did that emerge out of unrelated design decisions or did they just figure
      why not both?

      • fruitcantfly@programming.dev
        link
        fedilink
        arrow-up
        2
        ·
        2 hours ago

        I believe that it is useful in a few places. cppreference.com mentions templates as one case:

        Trailing return type, useful if the return type depends on argument names, such as template<class T, class U> auto add(T t, U u) -> decltype(t + u); or is complicated, such as in auto fpif(int)->int(*)(int)

        The syntax also matches that of lambdas, though I’m not sure that adding another way of specifying regular functions actually makes the language more consistent, since most code still uses the old style.

        Additionally, the scope of the return type matches the function meaning that you can do

        auto my_class::my_function() -> iterator { /* code */ }
        

        instead of

        my_class::iterator my_class::my_function() { /* code */ }
        

        which is kinda nice