Commit 11444a4e3a2c1f760f6ab790dd099f76e273b2eb

Authored by Henry Fredrick Schreiner
Committed by Henry Schreiner
1 parent 4d695b04

Updates to macros

include/CLI/Macros.hpp
@@ -9,21 +9,34 @@ namespace CLI { @@ -9,21 +9,34 @@ namespace CLI {
9 9
10 // The following version macro is very similar to the one in PyBind11 10 // The following version macro is very similar to the one in PyBind11
11 11
12 -#if !defined(_MSC_VER) && !defined(__INTEL_COMPILER) 12 +#if !(defined(_MSC_VER) && __cplusplus == 199711L) && !defined(__INTEL_COMPILER)
13 #if __cplusplus >= 201402L 13 #if __cplusplus >= 201402L
14 #define CLI11_CPP14 14 #define CLI11_CPP14
15 -#if __cplusplus > 201402L /* Temporary: should be updated to >= the final C++17 value once known */ 15 +#if __cplusplus >= 201703L
16 #define CLI11_CPP17 16 #define CLI11_CPP17
  17 +#if __cplusplus > 201703L
  18 +#define CLI11_CPP20
17 #endif 19 #endif
18 #endif 20 #endif
19 -#elif defined(_MSC_VER) 21 +#endif
  22 +#elif defined(_MSC_VER) && __cplusplus == 199711L
20 // MSVC sets _MSVC_LANG rather than __cplusplus (supposedly until the standard is fully implemented) 23 // MSVC sets _MSVC_LANG rather than __cplusplus (supposedly until the standard is fully implemented)
  24 +// Unless you use the /Zc:__cplusplus flag on Visual Studio 2017 15.7 Preview 3 or newer
21 #if _MSVC_LANG >= 201402L 25 #if _MSVC_LANG >= 201402L
22 #define CLI11_CPP14 26 #define CLI11_CPP14
23 #if _MSVC_LANG > 201402L && _MSC_VER >= 1910 27 #if _MSVC_LANG > 201402L && _MSC_VER >= 1910
24 #define CLI11_CPP17 28 #define CLI11_CPP17
  29 +#if __MSVC_LANG > 201703L && _MSC_VER >= 1910
  30 +#define CLI11_CPP20
  31 +#endif
25 #endif 32 #endif
26 #endif 33 #endif
27 #endif 34 #endif
28 35
  36 +#if defined(PYBIND11_CPP14)
  37 +#define CLI11_DEPRECATED(reason) [[deprecated(reason)]]
  38 +#else
  39 +#define CLI11_DEPRECATED(reason) __attribute__((deprecated(reason)))
  40 +#endif
  41 +
29 } // namespace CLI 42 } // namespace CLI
include/CLI/Option.hpp
@@ -300,14 +300,17 @@ class Option : public OptionBase<Option> { @@ -300,14 +300,17 @@ class Option : public OptionBase<Option> {
300 return needs(opt1, args...); 300 return needs(opt1, args...);
301 } 301 }
302 302
303 -#ifndef CLI11_CPP17 303 +#ifndef CLI11_CPP20
304 /// Sets required options \deprecated 304 /// Sets required options \deprecated
  305 + CLI11_DEPRECATED("Use needs instead of requires (eventual keyword clash)")
305 Option *requires(Option *opt) { return needs(opt); } 306 Option *requires(Option *opt) { return needs(opt); }
306 307
307 /// Can find a string if needed \deprecated 308 /// Can find a string if needed \deprecated
  309 + CLI11_DEPRECATED("Use needs instead of requires (eventual keyword clash)")
308 template <typename T = App> Option *requires(std::string opt_name) { return needs<T>(opt_name); } 310 template <typename T = App> Option *requires(std::string opt_name) { return needs<T>(opt_name); }
309 311
310 /// Any number supported, any mix of string and Opt \deprecated 312 /// Any number supported, any mix of string and Opt \deprecated
  313 + CLI11_DEPRECATED("Use needs instead of requires (eventual keyword clash)")
311 template <typename A, typename B, typename... ARG> Option *requires(A opt, B opt1, ARG... args) { 314 template <typename A, typename B, typename... ARG> Option *requires(A opt, B opt1, ARG... args) {
312 needs(opt); 315 needs(opt);
313 return needs(opt1, args...); 316 return needs(opt1, args...);