Add test/variant_in_place_index_construct(_cx)

This commit is contained in:
Peter Dimov committed 2017-05-30 16:57:48 +03:00
1 parent a99b5f8e2e
commit 2357f4d2f4
4 files changed
+264 -1

No files matched your search

+22 -1
View File
@@ -592,12 +592,32 @@ template<class T> struct in_place_type_t
{
};
template<class T> constexpr in_place_type_t<T> in_place_type{};
namespace detail
{
template<class T> struct is_in_place_type: std::false_type {};
template<class T> struct is_in_place_type<in_place_type_t<T>>: std::true_type {};
} // namespace detail
// in_place_index_t
template<std::size_t I> struct in_place_index_t
{
};
template<std::size_t I> constexpr in_place_index_t<I> in_place_index{};
namespace detail
{
template<class T> struct is_in_place_index: std::false_type {};
template<std::size_t I> struct is_in_place_index<in_place_index_t<I>>: std::true_type {};
} // namespace detail
// variant
template<class... T> class variant: private variant2::detail::variant_base<T...>
@@ -643,7 +663,8 @@ public:
}
template<class U,
class E1 = std::enable_if_t<!std::is_same<std::decay_t<U>, variant>::value>,
class Ud = std::decay_t<U>,
class E1 = std::enable_if_t< !std::is_same<Ud, variant>::value && !variant2::detail::is_in_place_index<Ud>::value && !variant2::detail::is_in_place_type<Ud>::value >,
class V = variant2::detail::resolve_overload_type<U&&, T...>,
class E2 = std::enable_if_t<std::is_constructible<V, U>::value>
>