/* TEST_OUTPUT: --- Hello World from CTFE Hello[1 .. 3] = el S.str abcdefghij[2 .. 6] = cdef --- */ struct S { string str = "S.str"; alias str this; } int greeting(scope const char[][] values) pure nothrow @safe @nogc { const string newline = "\n"; foreach (const val; values) { __ctfeWrite(val); __ctfeWrite(newline); } // Test slices const val = values[0]; __ctfeWrite(val[]); __ctfeWrite(['[','1',' ','.','.',' ','3',']',' ','=',' ']); __ctfeWrite(val[1 .. 3]); __ctfeWrite(newline); S s; __ctfeWrite(s); __ctfeWrite(newline); // Test mutable slices char[10] buffer; fill(buffer); // Avoid potential shortcuts for literals __ctfeWrite(buffer[0 .. $]); __ctfeWrite("[2 .. 6] = "); __ctfeWrite(buffer[2 .. 6]); __ctfeWrite(newline); return 0; } void fill(ref char[10] buffer) pure nothrow @safe @nogc { foreach (const idx, ref ch; buffer) ch = cast(char)('a' + idx); } enum forceCTFE = greeting(["Hello", "World", "from", "CTFE"]);