Define std::atomic_ref and std::atomic<floating-point> for C++20
authorJonathan Wakely <jwakely@redhat.com>
Thu, 11 Jul 2019 19:43:25 +0000 (20:43 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Thu, 11 Jul 2019 19:43:25 +0000 (20:43 +0100)
commita90fe12c80a13ffed9d5c775703788275d8b7c42
treeaa520ab892dcf849531edb655bcff7516e600618
parent4c98bdadcb67e12c63882587d96ab6335711f009
Define std::atomic_ref and std::atomic<floating-point> for C++20

This adds the new atomic types from C++2a, as proposed by P0019 and
P0020. To reduce duplication the calls to the compiler's atomic
built-ins are wrapped in new functions in the __atomic_impl namespace.
These functions are currently only used by std::atomic<floating-point>
and std::atomic_ref but could also be used for all other specializations
of std::atomic.

* include/bits/atomic_base.h (__atomic_impl): New namespace for
wrappers around atomic built-ins.
(__atomic_float, __atomic_ref): New class templates for use as base
classes.
* include/std/atomic (atomic<float>, atomic<double>)
(atomic<long double>): New explicit specializations.
(atomic_ref): New class template.
(__cpp_lib_atomic_ref): Define.
* include/std/version (__cpp_lib_atomic_ref): Define.
* testsuite/29_atomics/atomic/60695.cc: Adjust dg-error.
     * testsuite/29_atomics/atomic_float/1.cc: New test.
     * testsuite/29_atomics/atomic_float/requirements.cc: New test.
     * testsuite/29_atomics/atomic_ref/deduction.cc: New test.
     * testsuite/29_atomics/atomic_ref/float.cc: New test.
     * testsuite/29_atomics/atomic_ref/generic.cc: New test.
     * testsuite/29_atomics/atomic_ref/integral.cc: New test.
     * testsuite/29_atomics/atomic_ref/pointer.cc: New test.
     * testsuite/29_atomics/atomic_ref/requirements.cc: New test.

From-SVN: r273420
13 files changed:
libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/atomic_base.h
libstdc++-v3/include/std/atomic
libstdc++-v3/include/std/version
libstdc++-v3/testsuite/29_atomics/atomic/60695.cc
libstdc++-v3/testsuite/29_atomics/atomic_float/1.cc [new file with mode: 0644]
libstdc++-v3/testsuite/29_atomics/atomic_float/requirements.cc [new file with mode: 0644]
libstdc++-v3/testsuite/29_atomics/atomic_ref/deduction.cc [new file with mode: 0644]
libstdc++-v3/testsuite/29_atomics/atomic_ref/float.cc [new file with mode: 0644]
libstdc++-v3/testsuite/29_atomics/atomic_ref/generic.cc [new file with mode: 0644]
libstdc++-v3/testsuite/29_atomics/atomic_ref/integral.cc [new file with mode: 0644]
libstdc++-v3/testsuite/29_atomics/atomic_ref/pointer.cc [new file with mode: 0644]
libstdc++-v3/testsuite/29_atomics/atomic_ref/requirements.cc [new file with mode: 0644]