Don: > traits.compiles(XXX) > traits.typeid(TTT) > traits.stringof(T) > traits.allMembers(T) > traits.error("message");
Cute. Simpler alternative, the dot isn't necessary: traits_compiles(XXX) traits_typeid(TTT) traits_stringof(T) traits_allmembers(T) traits_error("message"); Or, more uniformly (all D needs more identifier style uniformity): traits_compiles(XXX) traits_type_id(TTT) traits_string_of(T) traits_all_members(T) traits_error("message"); > For bonus points, allow 'with(traits)': > with(traits) { > if (compiles(XXX)) return stringof(T); > else error("Can't use " ~ stringof(T) ~ " in a transmogrifier."); > } Not nice. Bad. Bye, bearophile