Template string literal?

Simen kjaeraas simen.kjaras at gmail.com
Wed Mar 16 14:38:27 PDT 2011


On Wed, 16 Mar 2011 22:30:17 +0100, Jacob Carlborg <doob at me.com> wrote:

> Is it possible to declare string literal of a template type, something  
> like this:
>
> void bar (const(T)[] a) {}
>
> void foo (T) (const(T)[] a)
> {
>      bar("abc"T);
> }
>
> foo("def"w);
>
> In this case the string literal passed to "bar" would be of the type  
> "wstring".
>
> Is this somehow possible or do I have to create a variable?

Not having D available, I would say this should work:

void foo( T )( const( T )[] a ) {
     bar( cast(T)"abc" );
}

Otherwise:

template stringSuffix( T ) {
     static if ( is( Unqual!T == char ) ) {
         enum stringSuffix = "c";
     } else static if ( is( Unqual!T == wchar ) ) {
         enum stringSuffix = "w";
     } else static if ( is( Unqual!T == dchar ) ) {
         enum stringSuffix = "d";
     } else {
         static assert( false );
     }
}

void foo( T )( const( T )[] a ) {
     bar( mixin( `"abc"` ~ stringSuffix!T ) );
}

-- 
Simen


More information about the Digitalmars-d-learn mailing list