## `value::operator=`

Assignment.

### Synopsis

    value&
    operator=(
        value const& other); (1)

    value&
    operator=(
        value&& other); (2)

    value&
    operator=(
        std::initializer_list< value_ref > init); (3)

    value&
    operator=(
        std::nullptr_t) noexcept; (4)

    value&
    operator=(
        bool b) noexcept; (5)

    value&
    operator=(
        signed char i) noexcept; (6)

    value&
    operator=(
        short i) noexcept; (7)

    value&
    operator=(
        int i) noexcept; (8)

    value&
    operator=(
        long i) noexcept; (9)

    value&
    operator=(
        long long i) noexcept; (10)

    value&
    operator=(
        unsigned char u) noexcept; (11)

    value&
    operator=(
        unsigned short u) noexcept; (12)

    value&
    operator=(
        unsigned int u) noexcept; (13)

    value&
    operator=(
        unsigned long u) noexcept; (14)

    value&
    operator=(
        unsigned long long u) noexcept; (15)

    value&
    operator=(
        double d) noexcept; (16)

    value&
    operator=(
        string_view s); (17)

    value&
    operator=(
        char const* s); (18)

    value&
    operator=(
        string const& s); (19)

    value&
    operator=(
        string&& s); (20)

    value&
    operator=(
        array const& arr); (21)

    value&
    operator=(
        array&& arr); (22)

    value&
    operator=(
        object const& obj); (23)

    value&
    operator=(
        object&& obj); (24)

### Description

Replaces the contents of this value.

- (1) replaces with an element-wise copy of the contents of `other`.

- (2) replaces with the contents `other` using move semantics (see below).

- (3) replaces with the value formed by constructing from `init` and `this->storage()` (see Initializer Lists).

- (4) replaces with null.

- (5) replaces with the boolean value `b`.

- (6)–(10) replaces with the signed integer `i`.

- (11)–(15) replaces with the unsigned integer `u`.

- (16) replaces with the number `d`.

- (17), (19) replaces with a copy of the string `s`.

- (18), equivalent to `*this = string_view(s)`.

- (20) replaces with the string `s` using move semantics see below.

- (21) replaces with a copy of the array `arr`.

- (22) replaces with the array `arr` using move semantics (see below).

- (23) replaces with a copy of the object `obj`.

- (24) replaces with the object `obj` using move semantics (see below).

Move assignment for `value` never changes the associated memory resource. Because of this if the memory resource of the assigned value differs from that of `*this`, the operation is equivalent to a copy. Otherwise, it replaces the underlying storage in constant time without the possibility of exceptions.

### Complexity

- (1) linear in the sizes of `*this` and `other`.

- (2) constant if `*this->storage() == *other.storage()`, otherwise linear in the sizes of `*this` and `other`.

- (3) linear in the sizes of `*this` and `init`.

- (4)–(16) linear in the size of `*this`.

- (17), (19) linear in the size of `*this` and `s.size()`.

- (18) linear in the size of `*this` and `std::strlen(s)`.

- (22) constant if `*this->storage() == *s.storage()`, otherwise linear in the size of `*this` and `s.size()`.

- (21) linear in the size of `*this` and `arr.size()`.

- (22) constant if `*this->storage() == *arr.storage()`, otherwise linear in the size of `*this` and `arr.size()`.

- (23) linear in the size of `*this` and `obj.size()`.

- (24) constant if `*this->storage() == *obj.storage()`, otherwise linear in the size of `*this` and `obj.size()`.

The size of `*this` is either the size of the underlying container (if there is one), or can be considered to be 1.

### Exception Safety

- (1)–(3), (17)–(24) strong guarantee.

- (4)–(16) no-throw guarantee.

Calls to `memory_resource::allocate` may throw.

### Parameters

Name | Description
--- | ---
`other` | The source value.
`init` | The initializer list to assign from.
`b` | The new value.
`i` | The new value.
`u` | The new value.
`d` | The new value.
`s` | The new string.
`arr` | The new array.
`obj` | The new object.

Edit this page