<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Oct 31, 2016 at 2:01 PM, Joerg Sonnenberger via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Mon, Oct 31, 2016 at 01:25:19PM -0700, Richard Smith wrote:<br>
> We could alternatively control the language features based only on the<br>
> selected language mode, and only use version detection to power a warning<br>
> for the (currently fairly common, but becoming less so) case where the<br>
> selected runtime library isn't new enough to implement the requested<br>
> features. That would cause a bunch of scenarios to break when upgrading to<br>
> clang 4.0, but at least the fix would be pretty clear.<br>
<br>
</span>Let's split this slightly. Ultimately, we need to have codegen flags to<br>
control individual features that require support from the ABI<br>
implementation or even just from the STL implementation. I can think of<br>
three different ways to provide the default values:<br>
(1) Language mode selection<br>
(2) Driver logic based on the target<br>
(3) Source controls like #pragma </blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
The third option would serve mostly the same purpose as feature<br>
detection based on some magic __version file, but it also would allow<br>
non-libc++ implementations or -nostdinc use cases to get the same<br>
behavior.</blockquote><div><br></div><div>We need to make this decision in source files without #includes, and the decision may affect entities we implicitly declare at the start of the program, so I'm not entirely convinced that it's feasible to base the default on the contents of the source code we actually process.</div><div><br></div><div>[With the previous strategy, for non-libc++, non-libstdc++ implementations, you would be able to use the -f flags to explicitly specify what your standard library supports (and it's probably reasonable to assume that it fully supports the language specified by -std, by default); for -nostdinc, you could use -stdlib=libc++-4.0 to explicitly specify the version.]</div></div></div></div>