<div class="gmail_quote">2011/10/22 Ruben Van Boxem <span dir="ltr"><<a href="mailto:vanboxem.ruben@gmail.com">vanboxem.ruben@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="gmail_quote"><div class="im">2011/10/22 Howard Hinnant <span dir="ltr"><<a href="mailto:hhinnant@apple.com" target="_blank">hhinnant@apple.com</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div>On Oct 22, 2011, at 2:05 PM, Ruben Van Boxem wrote:<br>
<br>
><br>
><br>
> Attached is a patch to further improve the almost hopeless situation :)<br>
<br>
</div>Thanks, Committed revision 142732.<br>
<div><br>
><br>
> Also attached is a reduced (preprocessed) testcase (algorithm.cpp) producing exactly one of the template errors. The empty template parameter types in the error messages give the impression of a compiler bug, but I'm not quite sure yet. I tried running (MinGW-based) Clang on the preprocessed example, and if one ignores the missing builtin type related errors, one sees these decltype related errors:<br>


<br>
</div>Sorry, I don't have any insights.  Compiler bug seems to me to be a good guess as your clang compiler appears to be fairly old (no rvalue refs, no variadics).<br></blockquote></div><div><br>Yes, The no rvalue references is something I tried to get MSVC to compile this. I ran Clang on the MSVC preprocessed reduced source. Essentially, Clang (and mine's pretty current) fails to compile it as well. I fear the no variadics code that's being used here is not quite right, or at least not in its current syntactic form.<br>
</div></div></blockquote><div><br>OK, attached is a renewed fixed up preprocessed source that gets accepted by Clang and GCC (once you specify -std=c++0x of course <slaps himself on forehead>), but rejected by MSVC 10. I don't assume there's any other way to write this kind of construct, preserving the functionality?<br>
 <br>I'll take it to MS next. This sucks for libc++ and MSVC...<br><br>Ruben<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;">
<div class="gmail_quote"><div>
<br>Thanks for the commit!<br><font color="#888888"><br>Ruben<br><br></font></div><div><div></div><div class="h5"><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">

<br>
Howard<br>
<div><div></div><div><br>
><br>
> [... other typedef related errors with nullptr, unsigned __int64, size_t etc...]<br>
> algorithm.cpp:140:22: error: expected parameter declarator<br>
>     typedef decltype(true ? __t() : __u()) type;<br>
>                      ^<br>
> algorithm.cpp:140:22: error: expected ')'<br>
> algorithm.cpp:140:21: note: to match this '('<br>
>     typedef decltype(true ? __t() : __u()) type;<br>
>                     ^<br>
> algorithm.cpp:140:13: error: C++ requires a type specifier for all declarations<br>
>     typedef decltype(true ? __t() : __u()) type;<br>
>     ~~~~~~~ ^<br>
> algorithm.cpp:140:43: error: expected ';' at end of declaration list<br>
>     typedef decltype(true ? __t() : __u()) type;<br>
>                                           ^<br>
>                                           ;<br>
> algorithm.cpp:144:1: error: C++ requires a type specifier for all declarations<br>
> decltype((std::declval<_Tp>() = std::declval<_Arg>(), true_type()))<br>
> ^~~~~~~~<br>
> algorithm.cpp:144:1: error: variable 'decltype' declared as a template<br>
> decltype((std::declval<_Tp>() = std::declval<_Arg>(), true_type()))<br>
> ^<br>
> algorithm.cpp:144:16: error: no member named 'declval' in namespace 'std'<br>
> decltype((std::declval<_Tp>() = std::declval<_Arg>(), true_type()))<br>
>           ~~~~~^<br>
> algorithm.cpp:144:24: error: '_Tp' does not refer to a value<br>
> decltype((std::declval<_Tp>() = std::declval<_Arg>(), true_type()))<br>
>                        ^<br>
> algorithm.cpp:143:17: note: declared here<br>
> template <class _Tp, class _Arg><br>
>                 ^<br>
> algorithm.cpp:144:29: error: expected expression<br>
> decltype((std::declval<_Tp>() = std::declval<_Arg>(), true_type()))<br>
>                             ^<br>
> algorithm.cpp:144:38: error: no member named 'declval' in namespace 'std'<br>
> decltype((std::declval<_Tp>() = std::declval<_Arg>(), true_type()))<br>
>                                 ~~~~~^<br>
><br>
> For once, these errors aren't really helpful :(, but they are radically different from the MSVC errors (see above, in my quoted email). I'm building a MSVC based Clang now, to see if it works better for libc++ (if at all).<br>


><br>
> Thanks for any insights, comments or commits!<br>
><br>
> Ruben<br>
><br>
><br>
> Comments and commits welcome!<br>
><br>
> Ruben<br>
><br>
</div></div>> <msvc.patch.txt><algorithm.cpp><br>
<br>
</blockquote></div></div></div><br>
</blockquote></div><br>