Iros
Loading...
Searching...
No Matches
maybe_clone.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/meta/operations.h
"
4
#include "
di/util/clone.h
"
5
#include "
di/util/move.h
"
6
7
namespace
di::util
{
8
namespace
detail
{
9
struct
MaybeCloneFunction
{
10
template
<
typename
T>
11
requires
((
concepts::RValueReference<T>
&&
concepts::MoveConstructible<T>
) ||
concepts::Clonable<T>
)
12
constexpr
auto
operator
()(T&& value)
const
{
13
if
constexpr
(
concepts::RValueReference<T>
&&
concepts::MoveConstructible<T>
) {
14
return
util::forward<T>(value);
15
}
else
{
16
return
util::clone
(value);
17
}
18
}
19
};
20
}
21
22
constexpr
inline
auto
maybe_clone
=
detail::MaybeCloneFunction
{};
23
}
24
25
namespace
di
{
26
using
util::maybe_clone
;
27
}
di::concepts::Clonable
Definition
clone.h:44
di::concepts::MoveConstructible
Definition
operations.h:43
di::concepts::RValueReference
Definition
language.h:44
operations.h
di::util::detail
Definition
clamp.h:9
di::util
Definition
vocab.h:96
di::util::clone
constexpr auto clone
Definition
clone.h:39
di::util::maybe_clone
constexpr auto maybe_clone
Definition
maybe_clone.h:22
di
Definition
zstring_parser.h:9
di::util::detail::MaybeCloneFunction
Definition
maybe_clone.h:9
clone.h
move.h
libs
di
include
di
util
maybe_clone.h
Generated by
1.13.0