diff --git a/CppCoreGuidelines.md b/CppCoreGuidelines.md
index ff31d95..a6f8b85 100644
--- a/CppCoreGuidelines.md
+++ b/CppCoreGuidelines.md
@@ -2873,6 +2873,38 @@ Declaring `main` (the one global `main` of a program) `void` limits portability.
* The compiler should do it
* If the compiler doesn't do it, let tools flag it
+### F.46: Return `T&` from assignment operators.
+
+##### Reason
+
+The convention for operator overloads (especially on value types) is for
+`operator=(const T&)` to perform the assignment and then return (non-const)
+`*this`. This ensures consistency with standard library types and follows the
+principle of "do as the ints do."
+
+##### Note
+
+Historically there was some guidance to make the assignment operator return
+`const T&`. This was primarily to avoid code of the form `(a=b)=c` - such code
+is not common enough to warrant violating consistency with standard types.
+
+##### Example
+
+ class Foo
+ {
+ public:
+ ...
+ Foo& operator=(const Foo& rhs) {
+ // Copy members.
+ ...
+ return *this;
+ }
+ };
+
+##### Enforcement
+
+This should be enforced by tooling by checking the return type (and return
+value) of any assignment operator.
### F.50: Use a lambda when a function won't do (to capture local variables, or to write a local function)