Bit(e) harian dari C++ #38, Varian if C++23: if consteval {}

C++23 menambahkan pernyataan if consteval {}, dengan kemampuan untuk menguji apakah kode dievaluasi secara konstan.

Hal ini berguna untuk membedakan antara implementasi alternatif atau untuk memungkinkan efek samping runtime seperti pemantauan.

constexpr int add(int a, int b) {
    if consteval {
        // consteval branch that can only use 
        // constant expression compatible code
        return a + b;
    } else {
        // not consteval, we can use fancy things 
        // like inline assembler, or intristics
        int ret;
        asm("addl %%ebx, %%eax;":"=a"(ret) : "a"(a), "b"(b));
        return ret;
    }
}

constexpr int side(int arg) {
    // Useful for side-effects such as logging...
    if !consteval {
        std::cout << "Not a constant expression, we can safely log.\n";
    }
    return arg*arg;
}

"Buka contoh di Compiler Explorer."