Andrew Schwartzmeyer reassigned MESOS-7142:

    Assignee: Michael Park  (was: Andrew Schwartzmeyer)

> Revisit MSVC decltype bug
> -------------------------
>                 Key: MESOS-7142
>                 URL: https://issues.apache.org/jira/browse/MESOS-7142
>             Project: Mesos
>          Issue Type: Improvement
>         Environment: Windows with Visual Studio 2017 RC
>            Reporter: Andrew Schwartzmeyer
>            Assignee: Michael Park
>            Priority: Minor
>              Labels: libprocess, windows
>   Original Estimate: 2h
>  Remaining Estimate: 2h
> Review https://reviews.apache.org/r/56781/ works around an existent and 
> acknowledged bug in MSVC. From MSVC team:
> {quote}
> I have preprocessed file from Andy yesterday, thank you. I can verify that 
> this is a bug in the latest compiler where it’s failing to get the right 
> context for the decltype expression for the return type of function. However, 
> MSVC does deduce the right type from the return expression in the body. We 
> have a bug in the compiler logged now and will be tracked for next release. 
> We’ll be adding Mesos project to our daily RealWorld Testing set from now on 
> as continuous validation for MSVC compiler. Thank you for bringing this up to 
> our attention.
> template <typename F>
>   auto then(F&& f) const-> decltype(this->then(std::forward<F>(f), Prefer()))
> Should really expand to this expression, but it’s failing.
> template <typename F>
>   auto then(F&& f) const -> decltype(static_cast<const 
> Future<T>*>(this)->then(std::forward<F>(f), Prefer()))
> The workaround from Michael to skip explicit return type for auto function 
> should be actually better source change for MSVC compiler. For completeness 
> sake, you can also just remove ‘this->’ from the decltype expression to make 
> it work for MSVC compiler 
> -> decltype(then(std::forward<F>(f), Prefer()))
> Another thing worth pointing out is, adding ‘this->’ in the body of the 
> function shows that MSVC does correctly deduce the return type.
>   template <typename F>
>   auto then(F&& f) const
>   //  -> decltype(then(std::forward<F>(f), Prefer()))
> //     -> decltype(static_cast<const 
> Future<T>*>(this)->then(std::forward<F>(f), Prefer()))
>   {
>     return this->then(std::forward<F>(f), Prefer());
>   }
> {quote}
> This issue tracks revisiting the work-around when the first patch to VS2017 
> is released, as the compiler bug itself should be fixed then.

This message was sent by Atlassian JIRA

Reply via email to