[cfe-dev] [libcxx] RFC: C++14 and beyond
hhinnant at apple.com
Tue May 7 11:22:13 PDT 2013
On May 2, 2013, at 1:46 PM, Chris Lattner <clattner at apple.com> wrote:
> On May 2, 2013, at 6:50 AM, Howard Hinnant <hhinnant at apple.com> wrote:
>> libcxx was begun as a C++11 (then called C++0x) library. It never even tried to adhere to the C++03 specification, though it does endeavor to work in C++03 language mode.
>> Now we have a working draft for C++14 and certainly libc++ needs to support C++14. However not all C++14 changes are 100% API compatible with C++11 (just like there are a few API breakages between C++03 and C++11). For example John Spicer demonstrated the following example which shows that you can silently impact run time behavior by adding constexpr to a function.
> Just MHO:
> You should clearly use some sort of macro to control the behavior of the headers, and (to support future standards) it should be something like __cplusplus that is defined to a number.
> A harder question is: how should this be surfaced by the clang driver? I don't think it makes sense to force people to pass a -D flag to control this. This is the sort of thing that should have driver support. It seems that we could:
> 1) implicitly tie it to the language setting (i.e., use __cplusplus directly) which is simple, but limiting, and goes against how libc++ works with '98 and '11.
> 2) add a new option, like "-stdlib-version=14" (or something hopefully better)
> 3) tie it into the -stdlib option, so you could use -stdlib=libc++14 or something.
> Given that most people will generally want to use libc++'14 support with C++'14 language support, perhaps the right option is a hybrid of #1 and #2. We could have __cplusplus set the default mode for the library, but then add the new option which would let people override it in the uncommon case where they want C++'14 language but C++'11 library support.
> What do you think?
The prospect of clang driver support sounds good to me. And I like the options you lay out above. However I don't think we're at the point yet where we can ask the clang fe team to step in. First we need to prepare libc++ with the macro(s) that can be overridden, and then we can tell the driver how/when to override them.
More information about the cfe-dev