Тема: Function overloading and consteval [C++20]
Дивлюся я такий на C++ 20 фічі додані в Core і помітив такі штуки, як consteval та std::is_constant_evaluated, і щось це у мене викликає дисонанс.
Тобто можна писати так:
constexpr int foo(int a, int b) {
if (std::is_constant_evaluated()) { /* make some compile-time stuff */ }
else { /* make some run-time stuff */ }
}
І якось дивно це виглядає, по-перше, чому if не constexpr?
По-друге, є ж тепер consteval чому б не дозволити робити перевантаження через нього?
Можна було б тоді писати так:
consteval int foo(int a, int b) { /* make some compile-time stuff */ }
int foo(int a, int b) { /* make some run-time stuff */ }
int main() {
foo(1, 2); // Буде вирахувано в compile-time
foo(x, y); // Буде вирахувано в run-time
}
Вони ж вміють через constexpr визначати коли функція compile-time.
І по-третє, if constexpr повинен був стати тоді if consteval за логікою?