ychen added a comment.

In D128745#3752593 <https://reviews.llvm.org/D128745#3752593>, @ychen wrote:

> In D128745#3752148 <https://reviews.llvm.org/D128745#3752148>, @ychen wrote:
>
>> In D128745#3751471 <https://reviews.llvm.org/D128745#3751471>, @joanahalili 
>> wrote:
>>
>>> We have some compilation failures on our end because of function template 
>>> parameter deduction when passing the function template to a function 
>>> pointer.
>>>
>>>   typedef void (*f)(const int&);
>>>   
>>>   template <typename T>
>>>   void F(T value) {}
>>>   
>>>   template <typename T>
>>>   void F(const T& value){}
>>>   
>>>   void q(f);
>>>   
>>>   void w() {
>>>       q(&F);
>>>   }
>>>
>>> https://gcc.godbolt.org/z/faoq74q7G
>>> Is this an intended outcome for this patch?
>>
>> Thanks for the report. No that's not the intent. This should only affect 
>> partial ordering but not which candidate is viable (error message `candidate 
>> function not viable ...`). I'll take a look.
>
> This new behavior is correct. It is due to the change on line 1758 in 
> `SemaTemplateDeduction.cpp`. Basically, both the taking address of and 
> regular function call to the overloaded function set using the same partial 
> ordering rule (Relevant wording https://eel.is/c++draft/over.over#5). GCC is 
> inconsistent in this regard (https://gcc.godbolt.org/z/WrKsaKrdz). MSVC 
> agrees with this new/correct behavior.

TBH, the Clang diagnosis could be better here. It kinda misleading about what 
is happening. MSVC's diagnosis is more clear 
(https://gcc.godbolt.org/z/WrKsaKrdz).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D128745/new/

https://reviews.llvm.org/D128745

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to