import std.stdio;

void setText(T=char)(T[] text) {
    writefln("setText - type: ", typeid(T));
    static if (is(T==char)) {
        writefln("setText: char");
    } else
    static if (is(T==wchar)) {
        writefln("setText: wchar");
    } else
    static if (is(T==dchar)) {
        writefln("setText: dchar");
    } else {
        pragma(msg, "Wrong type!");
        // How to stop cleanly compilation? Probably some template gurus
        // could help more here... ;-)
        stop;
    }
}

T[] getText(T=char)() {
    writefln("getText - type: ", typeid(T));
    static if (is(T==char)) {
        writefln("getText: char");
        return "char"c;
    } else
    static if (is(T==wchar)) {
        writefln("getText: wchar");
        return "wchar"w;
    } else
    static if (is(T==dchar)) {
        writefln("getText: dchar");
        return "dchar"d;
    } else {
        pragma(msg, "Wrong type!");
        // How to stop cleanly compilation? Probably some template gurus
        // could help more here... ;-)
        stop;
    }
}

void main() {
    setText("char[]");
    setText!(wchar)("wchar[]");
    setText!(dchar)("dchar[]");

    writefln("returned: ", getText());
    writefln("returned: ", getText!(wchar)());
    writefln("returned: ", getText!(dchar)());


}


