1# mode: run 2# tag: cpp, werror, cpp11 3 4from libcpp cimport nullptr 5from libcpp.memory cimport shared_ptr, make_shared 6from libcpp.utility cimport move 7from cython.operator cimport dereference 8 9cdef extern from *: 10 """ 11 #include <string> 12 13 template<typename T> const char* move_helper(T&) { return "lvalue-ref"; } 14 template<typename T> const char* move_helper(T&&) { return "rvalue-ref"; } 15 """ 16 const char* move_helper[T](T) 17 18def test_move_assignment(): 19 """ 20 >>> test_move_assignment() 21 """ 22 cdef shared_ptr[int] p1, p2 23 p1 = make_shared[int](1337) 24 p2 = move(p1) 25 assert p1 == nullptr 26 assert dereference(p2) == 1337 27 28def test_move_func_call(): 29 """ 30 >>> test_move_func_call() 31 """ 32 cdef shared_ptr[int] p 33 assert move_helper(p) == b'lvalue-ref' 34 assert move_helper(move(p)) == b'rvalue-ref' 35