#if !macro typedef Huh = GenericBuild; @:genericBuild(Main.GenericBuild.build()) #end class GenericBuild { #if macro static var counter = 0; static function build() { var name = 'Cls${counter++}'; var ret = macro class $name { public function new() {} } haxe.macro.Context.defineType(ret); return haxe.macro.Context.getType(name); } #end } class Main { static function main() { #if !macro $type(Huh.new); #end } }