Seastar
High performance C++ framework for concurrent servers
reference_wrapper.hh
1/*
2 * This file is open source software, licensed to you under the terms
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
4 * distributed with this work for additional information regarding copyright
5 * ownership. You may not use this file except in compliance with the License.
6 *
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing,
12 * software distributed under the License is distributed on an
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 * KIND, either express or implied. See the License for the
15 * specific language governing permissions and limitations
16 * under the License.
17 */
18/*
19 * Copyright (C) 2017 ScyllaDB Ltd.
20 */
21
22#pragma once
23
24namespace seastar {
25
28
42template<typename T>
44 T* _pointer;
45
46 explicit reference_wrapper(T& object) noexcept : _pointer(&object) { }
47
48 template<typename U>
49 friend reference_wrapper<U> ref(U&) noexcept;
50 template<typename U>
51 friend reference_wrapper<const U> cref(const U&) noexcept;
52public:
53 using type = T;
54
55 operator T&() const noexcept { return *_pointer; }
56 T& get() const noexcept { return *_pointer; }
57
58};
59
61template<typename T>
62inline reference_wrapper<T> ref(T& object) noexcept {
63 return reference_wrapper<T>(object);
64}
65
67template<typename T>
68inline reference_wrapper<const T> cref(const T& object) noexcept {
69 return reference_wrapper<const T>(object);
70}
71
73
74}
Definition: reference_wrapper.hh:43
reference_wrapper< T > ref(T &object) noexcept
Wraps reference in a reference_wrapper.
Definition: reference_wrapper.hh:62
reference_wrapper< const T > cref(const T &object) noexcept
Wraps constant reference in a reference_wrapper.
Definition: reference_wrapper.hh:68
Seastar API namespace.
Definition: abort_on_ebadf.hh:26