cppfront icon indicating copy to clipboard operation
cppfront copied to clipboard

[BUG] Cannot call Cpp2 constexpr function from `static_assert` at file scope

Open bluetarpmedia opened this issue 9 months ago • 1 comments

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);
      |               ^~~~~~~~~~~~~~~

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 the static_assert line.

Additional context I was translating the std::ranges::any_of example code from cppreference.

bluetarpmedia avatar May 21 '24 02:05 bluetarpmedia