|
47 | 47 | # define variant_CONFIG_OMIT_VARIANT_ALTERNATIVE_T_MACRO 0 |
48 | 48 | #endif |
49 | 49 |
|
| 50 | +// Control marking class bad_variant_access with [[nodiscard]]]: |
| 51 | + |
| 52 | +#if !defined(variant_CONFIG_NO_NODISCARD) |
| 53 | +# define variant_CONFIG_NO_NODISCARD 0 |
| 54 | +#else |
| 55 | +# define variant_CONFIG_NO_NODISCARD 1 |
| 56 | +#endif |
| 57 | + |
50 | 58 | // Control presence of exception handling (try and auto discover): |
51 | 59 |
|
52 | 60 | #ifndef variant_CONFIG_NO_EXCEPTIONS |
@@ -364,7 +372,7 @@ namespace nonstd { |
364 | 372 |
|
365 | 373 | // Presence of C++17 language features: |
366 | 374 |
|
367 | | -// no flag |
| 375 | +#define variant_HAVE_NODISCARD variant_CPP17_000 |
368 | 376 |
|
369 | 377 | // Presence of C++ library features: |
370 | 378 |
|
@@ -404,6 +412,12 @@ namespace nonstd { |
404 | 412 | # define variant_nullptr NULL |
405 | 413 | #endif |
406 | 414 |
|
| 415 | +#if variant_HAVE_NODISCARD && !variant_CONFIG_NO_NODISCARD |
| 416 | +# define variant_nodiscard [[nodiscard]] |
| 417 | +#else |
| 418 | +# define variant_nodiscard /*[[nodiscard]]*/ |
| 419 | +#endif |
| 420 | + |
407 | 421 | #if variant_HAVE_OVERRIDE |
408 | 422 | # define variant_override override |
409 | 423 | #else |
@@ -1141,7 +1155,7 @@ static const std::size_t variant_npos = static_cast<std::size_t>( -1 ); |
1141 | 1155 |
|
1142 | 1156 | // 19.7.11 Class bad_variant_access |
1143 | 1157 |
|
1144 | | -class bad_variant_access : public std::exception |
| 1158 | +class variant_nodiscard bad_variant_access : public std::exception |
1145 | 1159 | { |
1146 | 1160 | public: |
1147 | 1161 | #if variant_CPP11_OR_GREATER |
|
0 commit comments