/**************************************************************************//**
 *
 * \file rosa/support/type_pair.hpp
 *
 * \author David Juhasz (david.juhasz@tuwien.ac.at)
 *
 * \date 2017
 *
 * \brief Facilities for types representing pairs of types.
 *
 * \note This implementation is based on the `type_pair` implementation of CAF.
 * \todo Check license.
 *
 ******************************************************************************/

#ifndef ROSA_SUPPORT_TYPE_PAIR_HPP
#define ROSA_SUPPORT_TYPE_PAIR_HPP

namespace rosa {

/// A pair of types.
///
/// \tparam F the first type
/// \tparam S the second type
template <typename F, typename S>
struct TypePair {
  using First = F;  ///< The first type.
  using Second = S; ///< The second type.
};

/// Turns two types into a `rosa::TypePair`
///
/// Turning two types `F` and `S` into `rosa::TypePair<F, S>` is as simple as
/// \code
/// typename ToTypePair<F, S>::Type
/// \endcode
///
/// \tparam F the fist type
/// \tparam S the second type
template <typename F, typename S>
struct ToTypePair {
  using Type = TypePair<F, S>; ///< The `rosa::TypePair`.
};

} // End namespace rosa

#endif // ROSA_SUPPORT_TYPE_PAIR_HPP

