std::experimental::ranges::tagged<Base,Tags...>::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 子对象。