string CTFE(string s) {
int i, j;
L1: for(i = 0; i < s.length; i++)
switch(s[i]) {
case ' ', '\n', '\r', '\t':
continue;
default: break L1;
}
L2: for(j = s.length; j > i; j--)
switch(s[j-1]) {
case ' ', '\n', '\r', '\t':
continue;
default: break L2;
}
return s[i..j];
}
import std.stdio;
pragma(msg, CTFE(" hello world!\n"));
void main(){ writef("'%s'\n", CTFE(" hello world!\n")); }
the function works at runtime but fails under CTFE. There may be a few cases where labeled break may be hard to deal with but this one shouldn't cause problems.