@@ -113,7 +113,7 @@ <h2>Some C++ footgun avoidance.</h2>
113
113
< span class ="line "> };</ span >
114
114
< span class ="line "> < span class ="tok-kw "> class</ span > T2 {</ span >
115
115
< span class ="line "> < span class ="tok-kw "> public</ span > :</ span >
116
- < span class ="line "> std::map< std::string , T1 > mapex1;</ span >
116
+ < span class ="line "> std::map< std::string, T1> mapex1;</ span >
117
117
< span class ="line "> < span class ="tok-kw "> void</ span > AddT1 (< span class ="tok-kw "> const</ span > std::string &t1str) {</ span >
118
118
< span class ="line "> T1 t1obj(t1str);</ span >
119
119
< span class ="line "> mapex1.emplace(t1str, t1obj);</ span >
@@ -151,7 +151,7 @@ <h2>Some C++ footgun avoidance.</h2>
151
151
< span class ="line "> , 1, 0, 0, 0</ span >
152
152
< span class ="line "> , 0, 0, 0, 0 };</ span >
153
153
< span class ="line "> < span class ="tok-comment "> // clang-format: on</ span > </ span >
154
- < span class ="line "> < span class ="tok-type "> int64_t</ span > val_mcpy;
154
+ < span class ="line "> < span class ="tok-type "> int64_t</ span > val_mcpy;</ span >
155
155
< span class ="line "> < span class ="tok-comment "> // val_mcpy = memcpy(&val_mcpy, some_vals[1], < span class ="tok-builtin "> sizeof</ span > (val_mcpy); // refusal to compile</ span > </ span >
156
156
< span class ="line "> val_mcpy = < span class ="tok-builtin "> memcpy</ span > (&val_mcpy, &some_vals[1], < span class ="tok-builtin "> sizeof</ span > (val_mcpy); // refusal to compile</ span >
157
157
< span class ="line "> < span class ="tok-type "> int64_t</ span > val_wrong = *< span class ="tok-builtin "> reinterpret_cast</ span > << span class ="tok-type "> int64_t</ span > *>(some_vals[1]); < span class ="tok-comment "> // runtime error</ span > </ span >
@@ -162,7 +162,7 @@ <h2>Some C++ footgun avoidance.</h2>
162
162
< span class ="line "> < span class ="tok-kw "> if</ span > (val != < span class ="tok-number "> INT64_MIN</ span > ) < span class ="tok-kw "> return</ span > 1;</ span >
163
163
< span class ="line "> < span class ="tok-kw "> return</ span > 0;</ span >
164
164
< span class ="line "> }</ span >
165
- </ code > </ pre >
165
+ </ code > </ pre > </ figure >
166
166
</ li >
167
167
168
168
< li > < a href ="https://stackoverflow.com/questions/11598990/is-stdstoi-actually-safe-to-use ">
@@ -192,12 +192,12 @@ <h2>Some C++ footgun avoidance.</h2>
192
192
< li > Checking, if typename is a string is complex (even with C++17 extension).
193
193
< figure > < figcaption class ="cpp-cap "> < cite class ="file "> is_typname_string.hpp</ cite > </ figcaption >
194
194
< pre > < code > < span class ="line "> < span class ="tok-type "> template</ span > <typename STR></ span >
195
- < span class ="line "> < span class ="tok-type "> inline</ span > </ span > < span class ="tok-type "> constexpr</ span > bool is_string_class_decayed = false;</ span >
195
+ < span class ="line "> < span class ="tok-type "> inline</ span > < span class ="tok-type "> constexpr</ span > bool is_string_class_decayed = false;</ span >
196
196
< span class ="line "> < span class ="tok-type "> template</ span > <typename... STR></ span >
197
197
< span class ="line "> < span class ="tok-type "> inline</ span > < span class ="tok-type "> constexpr</ span > bool is_string_class_decayed<std::basic_string<STR...>> = true;</ span >
198
198
< span class ="line "> < span class ="tok-comment "> // decay_t will remove const, & and volatile from the type</ span > </ span >
199
199
< span class ="line "> < span class ="tok-type "> template</ span > <typename STR></ span >
200
- < span class ="line "> < span class ="tok-type "> inline</ span > </ span > < span class ="tok-type "> constexpr</ span > bool is_string_class = is_string_class_decayed<std::decay_t<STR>></ span >
200
+ < span class ="line "> < span class ="tok-type "> inline</ span > < span class ="tok-type "> constexpr</ span > bool is_string_class = is_string_class_decayed<std::decay_t<STR>></ span >
201
201
< span class ="line "> < span class ="tok-type "> template</ span > <typename TChar, typename TString></ span >
202
202
< span class ="line "> < span class ="tok-type "> inline</ span > < span class ="tok-type "> constexpr</ span > bool is_string = is_string_class<TString> && std::is_same_v<TChar, typename TString::value_type>;</ span >
203
203
< span class ="line "> < span class ="tok-kw "> static_assert</ span > (is_string_class<std::string>);</ span >
@@ -221,7 +221,7 @@ <h2>Some C++ footgun avoidance.</h2>
221
221
< pre > < code > < span class ="line "> < span class ="tok-kw "> void</ span > cstring_string_interop() {</ span >
222
222
< span class ="line "> < span class ="tok-kw "> const</ span > < span class ="tok-type "> char</ span > * cmd = < span class ="tok-str "> "ls"</ span > ;</ span >
223
223
< span class ="line "> < span class ="tok-type "> char</ span > < span class ="tok-kw "> const</ span > * buffer[] = {< span class ="tok-str "> "ls"</ span > , < span class ="tok-str "> "-l"</ span > , NULL};</ span >
224
- < span class ="line "> < span class ="tok-type "> char</ span > * < span class ="tok-kw "> const</ span > * argv = < span class ="tok-builtin "> const_cast</ span > < < span class ="tok-type "> char</ span > * < span class ="tok-kw "> const</ span > *>(buffer);</ span >
224
+ < span class ="line "> < span class ="tok-type "> char</ span > * < span class ="tok-kw "> const</ span > * argv = < span class ="tok-builtin "> const_cast</ span > < span class ="tok-type "> char</ span > * < span class ="tok-kw "> const</ span > *>(buffer);</ span >
225
225
< span class ="line "> int execed = execve(cmd, argv, NULL);</ span >
226
226
< span class ="line "> (< span class ="tok-kw "> void</ span > )execed;</ span >
227
227
< span class ="line "> }</ span >
@@ -246,7 +246,7 @@ <h2>Some C++ footgun avoidance.</h2>
246
246
< span class ="line "> < span class ="tok-type "> static</ span > < span class ="tok-type "> constexpr</ span > < span class ="tok-kw "> const</ span > T value = v;</ span >
247
247
< span class ="line "> };</ span >
248
248
< span class ="line "> }</ span >
249
- < span class ="line "> < span class ="tok-builtin "> #define</ span > FORCE_CONST_EVAL(exp) ::util_force_const_eval::const_expr_value< decltype (exp), exp > ::value</ span >
249
+ < span class ="line "> < span class ="tok-builtin "> #define</ span > FORCE_CONST_EVAL(exp) ::util_force_const_eval::const_expr_value< decltype(exp), exp> ::value</ span >
250
250
< span class ="line "> < span class ="tok-builtin "> #define</ span > LEAF(FN) (&FN[FORCE_CONST_EVAL(fname_offs(FN))])</ span >
251
251
< span class ="line "> </ span >
252
252
< span class ="line "> < span class ="tok-type "> int</ span > testEq(< span class ="tok-type "> int32_t</ span > a, < span class ="tok-type "> int32_t</ span > b) {</ span >
@@ -303,7 +303,7 @@ <h2>Some C++ footgun avoidance.</h2>
303
303
< span class ="line "> fprintf(stdout, < span class ="tok-str "> "%x, "</ span > , array[i]);</ span >
304
304
< span class ="line "> fprintf(stdout, < span class ="tok-str "> "\n"</ span > )</ span >
305
305
< span class ="line "> }</ span >
306
- </ code > </ pre >
306
+ </ code > </ pre > </ figure >
307
307
</ li >
308
308
309
309
< li > Incomplete type can not be instantiated in template:
@@ -327,7 +327,7 @@ <h2>Some C++ footgun avoidance.</h2>
327
327
< span class ="line "> < span class ="tok-kw "> public</ span > :</ span >
328
328
< span class ="line "> < span class ="tok-type "> int</ span > SomeMethod() < span class ="tok-kw "> override</ span > {</ span >
329
329
< span class ="line "> < span class ="tok-kw "> return</ span > 1;</ span >
330
- < span class ="line "> }
330
+ < span class ="line "> }</ span >
331
331
< span class ="line "> < span class ="tok-type "> virtual</ span > ~CSomeClass(); < span class ="tok-comment "> // missing virtual technical UB</ span > </ span >
332
332
< span class ="line "> };</ span >
333
333
< span class ="line "> < span class ="tok-kw "> class</ span > CSomeDerivedClass : CSomeClass</ span >
@@ -339,7 +339,7 @@ <h2>Some C++ footgun avoidance.</h2>
339
339
< span class ="line "> }</ span >
340
340
< span class ="line "> < span class ="tok-type "> virtual</ span > ~CSomeDerivedClass(); < span class ="tok-comment "> // optional virtual</ span > </ span >
341
341
< span class ="line "> };</ span >
342
- </ code > </ pre >
342
+ </ code > </ pre > </ figure >
343
343
</ li >
344
344
345
345
< li > Why exceptions do not scale.
@@ -386,7 +386,7 @@ <h2>Some C++ footgun avoidance.</h2>
386
386
< span class ="line "> }</ span >
387
387
< span class ="line "> < span class ="tok-kw "> return</ span > 0;</ span >
388
388
< span class ="line "> }</ span >
389
- </ code > </ pre >
389
+ </ code > </ pre > </ figure >
390
390
</ li >
391
391
392
392
< li > < code > __STDC_VERSION__</ code > < a href ="https://github.com/open-mpi/ompi/pull/7817 "> is not necessary defined</ a > by C++ compilers.
0 commit comments