userver: userver/utils/forward_like.hpp Source File
Loading...
Searching...
No Matches
forward_like.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/utils/forward_like.hpp
4/// @brief @copybrief utils::ForwardLike
5
6#include <type_traits>
7#include <utility>
8
9#include <userver/compiler/impl/nodebug.hpp>
10
11USERVER_NAMESPACE_BEGIN
12
13namespace utils {
14
15// Analogue of std::forward_like from c++23.
16template <typename TOwner, typename TMember>
17USERVER_IMPL_NODEBUG decltype(auto) ForwardLike(TMember& member) {
18 if constexpr (std::is_lvalue_reference_v<TOwner> || std::is_lvalue_reference_v<TMember>) {
19 return member;
20 } else {
21 return std::move(member);
22 }
23}
24
25// Analogue of std::forward_like from c++23.
26template <typename TOwner, typename TMember>
27USERVER_IMPL_NODEBUG decltype(auto) ForwardLike(const TMember& member) {
28 return member;
29}
30
31} // namespace utils
32
33USERVER_NAMESPACE_END