<div dir="ltr"><div>std::conditional should already not evaluate the "other" "branch" depending on the condition.<i> </i>I'm not exactly sure about what you mean by short-circuiting otherwise.<br></div><div><br></div><div>I like this builtin idea, however, there is a slight catch: what the argument for __builtin_has_type or __builtin_type_exists is, syntactically? A name? An elaborated name? It will end up having to be a sort of "super unevaluated context" and that might make parsing it a bit of a hell...<br></div><div><br></div><div>All type_traits so far expect their template argument T to *be* a type.</div><div><br></div><div>In addition, what happens if your condition evaluates to:</div><div>    using FILE = void;</div><div><br></div><div>This still makes "std::FILE" a thing, which will cause weird issues later on, unless the rest of the library is defended against each of these cases. Which seems even more tedious work.<br></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">David Chisnall via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>> ezt írta (időpont: 2020. jún. 26., P, 11:34):<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 26/06/2020 05:05, Louis Dionne via cfe-dev wrote:<br>
> Now, I understand this raises several questions. Of course, this couldn't be<br>
> done at the preprocessor level because I don't think we can know whether a<br>
> declaration exists at that time. However, I was curious to ask on this list<br>
> whether someone could think of a reasonable way to solve this problem.<br>
> <br>
> Having some mechanism for doing this would be a huge life improvement for libc++.<br>
<br>
I agree that something like this would be incredibly useful.  I wonder <br>
if it's sufficient to provide a built-in type trait and write something <br>
like:<br>
<br>
using FILE = std::conditional<__type_exists_v<::FILE>, ::FILE, void>;<br>
<br>
(With some built-in equivalent of std::conditional that does <br>
short-circuit evaluation)  You'd still have the std::FILE type, but it <br>
would be void on platforms where it didn't exist.  Would this be <br>
sufficient?<br>
<br>
David<br>
<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div>