File indexing completed on 2026-01-09 10:20:47
0001
0002
0003
0004
0005 #pragma once
0006
0007 #include "common.h"
0008
0009 #include <type_traits>
0010
0011 PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
0012 PYBIND11_NAMESPACE_BEGIN(detail)
0013
0014 template <typename To, typename From, typename SFINAE = void>
0015 struct dynamic_raw_ptr_cast_is_possible : std::false_type {};
0016
0017 template <typename To, typename From>
0018 struct dynamic_raw_ptr_cast_is_possible<
0019 To,
0020 From,
0021 detail::enable_if_t<!std::is_same<To, void>::value && std::is_polymorphic<From>::value>>
0022 : std::true_type {};
0023
0024 template <typename To,
0025 typename From,
0026 detail::enable_if_t<!dynamic_raw_ptr_cast_is_possible<To, From>::value, int> = 0>
0027 To *dynamic_raw_ptr_cast_if_possible(From * ) {
0028 return nullptr;
0029 }
0030
0031 template <typename To,
0032 typename From,
0033 detail::enable_if_t<dynamic_raw_ptr_cast_is_possible<To, From>::value, int> = 0>
0034 To *dynamic_raw_ptr_cast_if_possible(From *ptr) {
0035 return dynamic_cast<To *>(ptr);
0036 }
0037
0038 PYBIND11_NAMESPACE_END(detail)
0039 PYBIND11_NAMESPACE_END(PYBIND11_NAMESPACE)