llvm/libcxx
Louis Dionne a9c9183ca4 [libc++] Use the using_if_exists attribute when provided
As discussed on cfe-dev [1], use the using_if_exists Clang attribute when
the compiler supports it. This makes it easier to port libc++ on top of
new platforms that don't fully support the C Standard library.

Previously, libc++ would fail to build when trying to import a missing
declaration in a <cXXXX> header. With the attribute, the declaration will
simply not be imported into namespace std, and hence it won't be available
for libc++ to use. In many cases, the declarations were *not* actually
required for libc++ to work (they were only surfaced for users to use
them as std::XXXX), so not importing them into namespace std is acceptable.

The same thing could be achieved by conscious usage of `#ifdef` along
with platform detection, however that quickly creates a maintenance
problem as libc++ is ported to new platforms. Furthermore, this problem
is exacerbated when mixed with vendor internal-only platforms, which can
lead to difficulties maintaining a downstream fork of the library.

For the time being, we only use the using_if_exists attribute when it
is supported. At some point in the future, we will start removing #ifdef
paths that are unnecessary when the attribute is supported, and folks
who need those #ifdef paths will be required to use a compiler that
supports the attribute.

[1]: http://lists.llvm.org/pipermail/cfe-dev/2020-June/066038.html

Differential Revision: https://reviews.llvm.org/D90257
2021-06-04 09:55:21 -04:00
..
benchmarks [libcxx][nfc] prefixes test type input_iterator with cpp17_ 2021-05-02 05:02:59 +00:00
cmake [libc++] Also build the static library in the Apple cache 2021-06-03 18:15:20 -04:00
docs [libc++] Implement LWG3435 (constraints on reverse_iterator and move_iterator) 2021-06-03 15:49:41 -04:00
include [libc++] Use the using_if_exists attribute when provided 2021-06-04 09:55:21 -04:00
lib [libc++] Disentangle std::pointer_safety 2021-05-03 14:33:49 -04:00
src [libcxx] Don't use an undefined '+' in unsigned/octal/hexal print formats 2021-06-04 12:07:30 +03:00
test [libc++] Implement LWG3435 (constraints on reverse_iterator and move_iterator) 2021-06-03 15:49:41 -04:00
utils [libc++] Simplify apple-install-libcxx since we always use the same CMake cache 2021-06-03 18:26:38 -04:00
www
.clang-format [libcxx][NFC] removes IndentRequires from .clang-format 2021-04-15 19:28:45 +00:00
.gitignore
appveyor-reqs-install.cmd
appveyor.yml
CMakeLists.txt [libc++] Support per-target __config_site in per-target runtime build 2021-04-28 14:27:16 -07:00
CREDITS.TXT
LICENSE.TXT
TODO.TXT