File indexing completed on 2024-04-06 12:31:51
0001 #include "FWCore/Utilities/interface/thread_safety_macros.h"
0002
0003
0004 const static int g_staticConst = 23;
0005 static int const& g_ref_staticConst = g_staticConst;
0006 static int const* g_ptr_staticConst = &g_staticConst;
0007
0008
0009
0010 CMS_THREAD_SAFE static int g_static;
0011 static int * g_ptr_static = &g_static;
0012
0013 class ClassTest {
0014 public:
0015 explicit ClassTest();
0016 ~ClassTest();
0017
0018 void testConst() const;
0019
0020 private:
0021
0022 mutable int m_testMutable;
0023 int * m_testPointer;
0024 int m_testInteger;
0025
0026 };
0027
0028 void
0029 ClassTest::testConst() const
0030 {
0031
0032 m_testMutable = 23;
0033
0034
0035 (*m_testPointer) = 23;
0036
0037
0038 int * localPtr = m_testPointer;
0039 (*localPtr) = 23;
0040
0041
0042
0043
0044 }
0045
0046 class Thing
0047 {
0048 private:
0049
0050 int num;
0051
0052 public:
0053
0054 Thing(): num{0} {}
0055 int getnum() {return num;}
0056 void putnum(int x) {num=x;}
0057 };
0058
0059 class Foo
0060 {
0061
0062 private:
0063
0064 int Var_;
0065 int & RVar_=Var_;
0066 int * PVar_=&RVar_;
0067 Thing * T_p;
0068
0069 public:
0070
0071 Foo(): Var_{0}{T_p= new Thing;}
0072 void func1(int x) {return;}
0073 void func2(int &x) {return;}
0074 void func3(int *x) {return;}
0075 void func4(int const *x) {return;}
0076 void func5(int * const x) {return;}
0077 void func6(int const &x) {return;}
0078 void nonConstFunc() { Var_ = 5;}
0079 void constFunc() const { return;}
0080 int * nonConstAccess() const {return PVar_;}
0081 int & nonConstRefAccess() const { return RVar_; }
0082 int const * constAccess() const {return PVar_;}
0083 int const & constRefAccess() const { return RVar_; }
0084 Thing * getThing() { return T_p; }
0085
0086 };
0087
0088 class Bar
0089 {
0090 CMS_THREAD_SAFE static int si_;
0091 static void const modifyStatic(int &x) {si_=x;}
0092 private:
0093 Bar(): ci_{0},ipc_{&i_},icp_{&i_},ir_{i_},icr_{ci_} {}
0094 const int ci_;
0095 int i_;
0096 int const * icp_;
0097 int * ip_;
0098 int * const ipc_;
0099 int & ir_;
0100 int const & icr_;
0101 Foo foo_;
0102 public:
0103 void modifyMember() { i_ = 5;}
0104 void indirectModifyMember() { modifyMember();}
0105 void recursiveCaller(int i) {if (i == 0) return; recursiveCaller(--i);}
0106
0107 void method1(int &x) {return;}
0108 void method2(const int &x) const {return;}
0109
0110 void produce()
0111 {
0112 Foo * foo = new Foo;
0113 int I=0;
0114 int * PI;
0115 int const * CPI;
0116 foo->func1(i_);
0117 foo->func1(ci_);
0118 foo->func1(ir_);
0119 foo->func1(icr_);
0120 foo->func1(I);
0121 foo->func2(i_);
0122 foo->func2(ir_);
0123 foo->func2(I);
0124 foo->func6(i_);
0125 foo->func6(ir_);
0126 foo->func6(I);
0127 foo->nonConstFunc();
0128 foo_.nonConstFunc();
0129 foo_.constFunc();
0130 foo->getThing()->getnum();
0131 foo_.getThing()->getnum();
0132 method1(i_);
0133 method1(I);
0134 modifyStatic(I);
0135 modifyMember();
0136 indirectModifyMember();
0137 recursiveCaller(1);
0138 PI=foo_.nonConstAccess();
0139 CPI=foo_.constAccess();
0140 if (*PI==*CPI) I++;
0141 }
0142
0143 void method3() const
0144 {
0145 Foo foo;
0146 int I=0;
0147 Bar bar;
0148 foo.func1(i_);
0149 foo.func1(ci_);
0150 foo.func1(ir_);
0151 foo.func1(icr_);
0152 foo.func1(I);
0153 foo.func2(ir_);
0154 foo.func2(I);
0155 foo.func6(i_);
0156 foo.func6(ir_);
0157 foo.func6(I);
0158 foo_.nonConstRefAccess();
0159 foo_.constRefAccess();
0160
0161 foo_.nonConstAccess();
0162 foo_.constAccess();
0163 if (i_) method2(i_);
0164 bar.produce();
0165
0166 int & ir = (int &) (icr_);
0167 int & cir = const_cast<int &>(icr_);
0168 int * ip = (int *) (icp_);
0169 int * cip = const_cast<int *>(icp_);
0170
0171 int const& ira = (int const&)(icr_);
0172
0173 CMS_THREAD_SAFE static int evilStaticLocal = 0;
0174 static int & intRef = evilStaticLocal;
0175 static int * intPtr = & evilStaticLocal;
0176
0177 static const int c_evilStaticLocal = 0;
0178 static int const& c_intRef = evilStaticLocal;
0179 static int const* c_intPtr = &evilStaticLocal;
0180 static const int * c_intPtr_equivalent = &evilStaticLocal;
0181 static int const* const* c_intPtrPtr = &( c_intPtr);
0182 g_static=23;
0183 si_=23;
0184 modifyStatic(I);
0185 }
0186
0187
0188 };
0189
0190 int main()
0191 {
0192 return 0;
0193 }
0194
0195
0196