[#absl-is_constant_evaluated] = xref:absl.adoc[absl]::is_constant_evaluated :relfileprefix: ../ :mrdocs: Detects whether the function call occurs within a constant‐evaluated context. Returns true if the evaluation of the call occurs within the evaluation of an expression or conversion that is manifestly constant‐evaluated; otherwise returns false. == Synopsis Declared in `<absl/meta/type_traits.h>` [source,cpp,subs="verbatim,replacements,macros,-callouts"] ---- constexpr bool is_constant_evaluated() noexcept; ---- == Description This function is implemented in terms of `std::is_constant_evaluated` for c++20 and up. For older c++ versions, the function is implemented in terms of `__builtin_is_constant_evaluated` if available, otherwise the function will fail to compile. Applications can inspect `ABSL_HAVE_CONSTANT_EVALUATED` at compile time to check if this function is supported. Example: constexpr MyClass::MyClass(int param) { #ifdef ABSL_HAVE_CONSTANT_EVALUATED if (!absl::is_constant_evaluated()) { ABSL_LOG(INFO) << "MyClass(" << param << ")"; } #endif // ABSL_HAVE_CONSTANT_EVALUATED } Upstream documentation: http://en.cppreference.com/w/cpp/types/is_constant_evaluated http://gcc.gnu.org/onlinedocs/gcc/Other‐Builtins.html#:~:text=__builtin_is_constant_evaluated == Return Value `true` if called within a constant‐evaluated context, `false` otherwise. [.small]#Created with https://www.mrdocs.com[MrDocs]#