linkname ""; int main() { // Optional pointers ("none" is merged into the pointer as NULL) byte b = 22; byte c; byte^? op = makeopt @b; byte^? opn = none; assert op? == @b; assert op == op; assert op == makeopt @b; assert op != makeopt @c; assert makeopt @b == op; assert op != none; assert none != op; assert op != opn; assert opn != op; assert opn == none; assert none == opn; // Optional integer. This becomes a struct with has_value int? i = makeopt 123; int? j = none; assert i? == 123; assert i == i; assert i == makeopt 123; assert i != makeopt 321; assert makeopt 123 == i; assert i != none; assert none != i; assert i != j; assert j != i; assert j == none; assert none == j; // Optional struct (more complex) (int x, byte y)? os = makeopt (333, 44); (int x, byte y)? osn = none; assert os? == (333, 44); assert os == os; assert os == makeopt (333, 44); assert os != makeopt (111, 22); assert makeopt (333, 44) == os; assert os != none; assert none != os; assert os != osn; assert osn != os; assert osn == none; assert none == osn; // Optional array int#[3]? oa = makeopt [555,444,333]; int#[3]? oan = none; assert oa? == [555,444,333]; assert oa == oa; assert oa == makeopt [555,444,333]; assert oa != makeopt [111,222,333]; assert makeopt [555,444,333] == oa; assert oa != none; assert none != oa; assert oa != oan; assert oan != oa; assert oan == none; assert none == oan; return 0; }