23 General utilities library [utilities]

23.7 Variants [variant]

23.7.3 Class template variant [variant.variant]

23.7.3.6 Swap [variant.swap]

void swap(variant& rhs) noexcept(see below);

Requires: Lvalues ​​типа Ti должны быть заменяемыми ([swappable.requirements]) и is_­move_­constructible_­v<Ti> должны быть доступны true для всех i.

Effects:

  • если valueless_­by_­exception() && rhs.valueless_­by_­exception() нет эффекта. Иначе,

  • если index() == rhs.index()звонит swap(get<i>(*this), get<i>(rhs)) где i есть index(). Иначе,

  • обменивает значения rhs и *this.

Throws: Если index() == rhs.index(), какое-либо исключение, созданное swap(get<i>(*this), get<i>(rhs)) с i be index(). В противном случае любое исключение, созданное конструктором перемещения объекта Ti или Tj with i being index() and j being rhs.index().

Remarks: Если во время вызова функции выбрасывается исключение swap(get<i>(*this), get<i>(rhs)), состояния содержащихся значений of *this и of rhs определяются гарантией безопасности исключений swap для lvalues ​​of Ti with i being index(). Если во время обмена значениями *this и возникает исключение rhs, состояния значений *this и rhs определяются гарантией безопасности исключений variantконструктора перемещения. Выражение внутри noexcept эквивалентно логическому И is_­nothrow_­move_­constructible_­v<Ti> && is_­nothrow_­swappable_­v<Ti> для всех i.