Header <experimental/ranges/tuple> synopsis
namespace std { namespace experimental { namespace ranges { inline namespace v1 {
template <TaggedType... Types>
using tagged_tuple = tagged<tuple<TAGELEM(Types)...>,
TAGSPEC(Types)...>;
template <TagSpecifier... Tags, class... Types>
requires sizeof...(Tags) == sizeof...(Types)
constexpr see below make_tagged_tuple(Types&&... t);
}}}}
template <TaggedType... Types> using tagged_tuple = tagged<tuple<TAGELEM(Types)...>, TAGSPEC(Types)...>;
[ Example:
// See [alg.tagspec]:
tagged_tuple<tag::in(char*), tag::out(char*)> t{0, 0};
assert(&t.in() == &get<0>(t));
assert(&t.out() == &get<1>(t));
— end example ]
template <TagSpecifier... Tags, class... Types>
requires sizeof...(Tags) == sizeof...(Types)
constexpr see below make_tagged_tuple(Types&&... t);
Let T be the type of make_tuple(std::forward<Types>(t)...). Then the return type is tagged<T, Tags...>.
Returns: tagged<T, Tags...>(std::forward<Types>(t)...).
[ Example:
int i; float j; make_tagged_tuple<tag::in1, tag::in2, tag::out>(1, ref(i), cref(j))
creates a tagged tuple of type
tagged_tuple<tag::in1(int), tag::in2(int&), tag::out(const float&)>
— end example ]