std::experimental::ranges::make_tagged_tuple
From cppreference.com
                    
                                        
                    < cpp | experimental | ranges
                    
                                                            
                    |   Defined in header  <experimental/ranges/tuple>
  | 
||
|   template< TagSpecifier... Tags, class... Types>     requires sizeof...(Tags) == sizeof...(Types)  | 
(ranges TS) | |
Convenience function for creating a tagged tuple, deducing the element types from the arguments (the tag specifiers must be explicitly specified).
The see below portion of the return type is decltype(std::make_tuple(std::forward<Types>(t)...)).
Return value
R(std::forward<Types>(t)...), where R is the return type.
See also
|    specifies that a type represents a tag specifier and its element type   (concept)  | |
|    augument a tuple-like type with named accessors   (class template)  | |
|    alias template for a tagged std::pair   (alias template)  | |
   convenience function for creating a tagged_pair  (function template)  | |
|    alias template for a tagged std::tuple  (alias template)  | |
|    tag specifiers for use with ranges::tagged  (class)  |