Skip to content

Commit 7a9576e

Browse files
committed
Corrections on ..._observer_cast
1 parent 6541226 commit 7a9576e

File tree

1 file changed

+29
-21
lines changed

1 file changed

+29
-21
lines changed

include/luxrays/utils/observer_ptr.h

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -160,39 +160,47 @@ class observer_ptr {
160160

161161
// Free function for dynamic casting observer_ptr<B> to observer_ptr<A>
162162
template<class T, class U>
163-
observer_ptr<T> dynamic_observer_cast(const observer_ptr<U>& r) noexcept
163+
inline observer_ptr<T>
164+
dynamic_observer_cast(const observer_ptr<U>& r) noexcept
164165
{
165-
if (auto p = dynamic_cast<typename observer_ptr<T>::element_type*>(r.get()))
166-
return observer_ptr<T>(r);
167-
else
168-
return observer_ptr<T>{nullptr};
166+
auto* p = dynamic_cast<typename observer_ptr<T>::element_type*>(r.get());
167+
168+
if (p) return observer_ptr<T>(p);
169+
170+
return observer_ptr<T>{nullptr};
169171
}
170172

171173
template<class T, class U>
172-
observer_ptr<const T> dynamic_observer_cast(const observer_ptr<const U>& r) noexcept
174+
inline observer_ptr<const T>
175+
dynamic_observer_cast(const observer_ptr<const U>& r) noexcept
173176
{
174-
if (auto p = dynamic_cast<const typename observer_ptr<const T>::element_type*>(r.get()))
175-
return observer_ptr<const T>(p);
176-
else
177-
return observer_ptr<const T>{nullptr};
178-
}
177+
const auto* p = dynamic_cast<const typename observer_ptr<const T>::element_type*>(r.get());
178+
179+
if (p) return observer_ptr<const T>(p);
180+
181+
return observer_ptr<const T>{nullptr};
182+
}
179183

180184
template<class T, class U>
181-
observer_ptr<T> static_observer_cast(const observer_ptr<U>& r) noexcept
185+
inline observer_ptr<T>
186+
static_observer_cast(const observer_ptr<U>& r) noexcept
182187
{
183-
if (auto p = static_cast<typename observer_ptr<T>::element_type*>(r.get()))
184-
return observer_ptr<T>(r);
185-
else
186-
return observer_ptr<T>{nullptr};
188+
auto* p = static_cast<typename observer_ptr<T>::element_type*>(r.get());
189+
190+
if (p) return observer_ptr<T>(p);
191+
192+
return observer_ptr<T>{nullptr};
187193
}
188194

189195
template<class T, class U>
190-
observer_ptr<const T> static_observer_cast(const observer_ptr<const U>& r) noexcept
196+
inline observer_ptr<const T>
197+
static_observer_cast(const observer_ptr<const U>& r) noexcept
191198
{
192-
if (auto p = static_cast<const typename observer_ptr<const T>::element_type*>(r.get()))
193-
return observer_ptr<const T>(p);
194-
else
195-
return observer_ptr<const T>{nullptr};
199+
const auto* p = static_cast<const typename observer_ptr<const T>::element_type*>(r.get());
200+
201+
if (p) return observer_ptr<const T>(p);
202+
203+
return observer_ptr<const T>{nullptr};
196204
}
197205

198206
// Non-member swap

0 commit comments

Comments
 (0)