fixed regression in STL type caster RVPs (fixes #1561) (#1603)

diff --git a/tests/test_stl.cpp b/tests/test_stl.cpp
index 0bb6433..3736885 100644
--- a/tests/test_stl.cpp
+++ b/tests/test_stl.cpp
@@ -265,4 +265,16 @@
           py::return_value_policy::take_ownership);
 
     m.def("array_cast_sequence", [](std::array<int, 3> x) { return x; });
+
+    /// test_issue_1561
+    struct Issue1561Inner { std::string data; };
+    struct Issue1561Outer { std::vector<Issue1561Inner> list; };
+
+    py::class_<Issue1561Inner>(m, "Issue1561Inner")
+        .def(py::init<std::string>())
+        .def_readwrite("data", &Issue1561Inner::data);
+
+    py::class_<Issue1561Outer>(m, "Issue1561Outer")
+        .def(py::init<>())
+        .def_readwrite("list", &Issue1561Outer::list);
 }
diff --git a/tests/test_stl.py b/tests/test_stl.py
index 9e58223..ba71ca3 100644
--- a/tests/test_stl.py
+++ b/tests/test_stl.py
@@ -220,3 +220,11 @@
 
 def test_array_cast_sequence():
     assert m.array_cast_sequence((1, 2, 3)) == [1, 2, 3]
+
+
+def test_issue_1561():
+    """ check fix for issue #1561 """
+    bar = m.Issue1561Outer()
+    bar.list = [m.Issue1561Inner('bar')]
+    bar.list
+    assert bar.list[0].data == 'bar'