The types of the tuple std::tuple<A,B,C,D>
are all the same when std::tuple<A,B,C,D>
and std::tuple<B,C,D,A>
are the same type.
#include <type_traits>
#include <tuple>
#include <iostream>
template <typename First, typename... T>
struct all_same_type {
constexpr static bool value = std::is_same_v< std::tuple<First,T...>,
std::tuple<T...,First>>;
};
template <typename... T>
struct all_same_type<std::tuple<T...>> : all_same_type<T...> {};
template <typename... T>
constexpr bool all_same_type_v = all_same_type<T...>::value;
int main() {
std::tuple<int, int, int> t = { 1, 1, 1};
std::cout << all_same_type_v< decltype(t)> << "\n";
std::tuple<int, float, int> u = { 1, 1.0, 1};
std::cout << all_same_type_v< decltype(u)> << "\n";
}
Output:
1
0