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

< cpp‎ | experimental‎ | ranges‎ | utility/tagged

using Base::Base; | (1) |
tagged() = default; | (2) |
tagged(tagged&& that) = default; | (3) |
tagged(const tagged& that) = default; | (4) |
tagged(Base&& that) noexcept(std::is_nothrow_move_constructible<Base>::value) requires ranges::MoveConstructible<Base>; | (5) |
tagged(const Base& that) noexcept(std::is_nothrow_copy_constructible<Base>::value) requires ranges::CopyConstructible<Base>; | (6) |
template <class Other> requires ranges::Constructible<Base, Other> constexpr tagged(ranges::tagged<Other, Tags...> && that) noexcept(std::is_nothrow_constructible<Base, Other>::value); | (7) |
template <class Other> requires ranges::Constructible<Base, const Other&> constexpr tagged(const ranges::tagged<Other, Tags...> &that); | (8) |

构造 `tagged` 对象。

1) `tagged<Base, Tags...>` 继承 `Base` 的构造函数。
2-4) `tagged` 拥有默认化的默认、赋值和移动构造函数，它们调用 `Base` 的对应构造函数。
5) 源自 `Base` 的转换移动构造函数。以 std::move(that) 初始化 `Base` 子对象。
6) 源自 `Base` 的转换复制构造函数。以 that 初始化 `Base` 子对象。
7) 源自带匹配标签的相异 `tagged` 特化的转换移动构造函数。以 static_cast<Other&&>(that) 初始化 `Base` 子对象。
8) 源自带匹配标签的相异 `tagged` 特化的转换复制构造函数。以 static_cast<const Other&>(that) 初始化 `Base` 子对象。