<div dir="ltr">I reverted the problematic cases of r290511 in r292183.<br><div class="gmail_extra"><br><div class="gmail_quote">On 16 January 2017 at 12:09, Mehdi Amini <span dir="ltr"><<a href="mailto:mehdi.amini@apple.com" target="_blank">mehdi.amini@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">CC Richard who committed this in the first place, and Hans to track this as a potential release blocker.<br>
<br>
—<br>
<span class="gmail-HOEnZb"><font color="#888888">Mehdi<br>
</font></span><div class="gmail-HOEnZb"><div class="gmail-h5"><br>
<br>
> On Jan 16, 2017, at 11:17 AM, Pavel A. Lebedev via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br>
><br>
> Hi,<br>
><br>
> Any comments on this?<br>
> As it stands, clang 4 will be unusable with Boost.Hana,<br>
> at least the already released versions.<br>
> In case this is actually the library's fault, this is being discussed at<br>
> <a href="https://github.com/boostorg/hana/issues/318" rel="noreferrer" target="_blank">https://github.com/boostorg/<wbr>hana/issues/318</a><br>
><br>
>> -----Original Message-----<br>
>> From: cfe-dev [mailto:<a href="mailto:cfe-dev-bounces@lists.llvm.org">cfe-dev-bounces@lists.<wbr>llvm.org</a>] On Behalf Of Pavel A. Lebedev via cfe-dev<br>
>> Sent: Tuesday, January 10, 2017 2:21 AM<br>
>> To: 'Clang Dev' <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>><br>
>> Subject: [cfe-dev] Fixes to partial ordering break Boost.Hana<br>
>><br>
>> Hi.<br>
>><br>
>> Commit r290511 "Fix some subtle wrong partial ordering bugs particularly<br>
>> with C++1z auto-typed non-type template parameters"<br>
>> seems to break some template specialization tricks at the core of<br>
>> Boost.Hana<br>
>> library.<br>
>> The reduced example is:<br>
>><br>
>> $ cat hana.cpp<br>
>><br>
>> // SFINAE helpers.<br>
>><br>
>> template<bool Condition><br>
>> struct when;<br>
>><br>
>> template<typename...><br>
>> struct is_valid<br>
>> {<br>
>>    static constexpr bool value = true;<br>
>> };<br>
>><br>
>> // A class and its tag.<br>
>><br>
>> struct c_tag;<br>
>><br>
>> struct C<br>
>> {<br>
>>    using tag = c_tag;<br>
>> };<br>
>><br>
>> // Tag getter. When a type has a nested type "tag", it specifies its tag.<br>
>> // When it doesn't have one, the tag is type itself.<br>
>><br>
>> template<typename T,typename = void><br>
>> struct tag_of : tag_of<T,when<true>> {};<br>
>><br>
>> template<typename T,bool Condition><br>
>> struct tag_of<T,when<Condition>><br>
>> {<br>
>>    using type = T;<br>
>> };<br>
>><br>
>> template<typename T><br>
>> struct tag_of<T,when<is_valid<<wbr>typename T::tag>::value>><br>
>> {<br>
>>    using type = typename T::tag;<br>
>> };<br>
>><br>
>> // Attempt to calculate tag of C.<br>
>><br>
>> using tag_of_c = typename tag_of<C>::type;<br>
>><br>
>><br>
>> $ clang++ -std=c++14 -fsyntax-only hana.cpp<br>
>><br>
>> hana.cpp:25:17: error: ambiguous partial specializations of 'tag_of<C,<br>
>> when<true> >'<br>
>> struct tag_of : tag_of<T,when<true>> {};<br>
>>                ^<br>
>> hana.cpp:41:27: note: in instantiation of template class 'tag_of<C,<br>
>> void>'<br>
>> requested here<br>
>> using tag_of_c = typename tag_of<C>::type;<br>
>>                          ^<br>
>> hana.cpp:28:8: note: partial specialization matches [with T = C,<br>
>> Condition =<br>
>> true]<br>
>> struct tag_of<T,when<Condition>><br>
>>       ^<br>
>> hana.cpp:34:8: note: partial specialization matches [with T = C]<br>
>> struct tag_of<T,when<is_valid<<wbr>typename T::tag>::value>><br>
>>       ^<br>
>> 1 error generated.<br>
>><br>
>><br>
>> Is this a problem with the library or clang?<br>
><br>
> ---<br>
> Pavel A. Lebedev<br>
><br>
> ______________________________<wbr>_________________<br>
> cfe-dev mailing list<br>
> <a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
<br>
</div></div></blockquote></div><br></div></div>