smart pointer refcount fix by @dean0x7d with slight modifications (fixes #471)
diff --git a/tests/test_issues.cpp b/tests/test_issues.cpp
index f5467cb..362ad44 100644
--- a/tests/test_issues.cpp
+++ b/tests/test_issues.cpp
@@ -290,7 +290,28 @@
         for (auto &e : nothrows) l.append(py::cast(e));
         return l;
     });
-}
+
+    /// Issue #471: shared pointer instance not dellocated
+    class SharedChild : public std::enable_shared_from_this<SharedChild> {
+    public:
+        SharedChild() { print_created(this); }
+        ~SharedChild() { print_destroyed(this); }
+    };
+
+    class SharedParent {
+    public:
+        SharedParent() : child(std::make_shared<SharedChild>()) { }
+        const SharedChild &get_child() const { return *child; }
+
+    private:
+        std::shared_ptr<SharedChild> child;
+    };
+
+    py::class_<SharedChild, std::shared_ptr<SharedChild>>(m, "SharedChild");
+    py::class_<SharedParent, std::shared_ptr<SharedParent>>(m, "SharedParent")
+        .def(py::init<>())
+        .def("get_child", &SharedParent::get_child, py::return_value_policy::reference);
+};
 
 
 // MSVC workaround: trying to use a lambda here crashes MSCV
diff --git a/tests/test_issues.py b/tests/test_issues.py
index cf645ef..208cf3b 100644
--- a/tests/test_issues.py
+++ b/tests/test_issues.py
@@ -1,5 +1,6 @@
 import pytest
 import gc
+from pybind11_tests import ConstructorStats
 
 
 def test_regressions():
@@ -187,3 +188,16 @@
     """ Issue 461: overwriting a class with a function """
     from pybind11_tests.issues import dupe_exception_failures
     assert dupe_exception_failures() == []
+
+
+def test_enable_shared_from_this_with_reference_rvp():
+    """ Issue #471: shared pointer instance not dellocated """
+    from pybind11_tests import SharedParent, SharedChild
+
+    parent = SharedParent()
+    child = parent.get_child()
+
+    cstats = ConstructorStats.get(SharedChild)
+    assert cstats.alive() == 1
+    del child, parent
+    assert cstats.alive() == 0