[ 
https://issues.apache.org/jira/browse/MESOS-5772?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Benjamin Bannier updated MESOS-5772:
------------------------------------
    Issue Type: Improvement  (was: Bug)

> 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: Improvement
>            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)

Reply via email to