@@ -196,31 +196,6 @@ class UniformInitializationList {
196196 }
197197};
198198
199- #if __cplusplus >= 201103L
200-
201- /* *
202- This class has an `Initializer_list` constructor.
203- */
204- class InitializerListCtor {
205- public:
206-
207- std::vector<int > v;
208-
209- InitializerListCtor (std::initializer_list<int > list) {
210- for (auto & i : list)
211- v.push_back (i);
212- }
213-
214- InitializerListCtor (int before, std::initializer_list<int > list, int after) {
215- v.push_back (before + 1 );
216- for (auto & i : list)
217- v.push_back (i);
218- v.push_back (after - 1 );
219- }
220- };
221-
222- #endif
223-
224199class MemberConstructorTest {
225200 public:
226201 NoBaseNoMember0 member0;
@@ -284,6 +259,7 @@ class Base {
284259 Initialization lists have 4 main uses:
285260
286261 1) avoid calling member object constructor and copy separately
262+ https://stackoverflow.com/questions/12927169/how-can-i-initialize-c-object-member-variables-in-the-constructor
287263 2) initializing base classes with non default constructors
288264 3) initializing const elements
289265 4) initializing member references &
@@ -1184,95 +1160,6 @@ int main() {
11841160#endif
11851161 }
11861162
1187- #if __cplusplus >= 201103L
1188- /*
1189- # Brace enclosed initializer list
1190-
1191- See inializer list
1192-
1193- # List initialization
1194-
1195- See initializer list constructor.
1196-
1197- # Initializer list contructor
1198-
1199- Useful in cases where you don't know beforehand how many arguments
1200- a constructor should receive.
1201-
1202- For example, the stdlib std::vector class gets an initializer list constructor on C++11,
1203- which allows one to initialize it to any constant.
1204-
1205- TODO could this not be achieved via cstdarg?
1206- */
1207- {
1208- // STL std::vector usage example
1209- {
1210- std::vector<int > v{0 , 1 };
1211- // SAME.
1212- // std::vector<int> v = std::vector<int>({0, 1});
1213- assert (v[0 ] == 0 );
1214- assert (v[1 ] == 1 );
1215- assert (v == std::vector<int >({0 , 1 }));
1216- assert ((v == std::vector<int >{0 , 1 }));
1217-
1218- // Assignment also works via implicit conversion.
1219- v = {1 , 0 };
1220- assert ((v == std::vector<int >{1 , 0 }));
1221-
1222- // ERROR: TODO why no implicit conversion is made?
1223- // assert((v == {0, 1}));
1224- }
1225-
1226- // How to implemente one.
1227- {
1228- {
1229- InitializerListCtor o{0 , 1 };
1230- assert ((o.v == std::vector<int >{0 , 1 }));
1231- }
1232-
1233- // Initializer list constructor is called
1234- {
1235- InitializerListCtor o{0 , 0 , 0 , 0 };
1236- assert ((o.v == std::vector<int >{0 , 0 , 0 , 0 }));
1237- }
1238-
1239- // 3 param constructor is called
1240- {
1241- InitializerListCtor o (0 , {0 , 0 ,}, 0 );
1242- assert ((o.v == std::vector<int >{1 , 0 , 0 , -1 }));
1243- }
1244- }
1245-
1246- /*
1247- # auto and initializer lists
1248-
1249- auto rule: brace initializer can be bound to auto
1250-
1251- http://en.cppreference.com/w/cpp/utility/initializer_list
1252- */
1253- {
1254- {
1255- // TODO GCC 5.1 does not allow this, which conflicts with
1256- // http://en.cppreference.com/w/cpp/utility/initializer_list
1257- // Who is right?
1258- // auto l{0, 1, 2};
1259- // SAME:
1260- // initializer_list<int> l{0, 1, 2};
1261- // assert(l.size() == 3);
1262- // assert(*l.begin() == 0);
1263- }
1264-
1265- // The rule for auto makes this ranged for work.
1266- // TODO0 why here? I see an `int`, not an `auto`
1267- int i = 0 ;
1268- for (int x : {0 , 1 , 2 }) {
1269- assert (x == i);
1270- i++;
1271- }
1272- }
1273- }
1274- #endif
1275-
12761163 /*
12771164 # Destructor
12781165
0 commit comments