# nlohmann::basic_json::swap
```cpp
// (1)
void swap(reference other) noexcept (
std::is_nothrow_move_constructible::value &&
std::is_nothrow_move_assignable::value &&
std::is_nothrow_move_constructible::value &&
std::is_nothrow_move_assignable::value &&
std::is_nothrow_move_constructible::value &&
std::is_nothrow_move_assignable::value
);
// (2)
friend void swap(reference left, reference right) noexcept (
std::is_nothrow_move_constructible::value &&
std::is_nothrow_move_assignable::value &&
std::is_nothrow_move_constructible::value &&
std::is_nothrow_move_assignable::value &&
std::is_nothrow_move_constructible::value &&
std::is_nothrow_move_assignable::value
);
// (3)
void swap(array_t& other);
// (4)
void swap(object_t& other);
// (5)
void swap(string_t& other);
// (6)
void swap(binary_t& other);
// (7)
void swap(typename binary_t::container_type& other);
```
1. Exchanges the contents of the JSON value with those of `other`. Does not invoke any move, copy, or swap operations on
individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. If macro
[`JSON_DIAGNOSTIC_POSITIONS`](../macros/json_diagnostic_positions.md) is defined to `#!cpp 1`, the
[`start_pos()`](start_pos.md)/[`end_pos()`](end_pos.md) diagnostic positions are exchanged along with the value.
The [`json_base_class_t`](json_base_class_t.md) subobject is exchanged along with the value as well, the same way it
is copied or moved by the copy/move constructors and assignment operators.
2. Exchanges the contents of the JSON value from `left` with those of `right`. Does not invoke any move, copy, or swap
operations on individual elements. All iterators and references remain valid. The past-the-end iterator is
invalidated. Implemented as a friend function callable via ADL. If macro
[`JSON_DIAGNOSTIC_POSITIONS`](../macros/json_diagnostic_positions.md) is defined to `#!cpp 1`, the
[`start_pos()`](start_pos.md)/[`end_pos()`](end_pos.md) diagnostic positions are exchanged along with the value.
The [`json_base_class_t`](json_base_class_t.md) subobject is exchanged along with the value as well, the same way it
is copied or moved by the copy/move constructors and assignment operators.
3. Exchanges the contents of a JSON array with those of `other`. Does not invoke any move, copy, or swap operations on
individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
4. Exchanges the contents of a JSON object with those of `other`. Does not invoke any move, copy, or swap operations on
individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
5. Exchanges the contents of a JSON string with those of `other`. Does not invoke any move, copy, or swap operations on
individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
6. Exchanges the contents of a binary value with those of `other`. Does not invoke any move, copy, or swap operations on
individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated.
7. Exchanges the contents of a binary value with those of `other`. Does not invoke any move, copy, or swap operations on
individual elements. All iterators and references remain valid. The past-the-end iterator is invalidated. Unlike
version (6), no binary subtype is involved.
## Parameters
`other` (in, out)
: value to exchange the contents with
`left` (in, out)
: value to exchange the contents with
`right` (in, out)
: value to exchange the contents with
## Exception safety
1. No-throw guarantee: this function never throws exceptions.
2. No-throw guarantee: this function never throws exceptions.
3. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
4. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
5. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
6. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
7. Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
## Exceptions
1. No-throw guarantee: this function never throws exceptions.
2. No-throw guarantee: this function never throws exceptions.
3. Throws [`type_error.310`](../../home/exceptions.md#jsonexceptiontype_error310) if called on JSON values other than
arrays; example: `"cannot use swap(array_t&) with boolean"`
4. Throws [`type_error.310`](../../home/exceptions.md#jsonexceptiontype_error310) if called on JSON values other than
objects; example: `"cannot use swap(object_t&) with boolean"`
5. Throws [`type_error.310`](../../home/exceptions.md#jsonexceptiontype_error310) if called on JSON values other than
strings; example: `"cannot use swap(string_t&) with boolean"`
6. Throws [`type_error.310`](../../home/exceptions.md#jsonexceptiontype_error310) if called on JSON values other than
binaries; example: `"cannot use swap(binary_t&) with boolean"`
7. Throws [`type_error.310`](../../home/exceptions.md#jsonexceptiontype_error310) if called on JSON values other than
binaries; example: `"cannot use swap(binary_t::container_type&) with boolean"`
## Complexity
Constant.
## Examples
??? example "Example: (1, 2) swap JSON values"
The example below shows how JSON values can be swapped with `swap()`.
```cpp
--8<-- "examples/swap__reference.cpp"
```
Output:
```json
--8<-- "examples/swap__reference.output"
```
??? example "Example: (3) swap array"
The example below shows how arrays can be swapped with `swap()`.
```cpp
--8<-- "examples/swap__array_t.cpp"
```
Output:
```json
--8<-- "examples/swap__array_t.output"
```
??? example "Example: (4) swap object"
The example below shows how objects can be swapped with `swap()`.
```cpp
--8<-- "examples/swap__object_t.cpp"
```
Output:
```json
--8<-- "examples/swap__object_t.output"
```
??? example "Example: (5) swap string"
The example below shows how strings can be swapped with `swap()`.
```cpp
--8<-- "examples/swap__string_t.cpp"
```
Output:
```json
--8<-- "examples/swap__string_t.output"
```
??? example "Example: (6) swap binary"
The example below shows how binary values can be swapped with `swap()`.
```cpp
--8<-- "examples/swap__binary_t.cpp"
```
Output:
```json
--8<-- "examples/swap__binary_t.output"
```
## See also
- [std::swap](std_swap.md)
- [operator=](operator=.md) copy assignment
- [basic_json](basic_json.md) create a JSON value
## Version history
1. Since version 1.0.0. Exchanges the `json_base_class_t` subobject along with the value since version 3.13.0.
2. Since version 1.0.0. Exchanges the `json_base_class_t` subobject along with the value since version 3.13.0.
3. Since version 1.0.0.
4. Since version 1.0.0.
5. Since version 1.0.0.
6. Since version 3.8.0.
7. Since version 3.8.0.