On 07/29/2015 11:08 AM, vladde wrote:
On Wednesday, 29 July 2015 at 18:04:48 UTC, vladde wrote:
Apparently, if I only check for a character the code compiles without
the need of static if.

if(is(typeof(c) == dchar) || is(typeof(c) == char)){
slots[xy.y][xy.x].character = c; } //Compiles and works as expected

And changing all if statements to static if still does not compile.

The error may be the capital C in the else branch. (?)

Can you provide complete code please? The following compiles with dmd 2.067:

struct XY {size_t x, y;}

private template color_type(int offset)
{
  static enum type : int
  {
    init = 39 + offset,

    black   = 30 + offset,
    red     = 31 + offset,
    green   = 32 + offset,
    yellow  = 33 + offset,
    blue    = 34 + offset,
    magenta = 35 + offset,
    cyan    = 36 + offset,
    white   = 37 + offset,

    light_black   = 90 + offset,
    light_red     = 91 + offset,
    light_green   = 92 + offset,
    light_yellow  = 93 + offset,
    light_blue    = 94 + offset,
    light_magenta = 95 + offset,
    light_cyan    = 96 + offset,
    light_white   = 97 + offset
  }
}

alias color_type!0 .type fg;

// alias fg = colorize.fg; //[2]

void changeSlot(C...)(XY xy, C changes){
    foreach(c; changes){
        static if(is(typeof(c) == dchar) || is(typeof(c) == char))
        {
            // slots[xy.y][xy.x].character = c;
        }
        else if(is(typeof(c) == fg))
        {
            // slots[xy.y][xy.x].fg = C;
        }
    }
}

void main()
{
    changeSlot(XY(10, 15), fg.red);
}

Ali

Reply via email to