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
9USERVER_NAMESPACE_BEGIN
10
11namespace utils {
12
13// Analogue of std::forward_like from c++23.
14template <typename TOwner, typename TMember>
15decltype(auto) ForwardLike(TMember& member) {
16 if constexpr (std::is_lvalue_reference_v<TOwner> || std::is_lvalue_reference_v<TMember>) {
17 return member;
18 } else {
19 return std::move(member);
20 }
21}
22
23// Analogue of std::forward_like from c++23.
24template <typename TOwner, typename TMember>
25decltype(auto) ForwardLike(const TMember& member) {
26 return member;
27}
28
29} // namespace utils
30
31USERVER_NAMESPACE_END