mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-25 14:40:11 +01:00
Returning by reference is still not supported and marked with a TODO. C++ Interop Demo (compare to #6020): ```c++ // my_number.h class MyNumber { public: explicit MyNumber(int value) : value_(value) {} auto value() const -> int { return value_; } auto set_value(int value) -> void { value_ = value; } private: int value_; }; auto operator++(MyNumber& operand) -> MyNumber; auto operator--(MyNumber& operand) -> MyNumber; ``` ```c++ // my_number.cpp #include "my_number.h" auto operator++(MyNumber& operand) -> MyNumber { operand.set_value(operand.value() + 1); return operand; } auto operator--(MyNumber& operand) -> MyNumber { operand.set_value(operand.value() - 1); return operand; } ``` ```carbon // main.carbon library "Main"; import Core library "io"; import Cpp library "my_number.h"; fn Run() -> i32 { var num: Cpp.MyNumber = Cpp.MyNumber.MyNumber(14); Core.Print(num.value()); ++num; Core.Print(num.value()); --num; Core.Print(num.value()); return 0; } ``` ```shell $ clang -c my_number.cpp $ bazel-bin/toolchain/carbon compile main.carbon $ bazel-bin/toolchain/carbon link my_number.o main.o --output=demo $ ./demo 14 15 14 ``` Part of https://github.com/carbon-language/carbon-lang/issues/5995.