Describe the bug
A Cpp2 function declared as constexpr (with ==) cannot be called from a static_assert at file scope because the function definition is moved below the static_assert line.
To Reproduce
Run cppfront on this code:
add: (a: int, b: int) -> int == { return a + b; }
static_assert(add(5, 6) == 11);
It lowers to (with minor edits to simplify):
[[nodiscard]] constexpr auto add(cpp2::impl::in<int> a, cpp2::impl::in<int> b) -> int;
static_assert(add(5, 6) == 11);
[[nodiscard]] constexpr auto add(cpp2::impl::in<int> a, cpp2::impl::in<int> b) -> int{return a + b; }
and the C++ compiler produces this error:
error: static assertion expression is not an integral constant expression
3 | static_assert(add(5, 6) == 11);
| ^~~~~~~~~~~~~~~
Describe the bug A Cpp2 function declared as constexpr (with
==
) cannot be called from astatic_assert
at file scope because the function definition is moved below thestatic_assert
line.To Reproduce Run cppfront on this code:
It lowers to (with minor edits to simplify):
and the C++ compiler produces this error:
Repro on Godbolt
I think a user who writes the above would expect the mixed code to work, since they've written the
add
definition before thestatic_assert
line.Additional context I was translating the
std::ranges::any_of
example code from cppreference.