1234567891011121314151617181920212223242526272829303132333435 |
- // Copyright (c) 2016-2024 Antony Polukhin
- //
- // Distributed under 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_PFR_DETAIL_RVALUE_T_HPP
- #define BOOST_PFR_DETAIL_RVALUE_T_HPP
- #pragma once
- #include <type_traits>
- #include <utility> // std::enable_if_t
- // This header provides aliases rvalue_t and lvalue_t.
- //
- // Usage: template <class T> void foo(rvalue<T> rvalue);
- //
- // Those are useful for
- // * better type safety - you can validate at compile time that only rvalue reference is passed into the function
- // * documentation and readability - rvalue_t<T> is much better than T&&+SFINAE
- namespace boost { namespace pfr { namespace detail {
- /// Binds to rvalues only, no copying allowed.
- template <class T
- #ifdef BOOST_PFR_DETAIL_STRICT_RVALUE_TESTING
- , class = std::enable_if_t<std::is_rvalue_reference<T&&>::value>
- #endif
- >
- using rvalue_t = T&&;
- /// Binds to mutable lvalues only
- }}} // namespace boost::pfr::detail
- #endif // BOOST_PFR_DETAIL_RVALUE_T_HPP
|