On Sat, 27 Jun 2015 16:28:40 +0000, BBaz wrote: > I try to build a symbol table: > > --- > module aveb; > > import std.stdio; > import std.algorithm.searching; > import std.ascii; > > void* [string] sig; > > void ana(alias mod)() > { > import std.traits; foreach(memb;__traits(allMembers,mod)) > static if > (canFind(["package","public"],__traits(getProtection,memb))) > static if (isSomeFunction! (__traits(getMember,mod,memb) > )) > foreach(ov;__traits(getOverloads,mod,memb)) > sig[memb] = &__traits(getMember,mod,memb); > } > > void main(string[] args) > { > //ana!(std.ascii); //ok ana!(std.traits); > writeln(sig); > } > --- > >>Error: function std.traits.demangleParameterStorageClass is not >>accessible from module aveb Error: function >>std.traits.demangleParameterStorageClass is not accessible from module >>aveb etc > > > problem is that the sub functions are not accessible. i'd like to skip > them.
wrap your code in another static if: static if (is(typeof(__traits(getMember, mod, memb)))) { ... } `is()` gags errors and simply returns `false` for invalid cases.
signature.asc
Description: PGP signature