12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /*!
- @file
- Forward declares `boost::hana::basic_tuple`.
- Copyright Louis Dionne 2013-2022
- Distributed under the Boost Software License, Version 1.0.
- (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
- */
- #ifndef BOOST_HANA_FWD_BASIC_TUPLE_HPP
- #define BOOST_HANA_FWD_BASIC_TUPLE_HPP
- #include <boost/hana/config.hpp>
- #include <boost/hana/fwd/core/make.hpp>
- namespace boost { namespace hana {
- //! @ingroup group-datatypes
- //! Stripped down version of `hana::tuple`.
- //!
- //! Whereas `hana::tuple` aims to provide an interface somewhat close to a
- //! `std::tuple`, `basic_tuple` provides the strict minimum required to
- //! implement a closure with maximum compile-time efficiency.
- //!
- //! @note
- //! When you use a container, remember not to make assumptions about its
- //! representation, unless the documentation gives you those guarantees.
- //! More details [in the tutorial](@ref tutorial-containers-types).
- //!
- //!
- //! Modeled concepts
- //! ----------------
- //! `Sequence`, and all the concepts it refines
- template <typename ...Xs>
- struct basic_tuple;
- //! Tag representing `hana::basic_tuple`.
- //! @relates hana::basic_tuple
- struct basic_tuple_tag { };
- #ifdef BOOST_HANA_DOXYGEN_INVOKED
- //! Function object for creating a `basic_tuple`.
- //! @relates hana::basic_tuple
- //!
- //! Given zero or more objects `xs...`, `make<basic_tuple_tag>` returns a
- //! new `basic_tuple` containing those objects. The elements are held by
- //! value inside the resulting tuple, and they are hence copied or moved
- //! in. This is analogous to `std::make_tuple` for creating `basic_tuple`s.
- //!
- //!
- //! Example
- //! -------
- //! @include example/basic_tuple/make.cpp
- template <>
- constexpr auto make<basic_tuple_tag> = [](auto&& ...xs) {
- return basic_tuple<std::decay_t<decltype(xs)>...>{forwarded(xs)...};
- };
- #endif
- //! Alias to `make<basic_tuple_tag>`; provided for convenience.
- //! @relates hana::basic_tuple
- //!
- //!
- //! Example
- //! -------
- //! @include example/basic_tuple/make.cpp
- BOOST_HANA_INLINE_VARIABLE constexpr auto make_basic_tuple = make<basic_tuple_tag>;
- }} // end namespace boost::hana
- #endif // !BOOST_HANA_FWD_BASIC_TUPLE_HPP
|