The is expression

Caligo iteronvexor at gmail.com
Fri Apr 1 19:00:53 PDT 2011


On Fri, Apr 1, 2011 at 5:14 PM, enuhtac <enuhtac_lists at gmx.de> wrote:
> Hello,
>
> the "is" expression is a great feature of D - but its use is not very
> intuitive, at least for me.
> I'm trying to write a template that figures out if the template
> parameter is of a given type.
> This is the type I would like to check for:
>
> struct A( T, string s )
> { ... };
>
> One possibility to accomplish this check is explicit template
> specialization:
>
> template isA( T )
> {
>    enum bool isA = false;
> };
>
> template isA( T : A!( U, s ), U, string s )
> {
>    enum bool isA = true;
> };
>
> This more or less the C++ approach. But in D this could also be done
> with static if and the "is" expression. As I understand "is" it should
> be done like this:
>
> template isA( T )
> {
>    static if( is( T U == A!( U, s ), string s ) )
>        enum bool isA = true;
>    else
>        enum bool isA = false;
> };
>
> But this does not work. So what am I doing wrong?
>
> Regards,
> enuhtac
>
>

I'm new too, but I think it should be like this:

template isA( T ){

  enum bool isA = is(T : A)
}

if the name of enum is same as the template then you could use it as such:

if( isA( T ) ){ }

instead of

if( isA( T ).isA ){ }

Also note that : allows implicit conversion, while == requires the
types to be exactly the same.


More information about the Digitalmars-d-learn mailing list