Разрешена ли специализация std::tuple_size
и std::tuple_element
для пользовательских типов?
Я полагаю, что это так, но я хочу быть абсолютно уверенным, и я не могу найти никакой конкретной информации.
Пример (пространства имен, функции-члены и get<I>
перегрузки опущены):
template <typename T, size_t N>
struct vector { T _data[N]; };
template<size_t I, typename T, size_t N>
constexpr T& get(vector<T,N>& vec) { return vec._data[I]; }
namespace std {
template<typename T, size_t N>
class tuple_size< vector<T,N> > : public std::integral_constant<size_t, N> { };
template<size_t I, typename T, size_t N>
class tuple_element< I, vector<T,N> > { public: using type = T; };
}
Мне нужно это для использования со структурированными привязками:
void f(vector<T,3> const& vec)
{
auto& [x,y,z] = vec;
// stuff...
}