1# mode: run 2# tag: condexpr, cpp 3 4cdef extern from "if_else_expr_cpp_helper.h": 5 cdef cppclass Holder: 6 int value 7 Holder() 8 Holder(int value) 9 10 cdef Holder v1 11 cdef Holder v2 12 cdef Holder& get_v1() 13 cdef Holder& get_v2() 14 15cdef reset() : 16 v1.value = 1 17 v2.value = 2 18 19def test_one_ref(bint b): 20 """ 21 >>> test_one_ref(False) 22 1 23 >>> test_one_ref(True) 24 100 25 """ 26 reset() 27 return (Holder(100) if b else get_v1()).value 28 29def test_both_ref(bint b): 30 """ 31 >>> test_both_ref(False) 32 (1, 100) 33 >>> test_both_ref(True) 34 (100, 2) 35 """ 36 reset() 37 try: 38 (get_v1() if b else get_v2()).value = 100 39 return v1.value, v2.value 40 finally: 41 reset() 42