Skip to content

Commit 3406be6

Browse files
committed
1 parent 2600bb6 commit 3406be6

File tree

4 files changed

+42
-1
lines changed

4 files changed

+42
-1
lines changed

include/pybind11/pybind11.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1636,7 +1636,7 @@ struct property_cpp_function<
16361636
D,
16371637
detail::enable_if_t<
16381638
detail::all_of<std::is_base_of<detail::type_caster_base<T>, detail::type_caster<T>>,
1639-
std::is_base_of<detail::type_caster_base<D>, detail::type_caster<D>>,
1639+
std::is_base_of<detail::type_caster_base<D>, detail::make_caster<D>>,
16401640
std::is_pointer<D>>::value>> {
16411641

16421642
using drp = typename std::remove_pointer<D>::type;
@@ -1686,6 +1686,7 @@ struct property_cpp_function<
16861686
detail::all_of<std::is_base_of<detail::type_caster_base<T>, detail::type_caster<T>>,
16871687
std::is_base_of<detail::type_caster_base<D>, detail::type_caster<D>>,
16881688
detail::none_of<std::is_pointer<D>,
1689+
std::is_array<D>,
16891690
detail::is_instantiation<std::unique_ptr, D>,
16901691
detail::is_instantiation<std::shared_ptr, D>>>::value>> {
16911692

tests/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ set(PYBIND11_TEST_FILES
127127
test_class_sh_mi_thunks
128128
test_class_sh_module_local.py
129129
test_class_sh_property
130+
test_class_sh_property_bakein
130131
test_class_sh_property_non_owning
131132
test_class_sh_shared_ptr_copy_move
132133
test_class_sh_trampoline_basic
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#include "pybind11_tests.h"
2+
3+
namespace test_class_sh_property_bakein {
4+
5+
struct WithCharArrayMember {
6+
WithCharArrayMember() { std::strcpy(char6_member, "Char6"); }
7+
char char6_member[6];
8+
};
9+
10+
struct WithConstCharPtrMember {
11+
const char *const_char_ptr_member = "ConstChar*";
12+
};
13+
14+
} // namespace test_class_sh_property_bakein
15+
16+
TEST_SUBMODULE(class_sh_property_bakein, m) {
17+
using namespace test_class_sh_property_bakein;
18+
19+
py::class_<WithCharArrayMember>(m, "WithCharArrayMember")
20+
.def(py::init<>())
21+
.def_readonly("char6_member", &WithCharArrayMember::char6_member);
22+
23+
py::class_<WithConstCharPtrMember>(m, "WithConstCharPtrMember")
24+
.def(py::init<>())
25+
.def_readonly("const_char_ptr_member", &WithConstCharPtrMember::const_char_ptr_member);
26+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from __future__ import annotations
2+
3+
from pybind11_tests import class_sh_property_bakein as m
4+
5+
6+
def test_readonly_char6_member():
7+
obj = m.WithCharArrayMember()
8+
assert obj.char6_member == "Char6"
9+
10+
11+
def test_readonly_const_char_ptr_member():
12+
obj = m.WithConstCharPtrMember()
13+
assert obj.const_char_ptr_member == "ConstChar*"

0 commit comments

Comments
 (0)