It isn't cheating but IMO it's bad form. If you can do it without
__traits(compiles) (or is(typeof()), etc.) you should, because
there are many reasons why something will not compile, and only
one of those reasons is the one you want to know. If there's no
way around using it, you should still try to limit what is passed
to __traits(compiles).
enum hasFront(T) = __traits(compiles, { auto _ = T.init.font; });
It's fairly easy to spot such a typo when it's only one line, but
the risk of having some other compiler error being the reason
your static if branch isn't taken grows very quickly with each
additional line or bit of complexity.