gcc/libstdc++-v3/include/std
Jonathan Wakely 25999a112f Implement P0558R2 changes to std::atomic
The restrictions forbidding arithmetic on atomic pointer types are only
enabled for C++17 and later, retaining the GNU extension for older
standards. The new nested typedefs and changes to prevent scalar
parameters participating in template argument deduction are enabled
unconditionally.

	PR libstdc++/69769
	PR libstdc++/85886
	* include/bits/atomic_base.h (__atomic_base::value_type)
	(__atomic_base::difference_type): Add new typedefs.
	* include/std/atomic (atomic<bool>::value_type, atomic<T>::value_type)
	(atomic<T*>::value_type, atomic<T*>::difference_type): Likewise.
	(atomic<T*>::operator++, atomic<T*>::operator--)
	(atomic<T*>::operator+=, atomic<T*>::operator-=)
	(atomic<T*>::fetch_add, atomic<T*>::fetch_sub): Add static assertion
	to enforce C++17 requirement on pointer arithmetic.
	(__atomic_val_t, __atomic_diff_t): New alias templates.
	(atomic_init, atomic_store_explicit, atomic_exchange_explicit)
	(atomic_compare_exchange_weak_explicit)
	(atomic_compare_exchange_strong_explicit, atomic_store)
	(atomic_exchange, atomic_compare_exchange_weak)
	(atomic_compare_exchange_strong): Use __atomic_val_t to make
	scalar parameters be non-deduced contexts.
	(atomic_fetch_add_explicit, atomic_fetch_sub_explicit)
	(atomic_fetch_add, atomic_fetch_sub): Change first parameter to be
	atomic instead of __atomic_base, and use __atomic_diff_t for scalar
	parameters.
	(atomic_fetch_and_explicit, atomic_fetch_or_explicit)
	(atomic_fetch_xor_explicit, atomic_fetch_and, atomic_fetch_or)
	(atomic_fetch_xor): Use __atomic_val_t for scalar parameters.
	(atomic_fetch_add_explicit, atomic_fetch_sub_explicit)
	(atomic_fetch_add, atomic_fetch_sub): Remove overloads for atomic
	address types.
	* testsuite/29_atomics/atomic/60695.cc: Adjust dg-error lineno.
	* testsuite/29_atomics/atomic/69769.cc: New test.
	* testsuite/29_atomics/atomic/nonmembers.cc: New test.
	* testsuite/29_atomics/atomic/operators/pointer_partial_void.cc:
	Disable test for C++17 and later.
	* testsuite/29_atomics/atomic/requirements/typedefs.cc: New test.
	* testsuite/29_atomics/atomic_integral/nonmembers.cc: New test.
	* testsuite/29_atomics/atomic_integral/requirements/typedefs.cc: New
	test.

From-SVN: r260676
2018-05-24 16:28:26 +01:00
..
algorithm
any Define std::remove_cvref and std::remove_cvref_t for C++2a 2018-05-03 13:40:10 +01:00
array
atomic Implement P0558R2 changes to std::atomic 2018-05-24 16:28:26 +01:00
bitset re PR libstdc++/84998 (std::hash<std::bitset<N>> fails in Debug Mode) 2018-03-20 21:45:14 +00:00
charconv
chrono
codecvt
complex Rollback bad commits! Sorry! 2018-05-07 16:13:48 +00:00
condition_variable
deque
filesystem
forward_list
fstream Add support for opening file streams from wide character strings 2018-05-21 18:18:35 +01:00
functional
future Use std::invoke_result in std::async instead of std::result_of 2018-05-03 13:40:15 +01:00
iomanip
ios
iosfwd
iostream
istream
iterator
limits
list
locale
map
memory
mutex
numeric
optional PR libstdc++/85642 fix is_nothrow_default_constructible<optional<T>> 2018-05-04 09:57:23 +01:00
ostream
queue
random
ratio
regex
scoped_allocator
set
shared_mutex
sstream
stack
stdexcept Some libstdc++ fixes for -Wdeprecated-copy. 2018-05-18 16:02:14 -04:00
streambuf
string
string_view
system_error Some libstdc++ fixes for -Wdeprecated-copy. 2018-05-18 16:02:14 -04:00
thread PR libstdc++/84535 constrain std::thread constructor 2018-05-03 15:08:36 +01:00
tuple Define std::remove_cvref and std::remove_cvref_t for C++2a 2018-05-03 13:40:10 +01:00
type_traits Define std::remove_cvref and std::remove_cvref_t for C++2a 2018-05-03 13:40:10 +01:00
typeindex
unordered_map
unordered_set
utility
valarray PR libstdc++/83860 avoid dangling references in valarray closure types 2018-05-02 17:41:46 +01:00
variant Qualify std::__invoke in <variant> to prevent ADL 2018-05-15 13:06:57 +01:00
vector