Typedef

Typedef allows the creation of a unique type which is based on an existing type. Unlike the alias feature, Typedef ensures the two types are not considered as equals.

struct Typedef (
T
T init = T.init
string cookie = null
) {}

Members

Functions

toString
string toString()
void toString(W writer, FormatSpec!char fmt)

Convert wrapped value to a human readable string

Mixed In Members

From mixin Proxy!Typedef_payload

Examples

alias MyInt = Typedef!int;
MyInt foo = 10;
foo++;
assert(foo == 11);

custom initialization values

alias MyIntInit = Typedef!(int, 42);
static assert(is(TypedefType!MyIntInit == int));
static assert(MyIntInit() == 42);

Typedef creates a new type

alias MyInt = Typedef!int;
static void takeInt(int) {}
static void takeMyInt(MyInt) {}

int i;
takeInt(i);    // ok
static assert(!__traits(compiles, takeMyInt(i)));

MyInt myInt;
static assert(!__traits(compiles, takeInt(myInt)));
takeMyInt(myInt);  // ok

Use the optional cookie argument to create different types of the same base type

alias TypeInt1 = Typedef!int;
alias TypeInt2 = Typedef!int;

// The two Typedefs are the same type.
static assert(is(TypeInt1 == TypeInt2));

alias MoneyEuros = Typedef!(float, float.init, "euros");
alias MoneyDollars = Typedef!(float, float.init, "dollars");

// The two Typedefs are _not_ the same type.
static assert(!is(MoneyEuros == MoneyDollars));

Meta

Suggestion Box / Bug Report