parameterize iterators by return value policy (fixes #388)
diff --git a/tests/test_issues.cpp b/tests/test_issues.cpp
index 3fc8aeb..f2d9a51 100644
--- a/tests/test_issues.cpp
+++ b/tests/test_issues.cpp
@@ -233,6 +233,11 @@
.def(py::self + py::self)
.def("__add__", [](const OpTest2& c2, const OpTest1& c1) { return c2 + c1; })
.def("__radd__", [](const OpTest2& c2, const OpTest1& c1) { return c2 + c1; });
+
+ // Issue 388: Can't make iterators via make_iterator() with different r/v policies
+ static std::vector<int> list = { 1, 2, 3 };
+ m2.def("make_iterator_1", []() { return py::make_iterator<py::return_value_policy::copy>(list); });
+ m2.def("make_iterator_2", []() { return py::make_iterator<py::return_value_policy::automatic>(list); });
}
// MSVC workaround: trying to use a lambda here crashes MSCV
diff --git a/tests/test_issues.py b/tests/test_issues.py
index b4b8f95..ad3d39d 100644
--- a/tests/test_issues.py
+++ b/tests/test_issues.py
@@ -170,3 +170,12 @@
Add OpTest2 with OpTest2
Add OpTest2 with OpTest1
Add OpTest2 with OpTest1"""
+
+def test_iterator_rvpolicy():
+ """ Issue 388: Can't make iterators via make_iterator() with different r/v policies """
+ from pybind11_tests.issues import make_iterator_1
+ from pybind11_tests.issues import make_iterator_2
+
+ assert list(make_iterator_1()) == [1, 2, 3]
+ assert list(make_iterator_2()) == [1, 2, 3]
+ assert(type(make_iterator_1()) != type(make_iterator_2()))