cython
1# tag: cpp, no-cpp-locals
2
3from libcpp.vector cimport vector
4
5
6cdef extern from "cpp_template_ref_args.h":
7
8cdef cppclass Bar[T]:
9Bar()
10# bug: Bar[T] created before class fully defined
11T value
12Bar[T] & ref() except +
13const Bar[T] & const_ref() except +
14const Bar[T] & const_ref_const() except +
15
16cdef cppclass Foo[T]:
17Foo()
18int bar_value(Bar[int] & bar)
19
20
21def test_template_ref_arg(int x):
22"""
23>>> test_template_ref_arg(4)
244
25"""
26
27# Templated reference parameters in method
28# of templated classes were not properly coalesced.
29
30cdef Foo[size_t] foo
31cdef Bar[int] bar
32
33bar.value = x
34
35return foo.bar_value(bar.ref())
36
37def test_template_ref_attr(int x):
38"""
39>>> test_template_ref_attr(4)
40(4, 4)
41"""
42cdef Bar[int] bar
43bar.value = x
44return bar.ref().value, bar.const_ref().value
45
46def test_template_ref_const_attr(int x):
47"""
48>>> test_template_ref_const_attr(4)
494
50"""
51cdef vector[int] v
52v.push_back(x)
53cdef const vector[int] *configs = &v
54cdef int value = configs.at(0)
55return value
56