Benjamin Bannier created MESOS-7410:
---------------------------------------

             Summary: Make it harder to ignore errors returned from functions.
                 Key: MESOS-7410
                 URL: https://issues.apache.org/jira/browse/MESOS-7410
             Project: Mesos
          Issue Type: Improvement
            Reporter: Benjamin Bannier


Mesos (or more specifically stout) uses a number of types which can capture 
either a value or an error (e.g., {{Try}} or {{Result}}). These are used 
similar to exceptions, but in contrast to exceptions, the possible errors are 
part of the function's types. It is also possible to (implicitly) ignore errors 
return from functions producing such values (this is not possible with 
exceptions).

C\+\+11 introduced a generalized syntax for attributes which makes it possible 
to add attributes to types. C++17 standardized an attribute {{nodiscard}} which
{quote}
Appears in a function declaration, enumeration declaration, or class 
declaration. If a function declared nodiscard or a function returning an 
enumeration or class declared nodiscard by value is called from a 
discarded-value expression other than a cast to void, the compiler is 
encouraged to issue a warning.
{quote}

With that it is possible to annotate types with a {{nodiscard}} attribute which 
was not possible with e.g., GNU attributes, e.g.,
{code}
class [[nodiscard]] Try;
{code}

We should annotate our error types with {{nodiscard}} to make sure errors are 
not missed.

This will likely require updating call sites to handle currently ignored return 
values (this appears more widespread in users of e.g., {{os::close}} or 
{{os::sleep}}). Since compilers might emit errors for unknown attributes we 
should also prevent breaking a build on compilers not supporting this attribute.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to