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 
24 namespace seastar {
25 
28 
42 template<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;
52 public:
53  using type = T;
54 
55  operator T&() const noexcept { return *_pointer; }
56  T& get() const noexcept { return *_pointer; }
57 
58 };
59 
61 template<typename T>
62 inline reference_wrapper<T> ref(T& object) noexcept {
63  return reference_wrapper<T>(object);
64 }
65 
67 template<typename T>
68 inline 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< const T > cref(const T &object) noexcept
Wraps constant reference in a reference_wrapper.
Definition: reference_wrapper.hh:68
reference_wrapper< T > ref(T &object) noexcept
Wraps reference in a reference_wrapper.
Definition: reference_wrapper.hh:62
Seastar API namespace.
Definition: abort_on_ebadf.hh:26