mutable
A Database System for Research and Fast Prototyping
Loading...
Searching...
No Matches
some.hpp
Go to the documentation of this file.
1#pragma once
2
3
4#include <type_traits>
5#include <utility>
6
7
8namespace m {
9
14template<typename T>
15struct some
16{
17 using value_type = std::remove_reference_t<T>;
19
20 explicit some(value_type &&value)
21 requires requires (value_type &&value) { { value_type(std::move(value)) } -> std::same_as<value_type>; }
22 : value(std::move(value)) { }
23
24 some() = delete;
25 some(const some&) = delete;
26
27 some(some &&other)
28 requires requires (some &&other) { { value_type(std::move(other.value)) } -> std::same_as<value_type>; }
29 : value(std::move(other.value)) { }
30
32 requires requires (value_type &this_value, some other) { this_value = std::move(other.value); }
33 { this->value = std::move(other.value); return *this; }
34
36 requires requires (value_type &this_value, value_type &&other_value) { this_value = std::move(other_value); }
37 { this->value = std::move(value); return *this; }
38};
39
40template<>
41struct some<void> { };
42
43}
‍mutable namespace
Definition: Backend.hpp:10
A helper type to wrap some template type parameter such that it can safely be used to declare a class...
Definition: some.hpp:16
std::remove_reference_t< T > value_type
Definition: some.hpp:17
some & operator=(some other)
Definition: some.hpp:31
some()=delete
value_type value
Definition: some.hpp:18
some & operator=(value_type &&value)
Definition: some.hpp:35
some(value_type &&value)
Definition: some.hpp:20
some(some &&other)
Definition: some.hpp:27
some(const some &)=delete