Iros
 
Loading...
Searching...
No Matches
movable_box.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/meta/trivial.h"
5#include "di/meta/util.h"
6#include "di/meta/vocab.h"
7#include "di/types/in_place.h"
8#include "di/util/addressof.h"
10#include "di/util/destroy_at.h"
11#include "di/util/forward.h"
13#include "di/util/move.h"
14#include "di/util/swap.h"
15
16namespace di::util {
23template<concepts::DefaultConstructible T>
24requires(!concepts::MoveConstructible<T>)
26public:
27 MovableBox() = default;
28
29 MovableBox(MovableBox const&) = delete;
30 constexpr MovableBox(MovableBox&&) : MovableBox() {}
31
32 auto operator=(MovableBox const&) -> MovableBox& = delete;
33 auto operator=(MovableBox&&) -> MovableBox& = delete;
34
35 template<typename... Args>
36 requires(concepts::ConstructibleFrom<T, Args...>)
37 constexpr explicit MovableBox(types::InPlace, Args&&... args) : m_value(util::forward<Args>(args)...) {}
38
39 constexpr auto value() & -> T& { return m_value; }
40 constexpr auto value() const& -> T const& { return m_value; }
41 constexpr auto value() && -> T&& { return util::move(m_value); }
42 constexpr auto value() const&& -> T const&& { return util::move(m_value); }
43
44private:
45 T m_value {};
46};
47}
48
49namespace di {
51}
Definition movable_box.h:25
constexpr MovableBox(types::InPlace, Args &&... args)
Definition movable_box.h:37
MovableBox(MovableBox const &)=delete
constexpr auto value() const &-> T const &
Definition movable_box.h:40
constexpr auto value() &-> T &
Definition movable_box.h:39
constexpr auto value() const &&-> T const &&
Definition movable_box.h:42
auto operator=(MovableBox &&) -> MovableBox &=delete
constexpr MovableBox(MovableBox &&)
Definition movable_box.h:30
auto operator=(MovableBox const &) -> MovableBox &=delete
constexpr auto value() &&-> T &&
Definition movable_box.h:41
Definition operations.h:11
Definition vocab.h:96
Definition zstring_parser.h:9
Definition in_place.h:4