名前付き要件: NullablePointer (C++11以上)
提供: cppreference.com
その型が std::nullptr_t のオブジェクトと比較可能なポインタライクなオブジェクトであることを指定します。
[編集] 要件
この型は以下の要件をすべて満たさなければなりません。
さらに、この型の値初期化されたオブジェクトは、この型のヌル値を生成しなければなりません。 このヌル値はそれ自身とのみ同等でなければなりません。 この型のデフォルト初期化は不定値を持っていても構いません。
この型のオブジェクトは分脈的に bool に変換可能でなければなりません。 この変換の効果はその値がそのヌル値と同等であれば false を返し、そうでなければ true を返します。
この型が行う操作は例外を投げてはなりません。
この型は、この型の2つの値 p
, q
および std::nullptr_t 型 (またはその const 修飾された型) の値 np
が与えられたとき、以下の式を満たさなければなりません。
式 | 効果 |
Type p(np);
Type p = np; |
以後 p は nullptr と同等になる。
|
Type(np) | nullptr と同等な一時オブジェクト。 |
p = np | Type& を返さなければならず、以後 p は nullptr と同等になる。
|
p != q | 分脈的に bool に変換可能な値を返さなければならない。 効果は !(p == q) である。
|
p == np
np == p |
分脈的に bool に変換可能な値を返さなければならない。 効果は (p == Type()) である。
|
p != np
np != p |
分脈的に bool に変換可能な値を返さなければならない。 効果は !(p == np) である。
|
[編集] ノート
逆参照 (operator*
や operator->
) は NullablePointer 型の要件でないことに注意してください。 これらの要件を満たす最小限の型は以下のようなものです。
class handle { int id; public: handle(std::nullptr_t = nullptr) : id(0) { } explicit operator bool() { return id != 0; } friend bool operator ==(handle l, handle r) { return l.id == r.id; } friend bool operator !=(handle l, handle r) { return !(l == r); } };
[編集] 標準ライブラリ
以下の型は NullablePointer を満たさなければなりません。
- すべての Allocator 型
X
のメンバ型X::pointer
、X::const_pointer
、X::void_pointer
およ��X::const_void_pointer
。 - std::unique_ptr のメンバ型
X::pointer
。 - 型 std::exception_ptr。