test if the alias of a template is a literal

Gianni Pisetta via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Oct 27 07:04:23 PDT 2016


Hi all,
I have an AliasSeq composed of literal strings, variables and 
delegates. I want to build a template Optimize that will return 
an AliasSeq that have all adjacent literals concatenated into 
one. So i writed something like this:

template isStringLiteral(alias V) {
     enum bool isStringLiteral = ( is( typeof( V ) == string ) );
}

template Optimize(Os...) {
     static if ( Os.length < 2 )
         alias Optimize = Os;
     else {
         alias Optimized = Optimize!(Os[1..$]);

         static if ( isStringLiteral!(Os[0]) && 
isStringLiteral!(Optimized[0]) ) {
             enum string First = Os[0] ~ Optimized[0];
             alias Rest = Optimized[1..$];
         }
         else {
             alias First = AliasSeq!(Os[0]);
             alias Rest = Optimized;
         }
         alias Optimize = AliasSeq!(First, Rest);
     }
}

but at the moment isStringLiteral will return true even with 
variables of type string. So i searched for a metod to check if 
an alias is a literal value, but found nothing. Anyone have any 
clue on how can be done?

Thanks,
Gianni Pisetta


More information about the Digitalmars-d-learn mailing list