# std::experimental::ranges::tagged<Base,Tags...>::operator=

From cppreference.com
< cpp‎ | experimental‎ | ranges‎ | utility/tagged

tagged &operator=(tagged&& that) = default; | (1) |
tagged &operator=(const tagged& that) = default; | (2) |
template <class Other> requires Assignable<Base&, Other> constexpr tagged& operator=(ranges::tagged<Other, Tags...>&& that) noexcept(std::is_nothrow_assignable<Base&, Other>::value); | (3) |
template <class Other> requires Assignable<Base&, const Other&> constexpr tagged& operator=(const ranges::tagged<Other, Tags...>& that); | (4) |
template <class U> requires Assignable<Base&, U> && !Same<std::decay_t<U>, tagged> constexpr tagged& operator=(U&& that) noexcept(std::is_nothrow_assignable<Base&, U>::value); | (5) |

Assigns the contents of `that` to `*this`.

1-2) `tagged` has defaulted copy and move assignment operators that invoke the corresponding assignment operator of `Base`.
3) Converting move assignment from a different `tagged` specialization with matching tags. Equivalent to static_cast<Base&>(*this) = static_cast<Other&&>(that);.
4) Converting copy assignment from a different `tagged` specialization with matching tags. Equivalent to static_cast<Base&>(*this) = static_cast<const Other&>(that);.
5) Assigns `that` to the `Base` subobject. Equivalent to static_cast<Base&>(*this) = std::forward<U>(that);

### Return value

`*this`.

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/experimental/ranges/utility/tagged/operator%3D&oldid=105853"