On Tue, 28 Sep 2010 06:10:56 -0400, Shin Fujishiro <[email protected]>
wrote:
"Robert Jacques" <[email protected]> wrote:
The meta namespace has been proposed as a possible replacement for
__traits, etc. i.e. meta.compiles() vs __traits(compiles, ). So a
different module name might be appropriate.
I'll consider. BTW, will this really happen, or rather is it necessary?
IIRC, the proposal was against the ugly syntax. I think all the
existing __traits except compiles could be wrapped with library
templates with syntactic sanity and added flexibility. For example:
template getMember(alias Scope, string member)
{
alias Identity!(__traits(getMember, Scope, member)) getMember;
}
// This overload does partial application. Useful for staticMap etc.
template getMember(alias Scope)
{
template getMember(string member)
{
alias .getMember!(Scope, member) getMember;
}
}
Shin
I don't know if this is on the road map or not, I just remember a decently
serious discussion about it. I do like your solution, although some
__traits would require tuples of aliases and for aliases to support types
in addition to expressions. Since we'd hopefully be able to do both some
time in the future, no reason not to start a limited form of it now. Also,
since things like getMember are fairly generic for the public namespace,
they should probably be put into a holding struct (e.g. meta). This could
also apply to your staticMap, staticReduce, etc. (i.e. meta.map and
meta.reduce). This has the advantage of using with(meta){ } when large
blocks of metaprogramming are written.
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos