View source code
Display the source code in std/typecons.d from which this page was generated on github.
Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using local clone.

std.typecons.NullableRef/nullableRef - multiple declarations

Function nullableRef

Just like Nullable!T, except that the object refers to a value sitting elsewhere in memory. This makes assignments overwrite the initially assigned value. Internally NullableRef!T only stores a pointer to T (i.e., Nullable!T.sizeof == (T*).sizeof).

auto nullableRef(T) (
  T* t
);

Example

import std.exception : assertThrown;

int x = 5, y = 7;
auto a = nullableRef(&x);
assert(!a.isNull);
writeln(a); // 5
writeln(x); // 5
a = 42;
writeln(x); // 42
assert(!a.isNull);
writeln(a); // 42
a.nullify();
writeln(x); // 42
assert(a.isNull);
assertThrown!Throwable(a.get);
assertThrown!Throwable(a = 71);
a.bind(&y);
writeln(a); // 7
y = 135;
writeln(a); // 135

Struct NullableRef

Just like Nullable!T, except that the object refers to a value sitting elsewhere in memory. This makes assignments overwrite the initially assigned value. Internally NullableRef!T only stores a pointer to T (i.e., Nullable!T.sizeof == (T*).sizeof).

struct NullableRef(T) ;

Constructors

NameDescription
this (value) Constructor binding this to value.

Properties

NameTypeDescription
get[get] inout(T)Gets the value. this must not be in the null state. This function is also called for the implicit conversion to T.
isNull[get] boolReturns true if and only if this is in the null state.

Methods

NameDescription
bind (value) Binds the internal state to value.
nullify () Forces this to the null state.
opAssign (value) Assigns value to the internally-held state.

Example

import std.exception : assertThrown;

int x = 5, y = 7;
auto a = nullableRef(&x);
assert(!a.isNull);
writeln(a); // 5
writeln(x); // 5
a = 42;
writeln(x); // 42
assert(!a.isNull);
writeln(a); // 42
a.nullify();
writeln(x); // 42
assert(a.isNull);
assertThrown!Throwable(a.get);
assertThrown!Throwable(a = 71);
a.bind(&y);
writeln(a); // 7
y = 135;
writeln(a); // 135

Authors

Andrei Alexandrescu, Bartosz Milewski, Don Clugston, Shin Fujishiro, Kenji Hara

License

Boost License 1.0.