The following Cpp2 code ``` foo: (inout x: i32) = { x = x + 1; } main: () -> i32 = { a := 42; foo(a); } ``` is compiled to (skipping boilerplate) ```cpp auto foo(cpp2::i32& x) -> void{ x = x + 1; } [[nodiscard]] auto main() -> cpp2::i32{ auto a {42}; foo(std::move(a)); } ``` which fails to compile because `cpp2::i32& x` can't bind to `std::move(a)`.