diff --git a/reference/atomic/atomic.md b/reference/atomic/atomic.md index c9909623d..1f0424e7d 100644 --- a/reference/atomic/atomic.md +++ b/reference/atomic/atomic.md @@ -6,11 +6,11 @@ ```cpp namespace std { - template struct atomic; + template struct atomic; // (1) C++11 - template<> struct atomic; - template<> struct atomic; // C++20 - template struct atomic; + template<> struct atomic; // (2) C++11 + template<> struct atomic; // (3) C++20 + template struct atomic; // (4) C++11 } ``` * integral[italic] @@ -19,6 +19,14 @@ namespace std { ## 概要 `atomic`クラステンプレートは、型`T`をアトミック操作するためのクラステンプレートである。組み込み型に対する特殊化が提供されており、それぞれに特化した演算が用意されている。 +- (1) : プライマリテンプレート。宣言のみ +- (2) : 整数型に対する特殊化 +- (3) : (CV修飾されていない) 浮動小数点数型に対する特殊化 + - (C++23) : 拡張浮動小数点数型を含む +- (4) : 任意の型のポインタに対する特殊化 + +これらのほか、[``](/reference/memory.md)ヘッダで[`std::shared_ptr`と`std::weak_ptr`に対する`atomic`クラスの特殊化](/reference/memory/atomic.md)が定義される。 + ## テンプレートパラメータ制約 - 型`T`は[コピー構築可能](/reference/concepts/copy_constructible.md)かつ[コピー代入可能](/reference/type_traits/is_copy_assignable.md)であること @@ -304,3 +312,5 @@ int main() - [Correctly implementing a spinlock in C++](https://rigtorp.se/spinlock/) - [P1135R6 The C++20 Synchronization Library](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1135r6.html) - C++20での`atomic_signed_lock_free`と`atomic_unsigned_lock_free`の追加 +- [P1467R9 Extended floating-point types and standard names](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1467r9.html) + - C++23で拡張浮動小数点数型もテンプレート引数として指定することが許可された diff --git a/reference/atomic/atomic_ref.md b/reference/atomic/atomic_ref.md index c9359034f..2af2f3bd4 100644 --- a/reference/atomic/atomic_ref.md +++ b/reference/atomic/atomic_ref.md @@ -6,11 +6,11 @@ ```cpp namespace std { - template struct atomic_ref; + template struct atomic_ref; // (1) C++20 - template<> struct atomic_ref; - template<> struct atomic_ref; - template struct atomic_ref; + template<> struct atomic_ref; // (2) C++20 + template<> struct atomic_ref; // (3) C++20 + template struct atomic_ref; // (4) C++20 } ``` * integral[italic] @@ -27,6 +27,12 @@ namespace std { `atomic_ref`クラステンプレートは型`T`の値をコピーではなく参照で保持するため、`atomic_ref`オブジェクトより先に参照先の変数の寿命が尽きてはならない。 +- (1) : プライマリテンプレート。宣言のみ +- (2) : 整数型に対する特殊化 +- (3) : (CV修飾されていない) 浮動小数点数型に対する特殊化 + - (C++23) : 拡張浮動小数点数型を含む +- (4) : 任意の型のポインタに対する特殊化 + ## テンプレートパラメータ制約 - 型`T`は[`is_trivially_copyable_v`](/reference/type_traits/is_trivially_copyable.md)` == true`であること @@ -185,3 +191,5 @@ int main() ### 参照 - [P0019R8 Atomic Ref](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0019r8.html) +- [P1467R9 Extended floating-point types and standard names](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1467r9.html) + - C++23で拡張浮動小数点数型もテンプレート引数として指定することが許可された