GCC и Clang ведут себя по-разному в отношении постоянной оценки. ⇐ C++
GCC и Clang ведут себя по-разному в отношении постоянной оценки.
Я наблюдаю несоответствие между GCC и Clang в отношении того, что такое константный оцениваемый контекст. Я играл с разными ситуациями:
#include #include consteval auto ceval(auto x) { return x * x; } constexpr auto constexrif (авто x) { if constexpr (std::is_integral_v) { вернуть Цеваль (х); } еще { вернуть х + 2.; } } constexpr auto constexprif_consteval (авто x) { if constexpr (std::is_integral_v) { если констеваль { вернуть Цеваль (х); } еще { вернуть х * х + 1; } } еще { вернуть х + 2.; } } constexpr auto constevalif (авто x) { если констеваль { вернуть Цеваль (х); } еще { return static_cast(x + 2.); } } constexpr auto isconstantevaluated(auto x) { если (std::is_constant_evaluated()) { вернуть Цеваль (х); } еще { return static_cast(x + 2.); } } интервал основной() { #ifdef __clang__ // GCC нокаут авто а = consexprif(42); const auto b = consexprif(42); constexpr auto c = constexrif(42); std::cout
Я наблюдаю несоответствие между GCC и Clang в отношении того, что такое константный оцениваемый контекст. Я играл с разными ситуациями:
#include #include consteval auto ceval(auto x) { return x * x; } constexpr auto constexrif (авто x) { if constexpr (std::is_integral_v) { вернуть Цеваль (х); } еще { вернуть х + 2.; } } constexpr auto constexprif_consteval (авто x) { if constexpr (std::is_integral_v) { если констеваль { вернуть Цеваль (х); } еще { вернуть х * х + 1; } } еще { вернуть х + 2.; } } constexpr auto constevalif (авто x) { если констеваль { вернуть Цеваль (х); } еще { return static_cast(x + 2.); } } constexpr auto isconstantevaluated(auto x) { если (std::is_constant_evaluated()) { вернуть Цеваль (х); } еще { return static_cast(x + 2.); } } интервал основной() { #ifdef __clang__ // GCC нокаут авто а = consexprif(42); const auto b = consexprif(42); constexpr auto c = constexrif(42); std::cout
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Похожие типы (int16_t и short) ведут себя по-разному во время создания экземпляра ссылки.
Anonymous » » в форуме C++ - 0 Ответы
- 40 Просмотры
-
Последнее сообщение Anonymous
-