単純な utf8 strlen 関数をテストしたところ、trunk clang がそれを完全に排除したことに非常に驚きました (gcc はそうではありません):
static int strlenutf8(const char* s)
{
int i = 0, l = 0;
while (s[i])
{
if ((s[i] & 0xc0) != 0x80) l++;
l++;
}
return j;
}
int main()
{
return strlenutf8("bla");
}
clang++ -O3 -S -fverbose-asm:
main: # @main
.cfi_startproc
# BB#0: # %entry
movl $3, %eax
ret
これは、D のコンパイル時の関数評価に似ています。これは C++ でも合法ですか?
つまり、そもそも彼らがそのくだらないconstexprを発明したのには理由があるに違いありません。厳しく制限されているため、私の知る限り、ここでは使用できませんでした。