[cfe-dev] [libc++] Is libc++ compatible with previous c++ language standard implementation

alan snape via cfe-dev cfe-dev at lists.llvm.org
Wed Mar 7 18:09:20 PST 2018


As a template class, it is impossible to find the `std::vector` class in
libc++. When writing a template class, all the code need during
compile-time should be provided in the header file; and when compiling with
a template class/function, the template parameter will be replaced with the
concrete type/argument. As you can see, this is just a compile-time process
rather than a link-time process, much less the libc++.

explicit vector( size_type count, const T& value = T(), const Allocator&
> alloc = Allocator()); (until C++11) *(1)*
> explicit vector( size_type count );(since C++11) (until C++14) *(2)*
>
> If I use vector<T> a(1), which one will be chosen with different c++ std
> command option, such as -std=c++03, -std=c++11? Actually, I can not find
> the (1) version in libc++ source.
>
Just as what I mentioned above, the answer is it depends. If you compile
your code under standard C++11, (2) will be used; if you use previous
standard, (1) will be used. (Also, it depends on the argument you provided,
but the header file will deal with it.)


> In my option, both two functions should be implemented and guarded by
> related language level macro, but I can not find in libc++ source. So
> libc++ is not compatible with previous c++ language standard implementation?
>
So, it is not weird to find nothing about that.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20180308/9762d894/attachment.html>


More information about the cfe-dev mailing list