This seems to be a tail recursion problem? Calling the function recursively (while ignoring the result) seems to clobber the local value of the variable. I'm not sure if line (3) is the same bug or not; there seems to be a morass of related bugs in the CTFE stuff. ----------------- int exprLength(char [] s) { int numParens=0; for (int i=0; i<s.length; ++i) { if (s[i]=='(') { numParens++; } if (s[i]==')') { numParens--; } if (numParens == 0) { return i; } } } char [] makePostfix(char [] operations) { if (operations.length<2) return "x"; int x = exprLength(operations); char [] first="bad"; if (x>0) { first = "ok"; char [] ignore = makePostfix(operations[1..x]); // This makes (2) fail. } return first; } void main() { char [] q = makePostfix("(a+b)*c"); assert(q=="ok"); // (1) PASSES const char [] q2 = makePostfix("(a+b)*c"); static assert(q2=="ok"); // (2) FAILS static assert(makePostfix("(a+b)*c")=="ok"); // (3) not evaluatable at compile time }
Added to DStress as http://dstress.kuehne.cn/compile/c/const_43_A.d http://dstress.kuehne.cn/compile/c/const_43_B.d http://dstress.kuehne.cn/compile/c/const_43_C.d http://dstress.kuehne.cn/compile/c/const_43_D.d
Fixed in DMD-1.009
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル