Template Class variant

Class Documentation

template<typename ...Ts>
class variant

Public Functions

template<typename Front = lib::type_pack_element_t<0, Ts...>, lib::enable_if_t<std::is_default_constructible<Front>::value, int> = 0>
inline constexpr variant() noexcept(std::is_nothrow_default_constructible<Front>::value)
variant(const variant&) = default
variant(variant&&) = default
template<typename Arg, typename Decayed = lib::decay_t<Arg>, lib::enable_if_t<!std::is_same<Decayed, variant>::value, int> = 0, lib::enable_if_t<!detail::is_in_place_index<Decayed>::value, int> = 0, lib::enable_if_t<!detail::is_in_place_type<Decayed>::value, int> = 0, std::size_t I = detail::best_match<Arg, Ts...>::value, typename T = lib::type_pack_element_t<I, Ts...>, lib::enable_if_t<std::is_constructible<T, Arg>::value, int> = 0>
inline constexpr variant(Arg &&arg) noexcept(std::is_nothrow_constructible<T, Arg>::value)
template<std::size_t I, typename ...Args, typename T = lib::type_pack_element_t<I, Ts...>, lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0>
inline explicit constexpr variant(in_place_index_t<I>, Args&&... args) noexcept(std::is_nothrow_constructible<T, Args...>::value)
template<std::size_t I, typename Up, typename ...Args, typename T = lib::type_pack_element_t<I, Ts...>, lib::enable_if_t<std::is_constructible<T, std::initializer_list<Up>&, Args...>::value, int> = 0>
inline explicit constexpr variant(in_place_index_t<I>, std::initializer_list<Up> il, Args&&... args) noexcept(std::is_nothrow_constructible<T, std::initializer_list<Up>&, Args...>::value)
template<typename T, typename ...Args, std::size_t I = detail::find_index_sfinae<T, Ts...>::value, lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0>
inline explicit constexpr variant(in_place_type_t<T>, Args&&... args) noexcept(std::is_nothrow_constructible<T, Args...>::value)
template<typename T, typename Up, typename ...Args, std::size_t I = detail::find_index_sfinae<T, Ts...>::value, lib::enable_if_t<std::is_constructible<T, std::initializer_list<Up>&, Args...>::value, int> = 0>
inline explicit constexpr variant(in_place_type_t<T>, std::initializer_list<Up> il, Args&&... args) noexcept(std::is_nothrow_constructible<T, std::initializer_list<Up>&, Args...>::value)
~variant() = default
variant &operator=(const variant&) = default
variant &operator=(variant&&) = default
template<typename Arg, lib::enable_if_t<!std::is_same<lib::decay_t<Arg>, variant>::value, int> = 0, std::size_t I = detail::best_match<Arg, Ts...>::value, typename T = lib::type_pack_element_t<I, Ts...>, lib::enable_if_t<(std::is_assignable<T&, Arg>::value && std::is_constructible<T, Arg>::value), int> = 0>
inline variant &operator=(Arg &&arg) noexcept((std::is_nothrow_assignable<T&, Arg>::value && std::is_nothrow_constructible<T, Arg>::value))
template<std::size_t I, typename ...Args, typename T = lib::type_pack_element_t<I, Ts...>, lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0>
inline T &emplace(Args&&... args)
template<std::size_t I, typename Up, typename ...Args, typename T = lib::type_pack_element_t<I, Ts...>, lib::enable_if_t<std::is_constructible<T, std::initializer_list<Up>&, Args...>::value, int> = 0>
inline T &emplace(std::initializer_list<Up> il, Args&&... args)
template<typename T, typename ...Args, std::size_t I = detail::find_index_sfinae<T, Ts...>::value, lib::enable_if_t<std::is_constructible<T, Args...>::value, int> = 0>
inline T &emplace(Args&&... args)
template<typename T, typename Up, typename ...Args, std::size_t I = detail::find_index_sfinae<T, Ts...>::value, lib::enable_if_t<std::is_constructible<T, std::initializer_list<Up>&, Args...>::value, int> = 0>
inline T &emplace(std::initializer_list<Up> il, Args&&... args)
inline constexpr bool valueless_by_exception() const noexcept
inline constexpr std::size_t index() const noexcept
template<bool Dummy = true, lib::enable_if_t< lib::all< Dummy,(lib::dependent_type< std::is_move_constructible< Ts >, Dummy >::value &&lib::dependent_type< lib::is_swappable< Ts >, Dummy >::value)... >::value, int> inline void swap (variant &that) noexcept(lib::all<(std::is_nothrow_move_constructible< Ts >::value &&lib::is_nothrow_swappable< Ts >::value)... >::value)

Friends

friend struct detail::access::variant
friend struct detail::visitation::variant