Commit a6bfe2d457c6b2eb83029ec907777aa48760bd9f
1 parent
83aecd62
Further ifdef fixes.
Related to #339.
Showing
1 changed file
with
19 additions
and
15 deletions
include/cxxopts.hpp
| ... | ... | @@ -86,6 +86,17 @@ THE SOFTWARE. |
| 86 | 86 | #define CXXOPTS_DIAGNOSTIC_PUSH DO_PRAGMA(GCC diagnostic push) |
| 87 | 87 | #define CXXOPTS_DIAGNOSTIC_POP DO_PRAGMA(GCC diagnostic pop) |
| 88 | 88 | #define CXXOPTS_IGNORE_WARNING(x) DO_PRAGMA(GCC diagnostic ignored x) |
| 89 | +#else | |
| 90 | +// define other compilers here if needed | |
| 91 | +#define CXXOPTS_DIAGNOSTIC_PUSH | |
| 92 | +#define CXXOPTS_DIAGNOSTIC_POP | |
| 93 | +#define CXXOPTS_IGNORE_WARNING(x) | |
| 94 | +#endif | |
| 95 | + | |
| 96 | +#ifdef CXXOPTS_NO_RTTI | |
| 97 | +#define CXXOPTS_RTTI_CAST static_cast | |
| 98 | +#else | |
| 99 | +#define CXXOPTS_RTTI_CAST dynamic_cast | |
| 89 | 100 | #endif |
| 90 | 101 | |
| 91 | 102 | namespace cxxopts { |
| ... | ... | @@ -169,9 +180,7 @@ class UnicodeStringIterator : public |
| 169 | 180 | const icu::UnicodeString* s; |
| 170 | 181 | int32_t i; |
| 171 | 182 | }; |
| 172 | -#if defined(__GNUC__) | |
| 173 | -#pragma GCC diagnostic pop | |
| 174 | -#endif | |
| 183 | +CXXOPTS_DIAGNOSTIC_POP | |
| 175 | 184 | |
| 176 | 185 | inline |
| 177 | 186 | String& |
| ... | ... | @@ -322,13 +331,12 @@ const std::string RQUOTE("’"); |
| 322 | 331 | #endif |
| 323 | 332 | } // namespace |
| 324 | 333 | |
| 325 | -#if defined(__GNUC__) | |
| 326 | -// GNU GCC with -Weffc++ will issue a warning regarding the upcoming class, we want to silence it: | |
| 327 | -// warning: base class 'class std::enable_shared_from_this<cxxopts::Value>' has accessible non-virtual destructor | |
| 328 | -#pragma GCC diagnostic push | |
| 329 | -#pragma GCC diagnostic ignored "-Wnon-virtual-dtor" | |
| 330 | -// This will be ignored under other compilers like LLVM clang. | |
| 331 | -#endif | |
| 334 | +// GNU GCC with -Weffc++ will issue a warning regarding the upcoming class, we | |
| 335 | +// want to silence it: warning: base class 'class | |
| 336 | +// std::enable_shared_from_this<cxxopts::Value>' has accessible non-virtual | |
| 337 | +// destructor This will be ignored under other compilers like LLVM clang. | |
| 338 | +CXXOPTS_DIAGNOSTIC_PUSH | |
| 339 | +CXXOPTS_IGNORE_WARNING("-Wnon-virtual-dtor") | |
| 332 | 340 | class Value : public std::enable_shared_from_this<Value> |
| 333 | 341 | { |
| 334 | 342 | public: |
| ... | ... | @@ -1436,11 +1444,7 @@ CXXOPTS_DIAGNOSTIC_POP |
| 1436 | 1444 | m_long_names == nullptr ? "" : first_or_empty(*m_long_names)); |
| 1437 | 1445 | } |
| 1438 | 1446 | |
| 1439 | -#ifdef CXXOPTS_NO_RTTI | |
| 1440 | - return static_cast<const values::standard_value<T>&>(*m_value).get(); | |
| 1441 | -#else | |
| 1442 | - return dynamic_cast<const values::standard_value<T>&>(*m_value).get(); | |
| 1443 | -#endif | |
| 1447 | + return CXXOPTS_RTTI_CAST<const values::standard_value<T>&>(*m_value).get(); | |
| 1444 | 1448 | } |
| 1445 | 1449 | |
| 1446 | 1450 | private: | ... | ... |