Skip to content

Instantly share code, notes, and snippets.

@JakobOvrum
Last active August 29, 2015 14:20
Show Gist options
  • Save JakobOvrum/3bc98e8e53c03c1c6ef4 to your computer and use it in GitHub Desktop.
Save JakobOvrum/3bc98e8e53c03c1c6ef4 to your computer and use it in GitHub Desktop.
List classes in a module at CT
alias Identity(alias sym) = sym;
template ClassesInModule(alias mod)
{
import std.typetuple : Filter, staticMap;
enum isAccessibleClassDeclaration(string member) = __traits(compiles, __traits(getMember, mod, member)) &&
is(Identity!(__traits(getMember, mod, member)) == class);
alias LookupMemberType(string member) = Identity!(__traits(getMember, mod, member));
alias ClassesInModule = staticMap!(LookupMemberType, Filter!(isAccessibleClassDeclaration, __traits(allMembers, mod)));
}
import std.stream;
alias ClassesInStdStream = ClassesInModule!(std.stream);
pragma(msg, ClassesInStdStream);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment