<div class="gmail_quote">On Thu, May 31, 2012 at 8:44 AM, Howard Hinnant <span dir="ltr"><<a href="mailto:hhinnant@apple.com" target="_blank">hhinnant@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5">On May 31, 2012, at 5:18 AM, Chandler Carruth wrote:<br>
<br>
> On Thu, May 31, 2012 at 2:15 AM, Sebastian Redl <<a href="mailto:sebastian.redl@getdesigned.at">sebastian.redl@getdesigned.at</a>> wrote:<br>
> On <a href="tel:31.05.2012%2005" value="+13105201205">31.05.2012 05</a>:59, Nathan Ridge wrote:<br>
> > The problem is that GCC uses the following alias template as class scope:<br>
> ><br>
> > template<typename _Pair><br>
> > using __is_convertible = std::is_convertible<_Pair, value_type>;<br>
> ><br>
> > but __is_convertible, I am guessing, is a compiler intrinsic in clang.<br>
> ><br>
> > Is either gcc or clang doing something wrong, or is it just a clash of implementations?<br>
> It's a clash of implementations. We've had this before, but not with a<br>
> new GCC version - only with old GCC versions.<br>
> > What can be done to resolve this?<br>
> ><br>
> Since GCC 4.8 is not yet released, and Clang versions with the<br>
> __is_convertible intrinsic are, the best solution would be to politely<br>
> ask the libstdc++ maintainers to change this name.<br>
><br>
> Please let us know if you do / what the PR is for it? We're likely to hit this as well, and will want to track the progress of getting it resolved.<br>
<br>
</div></div>This looks fixable on the clang side to me.  The clang intrinsic __is_convertible is currently undocumented:<br>
<br>
<a href="http://clang.llvm.org/docs/LanguageExtensions.html#checking_type_traits" target="_blank">http://clang.llvm.org/docs/LanguageExtensions.html#checking_type_traits</a><br>
<br>
However we document __is_convertible_to<br>
<br>
int main()<br>
{<br>
    static_assert(__is_convertible(int, long), "");<br>
    static_assert(__is_convertible_to(int, long), "");<br>
}<br>
<br>
I imagine __is_convertible was left in to give time for things like libc++ to migrate to __is_convertible_to.  It has.  Why don't we just dump __is_convertible.<br></blockquote><div><br></div><div>We can certainly do this (and probably should) but it doesn't fix released versions of Clang... so my preference would be to still change libstdc++ prior to the next GCC release in order to have as much inter-version/toolchain compatibility as we can.</div>
</div>