| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- // (C) Copyright John Maddock 2010.
- // (C) Copyright Matt Borland 2024.
- // Use, modification and distribution are subject to the
- // Boost Software License, Version 1.0. (See accompanying file
- // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- #ifndef BOOST_MATH_TUPLE_HPP_INCLUDED
- #define BOOST_MATH_TUPLE_HPP_INCLUDED
- #include <boost/math/tools/config.hpp>
- #ifdef BOOST_MATH_ENABLE_CUDA
- #include <boost/math/tools/type_traits.hpp>
- #include <cuda/std/utility>
- #include <cuda/std/tuple>
- namespace boost {
- namespace math {
- using cuda::std::pair;
- using cuda::std::tuple;
- using cuda::std::make_pair;
- using cuda::std::tie;
- using cuda::std::get;
- using cuda::std::tuple_size;
- using cuda::std::tuple_element;
- namespace detail {
- template <typename T>
- BOOST_MATH_GPU_ENABLED T&& forward(boost::math::remove_reference_t<T>& arg) noexcept
- {
- return static_cast<T&&>(arg);
- }
- template <typename T>
- BOOST_MATH_GPU_ENABLED T&& forward(boost::math::remove_reference_t<T>&& arg) noexcept
- {
- static_assert(!boost::math::is_lvalue_reference<T>::value, "Cannot forward an rvalue as an lvalue.");
- return static_cast<T&&>(arg);
- }
- } // namespace detail
- template <typename T, typename... Ts>
- BOOST_MATH_GPU_ENABLED auto make_tuple(T&& t, Ts&&... ts)
- {
- return cuda::std::tuple<boost::math::decay_t<T>, boost::math::decay_t<Ts>...>(
- boost::math::detail::forward<T>(t), boost::math::detail::forward<Ts>(ts)...
- );
- }
- } // namespace math
- } // namespace boost
- #else
- #include <tuple>
- namespace boost {
- namespace math {
- using ::std::tuple;
- using ::std::pair;
- // [6.1.3.2] Tuple creation functions
- using ::std::ignore;
- using ::std::make_tuple;
- using ::std::tie;
- using ::std::get;
- // [6.1.3.3] Tuple helper classes
- using ::std::tuple_size;
- using ::std::tuple_element;
- // Pair helpers
- using ::std::make_pair;
- } // namespace math
- } // namespace boost
- #endif // BOOST_MATH_ENABLE_CUDA
- #endif
|