# Assignable

Category: utilities | Component type: concept

### Description

A type is Assignable if it is possible to copy objects of that type and to assign values to variables.

### Refinement of

### Associated types

### Notation

`X` | A type that is a model of Assignable
`x`, `y` | Object of type `X`

### Definitions

### Valid expressions

Name | Expression | Type requirements | Return type
--- | --- | --- | ---
Copy constructor | `X(x)` |  | `X`
Copy constructor |
    X x(y);
    X x = y;
Assignment | `x = y` [1] |  | `X&`
Swap | `swap(x,y)` |  | `void`

### Expression semantics

Name | Expression | Precondition | Semantics | Postcondition
--- | --- | --- | --- | ---
Copy constructor | `X(x)` |  |  | `X(x)` is a copy of `x` [2]
Copy constructor | `X(x)` |  |  | `X(x)` is a copy of `x` [2]
Copy constructor |
    X x(y);
    X x = y;
|  |  | `x` is a copy of `y` [2]
Assignment | `x` = `y` [1] |  |  | `x` is a copy of `y` [2]
Swap | `swap(x,y)` |  | Equivalent to
    {
      X tmp = x;
      x = y;
      y = tmp;
    }

### Complexity guarantees

### Invariants

### Models

- int

### Notes

[1] One implication of this requirement is that a `const` type is not Assignable. For example, `const int` is not Assignable: if `x` is declared to be of type `const int`, then `x = 7` is illegal. Similarly, the type `pair<const int, int>` is not Assignable.

[2] The reason this says "`x` is a copy of `y`", rather than "`x == y`", is that `operator==` is not necessarily defined: equality is not a requirement of Assignable. If the type `X` is EqualityComparable as well as Assignable, then a copy of `x` should compare equal to `x`.

### See also

DefaultConstructible

Copyright © 1999 Silicon Graphics, Inc. All Rights Reserved. TrademarkInformation