Make boost::tuple tuple-like to support structured bindings

This commit is contained in:
Peter Dimov
2018-01-03 19:26:11 +02:00
parent c51d8a9495
commit 16731d2689
6 changed files with 247 additions and 10 deletions

View File

@ -63,5 +63,44 @@ get(const tuples::cons<HT, TT>& c) {
} // end namespace boost
#if !defined(BOOST_NO_CXX11_HDR_TUPLE)
#include <tuple>
#include <cstddef>
namespace std
{
// std::tuple_size
template<class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10>
struct tuple_size< boost::tuples::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> >:
boost::tuples::length< boost::tuples::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> >
{
};
template<class H, class T> struct tuple_size< boost::tuples::cons<H, T> >: boost::tuples::length< boost::tuples::cons<H, T> >
{
};
template<> struct tuple_size< boost::tuples::null_type >: boost::tuples::length< boost::tuples::null_type >
{
};
// std::tuple_element
template<std::size_t I, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10>
struct tuple_element< I, boost::tuples::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> >:
boost::tuples::element< I, boost::tuples::tuple<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> >
{
};
template<std::size_t I, class H, class T> struct tuple_element< I, boost::tuples::cons<H, T> >: boost::tuples::element< I, boost::tuples::cons<H, T> >
{
};
} // namespace std
#endif // !defined(BOOST_NO_CXX11_HDR_TUPLE)
#endif // BOOST_TUPLE_HPP