Uploaded image for project: 'Mesos'
  1. Mesos
  2. MESOS-7124

Replace monadic type get() functions with operator*


    • Type: Improvement
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: libprocess, stout
    • Labels:


      In MESOS-2757 we introduced T* operator-> for Option, Future and Try. This provided a convenient short-hand for existing member functions T* get providing identical functionality.

      To finalize the work of MESOS-2757 we should replace the existing T* get() member functions with functions T* operator*.

      This is desirable as having both operator-> and get in the code base at the same time lures developers into using the old-style get instead of operator-> where it is not needed, e.g.,


      instead of


      We still require the functionality of get to directly access the contained value, but the current API unnecessarily conflates two (at least from a usage perspective) unrelated aspects; in these instances, we should use an operator* instead,

      void f(const T&);
      Try<T> m = ..;
      f(*m); // instead of: f(m.get());

      Using operator* in these instances makes it much less likely that users would use it in instances when they wanted to call functions of the wrapped value, i.e.,


      appears more natural than


      Note that this proposed change is in line with the interface of std::optional. Also, std::shared_ptr's get is a useful function and implements an unrelated interface: it surfaces the wrapped pointer as opposed to its operator* which dereferences the wrapped pointer. Similarly, our current get also produce values, and are unrelated to std::shared_ptr's get.

        Issue Links


          There are no comments yet on this issue.


            • Assignee:
              bbannier Benjamin Bannier
            • Votes:
              0 Vote for this issue
              1 Start watching this issue


              • Created: