Report a bug
If you spot a problem with this page, click here to create a Github 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 a local clone.

mir.primitives

Templates used to check primitives.
Publicly imports mir.array.primitives.
Authors:
Ilya Yaroshenko
enum bool hasLength(R);
Returns:
true if R has a length member that returns an integral type implicitly convertible to size_t.
R does not have to be a range.
Examples:
static assert(hasLength!(char[]));
static assert(hasLength!(int[]));
static assert(hasLength!(inout(int)[]));

struct B { size_t length() { return 0; } }
struct C { @property size_t length() { return 0; } }
static assert(hasLength!(B));
static assert(hasLength!(C));
enum bool hasShape(R);
Returns:
true if R has a shape member that returns an static array type of size_t[N].
Examples:
static assert(hasLength!(char[]));
static assert(hasLength!(int[]));
static assert(hasLength!(inout(int)[]));

struct B { size_t length() { return 0; } }
struct C { @property size_t length() { return 0; } }
static assert(hasLength!(B));
static assert(hasLength!(C));
template DimensionCount(T) if (hasShape!T || hasLength!T)
alias elementsCount = mir.array.primitives.length(ulong d : 0, T)(T[] array);