bump variant version
This commit is contained in:
parent
e57d9f2e2e
commit
9ccd0f0282
35
ThirdParty/variant/variant.hpp
vendored
35
ThirdParty/variant/variant.hpp
vendored
@ -4,7 +4,6 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <typeinfo>
|
#include <typeinfo>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include <algorithm> // std::move/swap
|
|
||||||
#include <stdexcept> // runtime_error
|
#include <stdexcept> // runtime_error
|
||||||
#include <new> // operator new
|
#include <new> // operator new
|
||||||
#include <cstddef> // size_t
|
#include <cstddef> // size_t
|
||||||
@ -515,22 +514,13 @@ public:
|
|||||||
VARIANT_INLINE variant(no_init)
|
VARIANT_INLINE variant(no_init)
|
||||||
: type_index(detail::invalid_value) {}
|
: type_index(detail::invalid_value) {}
|
||||||
|
|
||||||
|
// http://isocpp.org/blog/2012/11/universal-references-in-c11-scott-meyers
|
||||||
template <typename T, class = typename std::enable_if<
|
template <typename T, class = typename std::enable_if<
|
||||||
detail::is_valid_type<T, Types...>::value>::type>
|
detail::is_valid_type<typename std::remove_reference<T>::type, Types...>::value>::type>
|
||||||
VARIANT_INLINE explicit variant(T const& val) noexcept
|
|
||||||
: type_index(detail::value_traits<T, Types...>::index)
|
|
||||||
{
|
|
||||||
constexpr std::size_t index = sizeof...(Types) - detail::value_traits<T, Types...>::index - 1;
|
|
||||||
using target_type = typename detail::select_type<index, Types...>::type;
|
|
||||||
new (&data) target_type(val);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T, class = typename std::enable_if<
|
|
||||||
detail::is_valid_type<T, Types...>::value>::type>
|
|
||||||
VARIANT_INLINE variant(T && val) noexcept
|
VARIANT_INLINE variant(T && val) noexcept
|
||||||
: type_index(detail::value_traits<T, Types...>::index)
|
: type_index(detail::value_traits<typename std::remove_reference<T>::type, Types...>::index)
|
||||||
{
|
{
|
||||||
constexpr std::size_t index = sizeof...(Types) - detail::value_traits<T, Types...>::index - 1;
|
constexpr std::size_t index = sizeof...(Types) - detail::value_traits<typename std::remove_reference<T>::type, Types...>::index - 1;
|
||||||
using target_type = typename detail::select_type<index, Types...>::type;
|
using target_type = typename detail::select_type<index, Types...>::type;
|
||||||
new (&data) target_type(std::forward<T>(val)); // nothrow
|
new (&data) target_type(std::forward<T>(val)); // nothrow
|
||||||
}
|
}
|
||||||
@ -721,11 +711,24 @@ auto VARIANT_INLINE static apply_visitor(F f, V & v0, V & v1) -> decltype(V::bin
|
|||||||
return V::binary_visit(v0, v1, f);
|
return V::binary_visit(v0, v1, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getter interface
|
||||||
|
template<typename ResultType, typename T>
|
||||||
|
ResultType & get(T & var)
|
||||||
|
{
|
||||||
|
return var.template get<ResultType>();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename ResultType, typename T>
|
||||||
|
ResultType const& get(T const& var)
|
||||||
|
{
|
||||||
|
return var.template get<ResultType>();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// operator<<
|
// operator<<
|
||||||
template <typename charT, typename traits, typename Variant>
|
template <typename charT, typename traits, typename... Types>
|
||||||
VARIANT_INLINE std::basic_ostream<charT, traits>&
|
VARIANT_INLINE std::basic_ostream<charT, traits>&
|
||||||
operator<< (std::basic_ostream<charT, traits>& out, Variant const& rhs)
|
operator<< (std::basic_ostream<charT, traits>& out, variant<Types...> const& rhs)
|
||||||
{
|
{
|
||||||
detail::printer<std::basic_ostream<charT, traits>> visitor(out);
|
detail::printer<std::basic_ostream<charT, traits>> visitor(out);
|
||||||
apply_visitor(visitor, rhs);
|
apply_visitor(visitor, rhs);
|
||||||
|
Loading…
Reference in New Issue
Block a user