Also removing `operator T()` from smart_holder_type_caster, to fix gcc…

Also removing `operator T()` from smart_holder_type_caster, to fix gcc compilation errors. The only loss is pass_rref in test_class_sh_basic.
parent 2003b508
...@@ -10,6 +10,10 @@ ...@@ -10,6 +10,10 @@
#pragma once #pragma once
#ifndef PYBIND11_USE_SMART_HOLDER_AS_DEFAULT
// #define PYBIND11_USE_SMART_HOLDER_AS_DEFAULT
#endif
#include "pytypes.h" #include "pytypes.h"
#include "detail/common.h" #include "detail/common.h"
#include "detail/descr.h" #include "detail/descr.h"
...@@ -1388,6 +1392,8 @@ struct smart_holder_type_caster : smart_holder_type_caster_load<T>, ...@@ -1388,6 +1392,8 @@ struct smart_holder_type_caster : smart_holder_type_caster_load<T>,
return cast(const_cast<T const *>(src), policy, parent); // Mutbl2Const return cast(const_cast<T const *>(src), policy, parent); // Mutbl2Const
} }
// clang-format off
template <typename T_> template <typename T_>
using cast_op_type = conditional_t< using cast_op_type = conditional_t<
std::is_same<remove_reference_t<T_>, T const *>::value, std::is_same<remove_reference_t<T_>, T const *>::value,
...@@ -1396,11 +1402,8 @@ struct smart_holder_type_caster : smart_holder_type_caster_load<T>, ...@@ -1396,11 +1402,8 @@ struct smart_holder_type_caster : smart_holder_type_caster_load<T>,
T *, T *,
conditional_t<std::is_same<T_, T const &>::value, conditional_t<std::is_same<T_, T const &>::value,
T const &, T const &,
conditional_t<std::is_same<T_, T &>::value, T &, T>>>>; T &>>>;
// clang-format off
operator T() { return this->loaded_as_lvalue_ref(); }
operator T const&() { return this->loaded_as_lvalue_ref(); } operator T const&() { return this->loaded_as_lvalue_ref(); }
operator T&() { return this->loaded_as_lvalue_ref(); } operator T&() { return this->loaded_as_lvalue_ref(); }
operator T const*() { return this->loaded_as_raw_ptr_unowned(); } operator T const*() { return this->loaded_as_raw_ptr_unowned(); }
......
...@@ -26,7 +26,6 @@ atyp const* rtrn_cptr() { return new atyp{"rtrn_cptr"}; } ...@@ -26,7 +26,6 @@ atyp const* rtrn_cptr() { return new atyp{"rtrn_cptr"}; }
atyp* rtrn_mptr() { return new atyp{"rtrn_mptr"}; } atyp* rtrn_mptr() { return new atyp{"rtrn_mptr"}; }
std::string pass_valu(atyp obj) { return "pass_valu:" + obj.mtxt; } std::string pass_valu(atyp obj) { return "pass_valu:" + obj.mtxt; }
std::string pass_rref(atyp&& obj) { return "pass_rref:" + obj.mtxt; }
std::string pass_cref(atyp const& obj) { return "pass_cref:" + obj.mtxt; } std::string pass_cref(atyp const& obj) { return "pass_cref:" + obj.mtxt; }
std::string pass_mref(atyp& obj) { return "pass_mref:" + obj.mtxt; } std::string pass_mref(atyp& obj) { return "pass_mref:" + obj.mtxt; }
std::string pass_cptr(atyp const* obj) { return "pass_cptr:" + obj->mtxt; } std::string pass_cptr(atyp const* obj) { return "pass_cptr:" + obj->mtxt; }
...@@ -84,7 +83,6 @@ TEST_SUBMODULE(class_sh_basic, m) { ...@@ -84,7 +83,6 @@ TEST_SUBMODULE(class_sh_basic, m) {
m.def("rtrn_mptr", rtrn_mptr); m.def("rtrn_mptr", rtrn_mptr);
m.def("pass_valu", pass_valu); m.def("pass_valu", pass_valu);
m.def("pass_rref", pass_rref);
m.def("pass_cref", pass_cref); m.def("pass_cref", pass_cref);
m.def("pass_mref", pass_mref); m.def("pass_mref", pass_mref);
m.def("pass_cptr", pass_cptr); m.def("pass_cptr", pass_cptr);
......
...@@ -39,7 +39,6 @@ def test_cast(rtrn_f, expected): ...@@ -39,7 +39,6 @@ def test_cast(rtrn_f, expected):
"pass_f, mtxt, expected", "pass_f, mtxt, expected",
[ [
(m.pass_valu, "Valu", "pass_valu:Valu(_MvCtor)*_CpCtor"), (m.pass_valu, "Valu", "pass_valu:Valu(_MvCtor)*_CpCtor"),
(m.pass_rref, "Rref", "pass_rref:Rref(_MvCtor)*_CpCtor"),
(m.pass_cref, "Cref", "pass_cref:Cref(_MvCtor)*_MvCtor"), (m.pass_cref, "Cref", "pass_cref:Cref(_MvCtor)*_MvCtor"),
(m.pass_mref, "Mref", "pass_mref:Mref(_MvCtor)*_MvCtor"), (m.pass_mref, "Mref", "pass_mref:Mref(_MvCtor)*_MvCtor"),
(m.pass_cptr, "Cptr", "pass_cptr:Cptr(_MvCtor)*_MvCtor"), (m.pass_cptr, "Cptr", "pass_cptr:Cptr(_MvCtor)*_MvCtor"),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment