<div class="gmail_quote">2011/10/16 Aaron Ballman <span dir="ltr"><<a href="mailto:aaron@aaronballman.com">aaron@aaronballman.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On Sun, Oct 16, 2011 at 6:17 AM, Ruben Van Boxem<br>
<<a href="mailto:vanboxem.ruben@gmail.com">vanboxem.ruben@gmail.com</a>> wrote:<br>
>  - pragma GCC system_header needed to be surrounded by an ifdef, because<br>
> MSVC doesn't even have a sensible equivalent. I'll just need to eradicate<br>
> all code that produces warnings :)<br>
>  - I added a _WIN32 _LIBCPP_VISIBILITY section to correspond to the<br>
> dllimport/dllexport stuff. I removed _LIBCPP_VISIBILITY_TAG because it is<br>
> useless. I used the "cxx_EXPORTS" define I get from the CMake build. Is it<br>
> supposed to be used for this? If so, please correct, although there will<br>
> need to be a (compiler) define to activate the correct definition when<br>
> building against a pre-built DLL libc++. For static these should all be<br>
> no-ops, and every symbol should be available.<br>
>  - I added a _MSC_VER section detailing all (missing) compiler features.<br>
> Inline namespaces is the worst, for now, MSVC produces unversioned symbols.<br>
> I asked on SO.com for a workaround, but haven't gotten any response yet :(<br>
>  - I also fixed some formatting in results.Windows<br>
>  - I tried to make do_scan_is better, to allow for more than one mask bit,<br>
> like do_is before. I hope I got the logic right.<br>
><br>
> Please comment or apply. Hopefully more inbound, unless I run into an<br>
> unfixable compiler incompatibility.<br>
<br>
</div>> --- test/input.output/iostream.format/ext.manip/get_time.pass.cpp     (revision 141003)<br>
> +++ test/input.output/iostream.format/ext.manip/get_time.pass.cpp     (working copy)<br>
><br>
> @@ -70,4 +72,8 @@<br>
>          assert(is.eof());<br>
>          assert(!is.fail());<br>
>      }<br>
> +     catch( std::exception &e )<br>
> +     {<br>
> +         std::cout << e.what();<br>
> +     }<br>
> }<br>
<br>
Tabs snuck in here.<br></blockquote><div><br>A whole file snuck in there, removed it. That's a fix for later. <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<br>
> --- include/__config  (revision 141003)<br>
> +++ include/__config  (working copy)<br>
><br>
> @@ -275,8 +307,30 @@<br>
>  using namespace _LIBCPP_NAMESPACE __attribute__((__strong__));<br>
>  }<br>
><br>
> -#endif  // defined(__GNUC__)<br>
> +#elif defined(_MSC_VER)<br>
><br>
> +#define _LIBCPP_HAS_NO_UNICODE_CHARS<br>
> +#define _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER<br>
> +#define _LIBCPP_HAS_NO_CONSTEXPR<br>
> +#define _LIBCPP_HAS_NO_UNICODE_CHARS<br>
<br>
_LIBCPP_HAS_NO_UNICODE_CHARS is defined twice.<br></blockquote><div><br>Duplicate removed.<br> <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<br>
> --- src/locale.cpp    (revision 141003)<br>
> +++ src/locale.cpp    (working copy)<br>
> @@ -1089,17 +1089,18 @@<br>
>          if (iswctype_l(*low, m, __l))<br>
>              break;<br>
>  #else<br>
> -        if (m & space && !iswspace_l(*low, __l)) continue;<br>
> -        if (m & print && !iswprint_l(*low, __l)) continue;<br>
> -        if (m & cntrl && !iswcntrl_l(*low, __l)) continue;<br>
> -        if (m & upper && !iswupper_l(*low, __l)) continue;<br>
> -        if (m & lower && !iswlower_l(*low, __l)) continue;<br>
> -        if (m & alpha && !iswalpha_l(*low, __l)) continue;<br>
> -        if (m & digit && !iswdigit_l(*low, __l)) continue;<br>
> -        if (m & punct && !iswpunct_l(*low, __l)) continue;<br>
> -        if (m & xdigit && !iswxdigit_l(*low, __l)) continue;<br>
> -        if (m & blank && !iswblank_l(*low, __l)) continue;<br>
> -        break;<br>
> +        bool should_break = false<br>
> +        if (m & space && !iswspace_l(*low, __l)) should_break |= true;<br>
> +        if (m & print && !iswprint_l(*low, __l)) should_break |= true;<br>
> +        if (m & cntrl && !iswcntrl_l(*low, __l)) should_break |= true;<br>
> +        if (m & upper && !iswupper_l(*low, __l)) should_break |= true;<br>
> +        if (m & lower && !iswlower_l(*low, __l)) should_break |= true;<br>
> +        if (m & alpha && !iswalpha_l(*low, __l)) should_break |= true;<br>
> +        if (m & digit && !iswdigit_l(*low, __l)) should_break |= true;<br>
> +        if (m & punct && !iswpunct_l(*low, __l)) should_break |= true;<br>
> +        if (m & xdigit && !iswxdigit_l(*low, __l)) should_break |= true;<br>
> +        if (m & blank && !iswblank_l(*low, __l)) should_break |= true;<br>
> +        if( should_break ) break;<br>
>  #endif<br>
>      }<br>
>      return low;<br>
<br>
I don't believe these are equivalent.  In the first case, as soon as<br>
something fails the is* test, you start the next loop iteration.  If<br>
you find nothing failing the loop test, you break.  In the second<br>
case, you plow through all of the is* tests and then break if any of<br>
them fail.  Maybe they're not meant to be equivalent and I'm just not<br>
understanding the reason for the logic change, though.<br></blockquote><div><br>OK, I removed this part too. Never mind about this...<br><br>Fresh patch attached.<br><br>Ruben <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<font color="#888888"><br>
~Aaron<br>
</font></blockquote></div><br>