#ifndef ENTT_CORE_TUPLE_HPP
|
|
#define ENTT_CORE_TUPLE_HPP
|
|
|
|
#include <tuple>
|
|
#include <type_traits>
|
|
#include <utility>
|
|
#include "../config/config.h"
|
|
|
|
namespace entt {
|
|
|
|
/**
|
|
* @brief Utility function to unwrap tuples of a single element.
|
|
* @tparam Type Tuple type of any sizes.
|
|
* @param value A tuple object of the given type.
|
|
* @return The tuple itself if it contains more than one element, the first
|
|
* element otherwise.
|
|
*/
|
|
template<typename Type>
|
|
constexpr decltype(auto) unwrap_tuple(Type &&value) ENTT_NOEXCEPT {
|
|
if constexpr(std::tuple_size_v<std::remove_reference_t<Type>> == 1u) {
|
|
return std::get<0>(std::forward<Type>(value));
|
|
} else {
|
|
return std::forward<Type>(value);
|
|
}
|
|
}
|
|
|
|
} // namespace entt
|
|
|
|
#endif
|