Initial `bindings/reference/known_operations.md`.

PiperOrigin-RevId: 537073062
diff --git a/docs/bindings/reference/operator_overloading.md b/docs/bindings/reference/operator_overloading.md
new file mode 100644
index 0000000..b6bdda1
--- /dev/null
+++ b/docs/bindings/reference/operator_overloading.md
@@ -0,0 +1,74 @@
+# Bindings for operators and special member functions
+
+Here we describe how Crubit bindings work with C++ special member functions and
+operator overloading (e.g. the copy constructor, or `operator==`) and with
+traits from the Rust standard library (e.g. the `Clone` or `PartialEq` traits).
+
+Rust traits which return `Self` by value (or use mutable references) are only
+implemented in the bindings for a given C++ type if that type is
+[is `Unpin`](../../unpin.md).
+
+## Bidirectional map
+
+The following special member functions and traits are mapped bidirectionally:
+
+C++                 | Rust      | Notes
+------------------- | --------- | -------------------------
+Default constructor | `Default` | C++ types must be `Unpin`
+
+## One-way map of C++ special member functions into Rust traits
+
+If the C++ type [is `Unpin`](../../unpin.md), then the C++ special member
+functions below are mapped one-way into the corresponding Rust traits as
+follows:
+
+| C++ API                   | Rust bindings | Notes                            |
+| ------------------------- | ------------- | -------------------------------- |
+| Trivial copy constructor  | `Copy`        | Also requires that the C++ type  |
+:                           :               : is non-abstract and has a        :
+:                           :               : public, trivial copy constructor :
+:                           :               : and destructor.                  :
+:                           :               : <br>TODO(b/258249993)\: Provide  :
+:                           :               : bidirectional map.               :
+| Custom copy constructor   | `Clone`       | TODO(b/259741191): Provide       |
+:                           :               : bidirectional map.               :
+| Destructor                | `Drop`        | TODO(b/258251148): Provide       |
+:                           :               : bidirectional map.               :
+| Constructor taking single | `From<T>`     | Regardless if the constructor is |
+: parameter of type `T`     :               : `explicit` in the C++ API or not :
+
+The C++ binary operators below are mapped one-way into the corresponding Rust
+traits as follows:
+
+C++ API       | Rust bindings
+------------- | --------------
+`operator==`  | `PartialEq`
+`operator<`   | `PartialOrd`
+`operator+`   | `Add`
+`operator-`   | `Sub`
+`operator*`   | `Mul`
+`operator/`   | `Div`
+`operator%`   | `Rem`
+`operator&`   | `BitAnd`
+`operator\|`  | `BitOr`
+`operator^`   | `BitXor`
+`operator<<`  | `Shl`
+`operator>>`  | `Shr`
+`operator+=`  | `AddAssign`
+`operator-=`  | `SubAssign`
+`operator*=`  | `MulAssign`
+`operator/=`  | `DivAssign`
+`operator%=`  | `RemAssign`
+`operator&=`  | `BitAndAssign`
+`operator\|=` | `BitOrAssign`
+`operator^=`  | `BitXorAssign`
+`operator<<=` | `ShlAssign`
+`operator>>=` | `ShrAssign`
+
+The C++ unary operators below are mapped one-way into the corresponding Rust
+traits as follows:
+
+C++ API     | Rust bindings
+----------- | -------------
+`operator-` | `Neg`
+`operator!` | `Not`