In some case I'd like a hypothetical static ternary operator usable on types:

alias T = (U.sizeof <= 16) ?? ushort : size_t;

That is equivalent to:

static if (U.sizeof <= 16) {
    alias T = ushort;
} else {
    alias T = size_t;
}


The syntax of a possible library implementation is acceptable:

alias T = Ternary!(U.sizeof <= 16, ushort, size_t);


But I think to implement it well in library code you need a kind of "lazy" for types (it means the T2 type is not computed if b is false):


template Ternary(bool b, T1, lazy T2) {
    static if (b)
        alias Ternary = T1;
    else
        alias Ternary = T2;
}


Are such lazy type arguments generally useful for other purposes?

Bye,
bearophile

Reply via email to