1- #pragma once
2-
3- #define FRT \
4- __attribute__ ((swift_attr(" import_reference" ))) \
5- __attribute__((swift_attr(" retain:immortal" ))) \
6- __attribute__((swift_attr(" release:immortal" )))
7-
81int &getCopyCounter () {
92 static int copyCounter = 0 ;
103 return copyCounter;
@@ -17,25 +10,17 @@ class CopyTrackedBaseClass {
1710 ++getCopyCounter ();
1811 }
1912
20- int getX ( ) const {
21- return x;
13+ int operator []( int y ) const {
14+ return y + x;
2215 }
2316private:
2417 int x;
25- } FRT ;
18+ };
2619
2720class CopyTrackedDerivedClass : public CopyTrackedBaseClass {
2821public:
2922 CopyTrackedDerivedClass (int x) : CopyTrackedBaseClass(x) {}
30-
31- int getDerivedX () const {
32- return getX ();
33- }
34- } FRT;
35-
36- CopyTrackedDerivedClass *makeCopyTrackedDerivedClass (int x) {
37- return new CopyTrackedDerivedClass (x);
38- }
23+ };
3924
4025class NonEmptyBase {
4126public:
@@ -44,13 +29,42 @@ class NonEmptyBase {
4429 }
4530private:
4631 int y = 11 ;
47- } FRT ;
32+ };
4833
4934class CopyTrackedDerivedDerivedClass : public NonEmptyBase , public CopyTrackedDerivedClass {
5035public:
5136 CopyTrackedDerivedDerivedClass (int x) : CopyTrackedDerivedClass(x) {}
52- } FRT ;
37+ };
5338
54- CopyTrackedDerivedDerivedClass *makeCopyTrackedDerivedDerivedClass (int x) {
55- return new CopyTrackedDerivedDerivedClass (x);
56- }
39+ class SubscriptReturnsRef {
40+ public:
41+ const int &operator [](int y) const {
42+ return x[y];
43+ }
44+ int &operator [](int y) {
45+ return x[y];
46+ }
47+
48+ private:
49+ int x[10 ] = {0 };
50+ };
51+
52+ class DerivedSubscriptReturnsRef : public SubscriptReturnsRef {
53+ public:
54+ inline DerivedSubscriptReturnsRef () : SubscriptReturnsRef() {}
55+ };
56+
57+ class NonConstSubscriptReturnsRef {
58+ public:
59+ int &operator [](int y) {
60+ return x[y];
61+ }
62+
63+ private:
64+ int x[10 ] = {0 };
65+ };
66+
67+ class DerivedNonConstSubscriptReturnsRef : public NonConstSubscriptReturnsRef {
68+ public:
69+ inline DerivedNonConstSubscriptReturnsRef () : NonConstSubscriptReturnsRef() {}
70+ };
0 commit comments