Gabriel B. has uploaded this change for review. (
https://gem5-review.googlesource.com/c/public/gem5/+/67453?usp=email )
Change subject: base: Fix safe_cast for reference types
......................................................................
base: Fix safe_cast for reference types
Change-Id: I86692561c169b1ad063000c990a52ea80c6637ca
---
M src/base/cast.hh
1 file changed, 18 insertions(+), 5 deletions(-)
diff --git a/src/base/cast.hh b/src/base/cast.hh
index cdc3c62..9c29c94 100644
--- a/src/base/cast.hh
+++ b/src/base/cast.hh
@@ -30,6 +30,8 @@
#define __BASE_CAST_HH__
#include <cassert>
+#include <type_traits>
+#include "base/logging.hh"
namespace gem5
{
@@ -44,10 +46,12 @@
template <class T, class U>
inline T
-safe_cast(U ptr)
+safe_cast(U&& ptr)
{
- T ret = dynamic_cast<T>(ptr);
- assert(ret);
+ T ret = dynamic_cast<T>(std::forward<U>(ptr));
+ if constexpr (std::is_pointer_v<T>) {
+ gem5_assert(ret);
+ }
return ret;
}
@@ -59,9 +63,9 @@
template <class T, class U>
inline T
-safe_cast(U ptr)
+safe_cast(U&& ptr)
{
- return static_cast<T>(ptr);
+ return static_cast<T>(std::forward<U>(ptr));
}
#endif
--
To view, visit
https://gem5-review.googlesource.com/c/public/gem5/+/67453?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: I86692561c169b1ad063000c990a52ea80c6637ca
Gerrit-Change-Number: 67453
Gerrit-PatchSet: 1
Gerrit-Owner: Gabriel B. <gabriel.bus...@arteris.com>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org