diff --git a/docs/reference.rst b/docs/reference.rst
index 16d2a8d..bf7a8e2 100644
--- a/docs/reference.rst
+++ b/docs/reference.rst
@@ -118,7 +118,7 @@
     Return a string representation of the object. This is analogous to
     the ``str()`` function in Python.
 
-.. function:: template <typename T> T handle::cast()
+.. function:: template <typename T> T handle::cast() const
 
     Attempt to cast the Python object into the given C++ type. A
     :class:`cast_error` will be throw upon failure.
diff --git a/include/pybind11/cast.h b/include/pybind11/cast.h
index 456af7e..ecbf384 100644
--- a/include/pybind11/cast.h
+++ b/include/pybind11/cast.h
@@ -594,8 +594,8 @@
     return object(detail::type_caster<typename detail::decay<T>::type>::cast(value, policy, parent), false);
 }
 
-template <typename T> inline T handle::cast() { return pybind11::cast<T>(m_ptr); }
-template <> inline void handle::cast() { return; }
+template <typename T> inline T handle::cast() const { return pybind11::cast<T>(m_ptr); }
+template <> inline void handle::cast() const { return; }
 
 template <typename... Args> inline object handle::call(Args&&... args_) {
     const size_t size = sizeof...(Args);
diff --git a/include/pybind11/pytypes.h b/include/pybind11/pytypes.h
index 01776d7..2a9c7fa 100644
--- a/include/pybind11/pytypes.h
+++ b/include/pybind11/pytypes.h
@@ -42,7 +42,7 @@
     inline detail::accessor attr(handle key);
     inline detail::accessor attr(const char *key);
     inline pybind11::str str() const;
-    template <typename T> T cast();
+    template <typename T> T cast() const;
     template <typename ... Args> object call(Args&&... args_);
     operator bool() const { return m_ptr != nullptr; }
     bool check() const { return m_ptr != nullptr; }
