On Wed, 16 Mar 2011 22:30:17 +0100, Jacob Carlborg <d...@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

Reply via email to