Add const modifier to handle::cast.
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; }