Verify tuple is a tuple of class objects?
Steven Schveighoffer
schveiguy at yahoo.com
Fri Feb 18 13:22:18 PST 2011
On Fri, 18 Feb 2011 16:15:16 -0500, Sean Eskapp <eatingstaples at gmail.com>
wrote:
> Is there a way to "run" a template at compile time, without using a
> member?
> What I'm trying to do is verify that every element of a tuple is a class
> type,
> and so far, I've been doing this:
>
> template VerifyTuple(Type, Types...)
> {
> static assert(is(Type : Object), Type.stringof ~ " is not a class
> type.");
>
> static if(Types.length == 0)
> alias void dummy;
> else
> alias VerifyTuple!(Types).dummy dummy;
> }
>
> and to use it, I have to do this:
> class Foo(T...)
> {
> alias VerifyTuple!(T).dummy dummy;
> }
>
> Is there any way to just "run" the template, without bothering to use the
> dummy aliases?
eponymous should help (also cleaned up some of your code):
template VerifyTuple(Types...)
{
static if(Types.length == 0)
enum bool VerifyTuple = true;
else
enum bool VerifyTuple == is(Type : Object) &&
VerifyTuple!(Types[1..$]);
}
class Foo(T...)
{
static assert(VerifyTuple!(T...), "one of types in " ~ T.stringof ~ "
is not a class");
}
It doesn't identify the specific type that isn't a class, but that could
be done with a separate template.
-Steve
More information about the Digitalmars-d-learn
mailing list