Commit db202b831e286153fb020d1d78053b758bff730a

Authored by Henry Fredrick Schreiner
Committed by Henry Schreiner
1 parent bea833bb

Factoring out C++ version check to Macros file

include/CLI/App.hpp
@@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
19 // CLI Library includes 19 // CLI Library includes
20 #include "CLI/Error.hpp" 20 #include "CLI/Error.hpp"
21 #include "CLI/Ini.hpp" 21 #include "CLI/Ini.hpp"
  22 +#include "CLI/Macros.hpp"
22 #include "CLI/Option.hpp" 23 #include "CLI/Option.hpp"
23 #include "CLI/Split.hpp" 24 #include "CLI/Split.hpp"
24 #include "CLI/StringTools.hpp" 25 #include "CLI/StringTools.hpp"
@@ -447,7 +448,7 @@ class App { @@ -447,7 +448,7 @@ class App {
447 return opt; 448 return opt;
448 } 449 }
449 450
450 -#if __cplusplus >= 201402L 451 +#ifdef CLI11_CPP14
451 /// Add option for callback (C++14 or better only) 452 /// Add option for callback (C++14 or better only)
452 Option *add_flag(std::string name, 453 Option *add_flag(std::string name,
453 std::function<void(size_t)> function, ///< A function to call, void(size_t) 454 std::function<void(size_t)> function, ///< A function to call, void(size_t)
include/CLI/CLI.hpp
@@ -8,6 +8,8 @@ @@ -8,6 +8,8 @@
8 8
9 #include "CLI/Version.hpp" 9 #include "CLI/Version.hpp"
10 10
  11 +#include "CLI/Macros.hpp"
  12 +
11 #include "CLI/StringTools.hpp" 13 #include "CLI/StringTools.hpp"
12 14
13 #include "CLI/Error.hpp" 15 #include "CLI/Error.hpp"
include/CLI/Macros.hpp 0 → 100644
  1 +#pragma once
  2 +
  3 +// Distributed under the 3-Clause BSD License. See accompanying
  4 +// file LICENSE or https://github.com/CLIUtils/CLI11 for details.
  5 +
  6 +namespace CLI {
  7 +
  8 +// Note that all code in CLI11 must be in a namespace, even if it just a define.
  9 +
  10 +// The following version macro is very similar to the one in PyBind11
  11 +
  12 +#if !defined(_MSC_VER) && !defined(__INTEL_COMPILER)
  13 +# if __cplusplus >= 201402L
  14 +# define CLI11_CPP14
  15 +# if __cplusplus > 201402L /* Temporary: should be updated to >= the final C++17 value once known */
  16 +# define CLI11_CPP17
  17 +# endif
  18 +# endif
  19 +#elif defined(_MSC_VER)
  20 +// MSVC sets _MSVC_LANG rather than __cplusplus (supposedly until the standard is fully implemented)
  21 +# if _MSVC_LANG >= 201402L
  22 +# define CLI11_CPP14
  23 +# if _MSVC_LANG > 201402L && _MSC_VER >= 1910
  24 +# define CLI11_CPP17
  25 +# endif
  26 +# endif
  27 +#endif
  28 +
  29 +} // namespace CLI
include/CLI/Option.hpp
@@ -13,6 +13,7 @@ @@ -13,6 +13,7 @@
13 #include <vector> 13 #include <vector>
14 14
15 #include "CLI/Error.hpp" 15 #include "CLI/Error.hpp"
  16 +#include "CLI/Macros.hpp"
16 #include "CLI/Split.hpp" 17 #include "CLI/Split.hpp"
17 #include "CLI/StringTools.hpp" 18 #include "CLI/StringTools.hpp"
18 19
@@ -299,7 +300,7 @@ class Option : public OptionBase&lt;Option&gt; { @@ -299,7 +300,7 @@ class Option : public OptionBase&lt;Option&gt; {
299 return needs(opt1, args...); 300 return needs(opt1, args...);
300 } 301 }
301 302
302 -#if __cplusplus <= 201703L 303 +#ifndef CLI11_CPP17
303 /// Sets required options \deprecated 304 /// Sets required options \deprecated
304 Option *requires(Option *opt) { return needs(opt); } 305 Option *requires(Option *opt) { return needs(opt); }
305 306