#ifndef DISTRIBUTED_POINT_FUNCTIONS_DPF_TUPLE_H_
#define DISTRIBUTED_POINT_FUNCTIONS_DPF_TUPLE_H_
#include <stddef.h>
#include <tuple>
#include <utility>
namespace distributed_point_functions {
template <typename... T>
class Tuple { … };
namespace dpf_internal {
template <typename... T, std::size_t... I>
constexpr Tuple<T...> add(const Tuple<T...>& lhs, const Tuple<T...>& rhs,
std::index_sequence<I...>);
template <typename... T, std::size_t... I>
constexpr Tuple<T...> negate(const Tuple<T...>& t, std::index_sequence<I...>);
}
template <typename... T>
constexpr Tuple<T...> operator+(const Tuple<T...>& lhs,
const Tuple<T...>& rhs) { … }
template <typename... T>
constexpr Tuple<T...>& operator+=(Tuple<T...>& lhs, const Tuple<T...>& rhs) { … }
template <typename... T>
constexpr Tuple<T...> operator-(const Tuple<T...>& t) { … }
template <typename... T>
constexpr Tuple<T...> operator-(const Tuple<T...>& lhs,
const Tuple<T...>& rhs) { … }
template <typename... T>
constexpr Tuple<T...>& operator-=(Tuple<T...>& lhs, const Tuple<T...>& rhs) { … }
template <typename... T>
constexpr bool operator==(const Tuple<T...>& lhs, const Tuple<T...>& rhs) { … }
template <typename... T>
constexpr bool operator!=(const Tuple<T...>& lhs, const Tuple<T...>& rhs) { … }
namespace dpf_internal {
template <typename... T, std::size_t... I>
constexpr Tuple<T...> add(const Tuple<T...>& lhs, const Tuple<T...>& rhs,
std::index_sequence<I...>) { … }
template <typename... T, std::size_t... I>
constexpr Tuple<T...> negate(const Tuple<T...>& t, std::index_sequence<I...>) { … }
}
}
#endif