[Bug c++/86678] constexpr evaluation incorrectly diagnoses unevaluated call to non-constexpr function
eric at efcs dot ca
gcc-bugzilla@gcc.gnu.org
Thu Jul 26 10:46:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86678
--- Comment #2 from Eric Fiselier <eric at efcs dot ca> ---
This is a bug according to [expr.const]p2 which states:
> An expression e is a core constant expression unless the evaluation of e,
> following the rules of the abstract machine, would evaluate one of the
> following expressions:
> [...]
The key phrase being "would evaluate one of". The example never evaluates a
non-constant expression. GCC correctly accepts the control flow:
template <class T>
constexpr int foo() {
if (sizeof(T))
return 1;
else
assert(false && "BOOM!");
}
template <class T>
constexpr int bar() { return sizeof(T) ? 1 : throw 42; }
static_assert(foo() && bar());
In all both cases the unevaluated expressions do not cause constant evaluation
to fail.
[1] http://eel.is/c++draft/expr.const#2
More information about the Gcc-bugs
mailing list