You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@mesos.apache.org by "Benjamin Bannier (JIRA)" <ji...@apache.org> on 2016/07/03 14:55:10 UTC

[jira] [Created] (MESOS-5772) Implement clang-tidy check catching implicit narrowing in use of Option

Benjamin Bannier created MESOS-5772:
---------------------------------------

             Summary: Implement clang-tidy check catching implicit narrowing in use of Option
                 Key: MESOS-5772
                 URL: https://issues.apache.org/jira/browse/MESOS-5772
             Project: Mesos
          Issue Type: Bug
            Reporter: Benjamin Bannier


{{Option<T>}} wraps the contained value by value, not by reference. This means that the wrapped value cannot behave polymorphically. This is different from {{Option}}'s previous behavior, so there might be existing code relying on polymorphic behavior of values wrapped in {{Option}}. It is also easy to inadvertently introduce wrong behavior when changing code from use of {{T}} to use of {{Option<T>}}.

{code:title=Example}
struct Base {
  virtual void f() { /* dummy impl, does nothing */ }
};

struct Derived : Base {
  void f() override { perform_critical_task(); }
};

Option<Base> b = Dervided{}; // Implicit conversion from `Derived` to `Base`.

ASSERT_SOME(b);
b->f(); // Does nothing.
{code}

We should implement a check to catch implicit conversion like in above example. Such a check would likely let explicit conversions pass.




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)