tenno 0.1.0
Loading...
Searching...
No Matches
functional.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2// Author: Giovanni Santini
3// Mail: giovanni.santini@proton.me
4// Github: @San7o
5
6#pragma once
7
8#include <memory> // std::addressof
9
10namespace tenno
11{
12
20template <class T> class reference_wrapper
21{
22public:
23 using type = T;
29 constexpr reference_wrapper(T &&x) noexcept : _ptr(std::addressof(x))
30 {
31 }
32
33 constexpr reference_wrapper() noexcept : _ptr(nullptr)
34 {
35 }
36
37 constexpr reference_wrapper(const reference_wrapper &other) noexcept
38 : _ptr(other._ptr)
39 {
40 }
41
43 {
44 _ptr = other._ptr;
45 return *this;
46 }
47
48 constexpr operator T &() const noexcept
49 {
50 return *_ptr;
51 }
52
53 constexpr T &ref() const noexcept
54 {
55 return *_ptr;
56 }
57
58 constexpr bool operator==(const T &&other) const noexcept
59 {
60 return *_ptr == other;
61 }
62
63 constexpr bool operator!=(const T &&other) const noexcept
64 {
65 return *_ptr != other;
66 }
67
68 // TODO: operator()
69
70private:
71 T *_ptr;
72};
73
74} // namespace tenno
A reference wrapper class.
constexpr reference_wrapper(T &&x) noexcept
Construct a new reference wrapper object.
constexpr reference_wrapper() noexcept
reference_wrapper & operator=(const reference_wrapper &other) noexcept
constexpr T & ref() const noexcept
constexpr bool operator!=(const T &&other) const noexcept
constexpr bool operator==(const T &&other) const noexcept
constexpr reference_wrapper(const reference_wrapper &other) noexcept