It seems that DMD already interprets some foreach's at compiletime if the argument is known at compile time:

eg:

        string FooString()
        {
                string stuff = "";
                foreach(member, __traits( allMembers, moduleName)
                {
                        stuff ~= member;
                }
                return stuff;
        }

mixin(FooString());

However, for non-string templates. They have to be written in a recursive form, which can be particularly difficult in some cases.

template FooTemplate() //This code is totally made up and not meant to do anything useful, or necessarily be valid.
        {
                auto FooTemplate = TypeTuple!()
                static foreach(member, __traits( allMembers, someClass)
                {
FooTemplate = TypeTuple!(FooTemplate, __traits(getMember, someClass, member));
                }
        }

What's the consensis on something like this?

Reply via email to