diff --git a/Cython/Utility/CppConvert.pyx b/Cython/Utility/CppConvert.pyx
index e9a677bda7b163315ac631d9a2614219ca543fd3..75dab70de80b96c0c1a9007b090fb477bddcad4b 100644
--- a/Cython/Utility/CppConvert.pyx
+++ b/Cython/Utility/CppConvert.pyx
@@ -27,7 +27,7 @@ cdef extern from *:
     cdef object __Pyx_PyObject_FromStringAndSize(char*, size_t)
 
 @cname("{{cname}}")
-cdef object {{cname}}(string& s):
+cdef object {{cname}}(const string& s):
     return __Pyx_PyObject_FromStringAndSize(s.data(), s.size())
 
 
@@ -91,11 +91,9 @@ cdef extern from *:
             bint operator!=(const_iterator)
         const_iterator begin()
         const_iterator end()
-    cdef cppclass const_cpp_list "const std::list" [T] (cpp_list):
-        pass
 
 @cname("{{cname}}")
-cdef object {{cname}}(const_cpp_list[X]& v):
+cdef object {{cname}}(const cpp_list[X]& v):
     o = []
     cdef cpp_list[X].const_iterator iter = v.begin()
     while iter != v.end():
@@ -134,11 +132,9 @@ cdef extern from *:
             bint operator!=(const_iterator)
         const_iterator begin()
         const_iterator end()
-    cdef cppclass const_cpp_set "const std::{{maybe_unordered}}set" [T](cpp_set):
-        pass
 
 @cname("{{cname}}")
-cdef object {{cname}}(const_cpp_set[X]& s):
+cdef object {{cname}}(const cpp_set[X]& s):
     o = set()
     cdef cpp_set[X].const_iterator iter = s.begin()
     while iter != s.end():
@@ -166,12 +162,12 @@ cdef pair[X,Y] {{cname}}(object o) except *:
 {{template_type_declarations}}
 
 cdef extern from *:
-    cdef cppclass pair "const std::pair" [T, U]:
+    cdef cppclass pair "std::pair" [T, U]:
         T first
         U second
 
 @cname("{{cname}}")
-cdef object {{cname}}(pair[X,Y]& p):
+cdef object {{cname}}(const pair[X,Y]& p):
     return X_to_py(p.first), Y_to_py(p.second)