mutable
A Database System for Research and Fast Prototyping
Loading...
Searching...
No Matches
OptField.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <concepts>
4#include <functional>
5#include <iostream>
6
7
8namespace m {
9
10template<bool Condition, typename T>
12{
13 private:
15
16 public:
17 OptField() = default;
18
19 template<typename U>
20 requires std::convertible_to<U, T>
21 OptField(U &&value) : value_(std::forward<U>(value)) { }
22
23 operator T&() { return value_; }
24 operator const T&() const { return value_; }
25
26 template<typename U>
27 requires std::convertible_to<U, T>
28 OptField & operator=(U &&value) {
29 value_ = T(value);
30 return *this;
31 }
32
33 T & operator*() { return value_; }
34 const T & operator*() const { return value_; }
35
36 T * operator->() { return &value_; }
37 const T * operator->() const { return &value_; }
38
39 friend std::ostream & operator<<(std::ostream &out, const OptField &F) { return out << F.value_; }
40};
41
42template<typename T>
43struct OptField<false,T>
44{
45 OptField() = default;
46 OptField(T) { }
47};
48
49}
‍mutable namespace
Definition: Backend.hpp:10
T(x)
and arithmetic< U > and same_signedness< T, U > U
Definition: concepts.hpp:90
STL namespace.
T & operator*()
Definition: OptField.hpp:33
OptField & operator=(U &&value)
Definition: OptField.hpp:28
const T * operator->() const
Definition: OptField.hpp:37
OptField(U &&value)
Definition: OptField.hpp:21
const T & operator*() const
Definition: OptField.hpp:34
T * operator->()
Definition: OptField.hpp:36
OptField()=default
friend std::ostream & operator<<(std::ostream &out, const OptField &F)
Definition: OptField.hpp:39