|
|
@@ -12,18 +12,19 @@
|
|
|
|
|
|
namespace cm {
|
|
|
|
|
|
-template <typename T, typename O,
|
|
|
- cm::enable_if_t<
|
|
|
- std::is_pointer<cm::invoke_result_t<decltype(&O::get), O>>::value,
|
|
|
- int> = 0>
|
|
|
+template <
|
|
|
+ typename T, typename O,
|
|
|
+ cm::enable_if_t<std::is_pointer<decltype(std::declval<O>().get())>::value,
|
|
|
+ int> = 0>
|
|
|
T& static_reference_cast(O& item)
|
|
|
{
|
|
|
return *(static_cast<T*>(item.get()));
|
|
|
}
|
|
|
-template <typename T, typename O,
|
|
|
- cm::enable_if_t<
|
|
|
- std::is_pointer<cm::invoke_result_t<decltype(&O::get), O>>::value,
|
|
|
- int> = 0>
|
|
|
+
|
|
|
+template <
|
|
|
+ typename T, typename O,
|
|
|
+ cm::enable_if_t<std::is_pointer<decltype(std::declval<O>().get())>::value,
|
|
|
+ int> = 0>
|
|
|
T& dynamic_reference_cast(O& item)
|
|
|
{
|
|
|
auto p = dynamic_cast<T*>(item.get());
|