template Select(bool condition, T...)
if (T.length == 2 && SameKind!T) {
static if (__traits(compiles, {enum x = T[0];})) {
static if (condition)
enum Select = T[0];
else
enum Select = T[1];
} else {
static if (condition)
alias Select = T[0];
else
alias Select = T[1];
}
}
It works in simple cases and maybe it's worth changing in some
way the Select of Phobos, to support values too.
But to solve the problem in general I think there's a need for
"lazy template arguments", similar to lazy function arguments,
but for types.
template Select(condition, lazy T1, lazy T2) {...}
Bye,
bearophile