Commit 87494a2270823bae49aa7f9dba8fc865ccb700e0

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

Allow Optional search to be disabled by user

README.md
... ... @@ -167,7 +167,7 @@ An option name must start with a alphabetic character or underscore. For long op
167 167  
168 168 On a C++14 compiler, you can pass a callback function directly to `.add_flag`, while in C++11 mode you'll need to use `.add_flag_function` if you want a callback function. The function will be given the number of times the flag was passed. You can throw a relevant `CLI::ParseError` to signal a failure.
169 169  
170   -On a compiler that supports C++17's `__has_include`, you can also use `std::optional`, `std::experimental::optional`, and `boost::optional` directly in an `add_option` call. If you don't have `__has_include`, you can define `CLI11_BOOST_OPTIONAL` before including CLI11 to manually add support for `boost::optional`. See [CLI11 Internals] for information on how this was done and how you can add your own converters.
  170 +On a compiler that supports C++17's `__has_include`, you can also use `std::optional`, `std::experimental::optional`, and `boost::optional` directly in an `add_option` call. If you don't have `__has_include`, you can define `CLI11_BOOST_OPTIONAL 1` before including CLI11 to manually add support (or 0 to remove) for `boost::optional`. See [CLI11 Internals] for information on how this was done and how you can add your own converters.
171 171  
172 172 ### Example
173 173  
... ...
include/CLI/Optional.hpp
... ... @@ -12,37 +12,37 @@
12 12  
13 13 #if defined(CLI11_CPP17) && __has_include(<optional>) && \
14 14 defined(__cpp_lib_optional) && !defined(CLI11_STD_OPTIONAL)
15   -#define CLI11_STD_OPTIONAL
  15 +#define CLI11_STD_OPTIONAL 1
16 16 #endif
17 17  
18 18 #if defined(CLI11_CPP14) && __has_include(<experimental/optional>) && \
19 19 !defined(CLI11_EXPERIMENTAL_OPTIONAL)
20   -#define CLI11_EXPERIMENTAL_OPTIONAL
  20 +#define CLI11_EXPERIMENTAL_OPTIONAL 1
21 21 #endif
22 22  
23 23 #if __has_include(<boost/optional.hpp>) && !defined(CLI11_BOOST_OPTIONAL)
24 24 #include <boost/version.hpp>
25 25 #if BOOST_VERSION >= 105800
26   -#define CLI11_BOOST_OPTIONAL
  26 +#define CLI11_BOOST_OPTIONAL 1
27 27 #endif
28 28 #endif
29 29  
30 30 #endif
31 31  
32   -#ifdef CLI11_STD_OPTIONAL
  32 +#if CLI11_STD_OPTIONAL
33 33 #include <optional>
34 34 #endif
35   -#ifdef CLI11_EXPERIMENTAL_OPTIONAL
  35 +#if CLI11_EXPERIMENTAL_OPTIONAL
36 36 #include <experimental/optional>
37 37 #endif
38   -#ifdef CLI11_BOOST_OPTIONAL
  38 +#if CLI11_BOOST_OPTIONAL
39 39 #include <boost/optional.hpp>
40 40 #endif
41 41 // [CLI11:verbatim]
42 42  
43 43 namespace CLI {
44 44  
45   -#ifdef CLI11_STD_OPTIONAL
  45 +#if CLI11_STD_OPTIONAL
46 46 template <typename T> std::istream &operator>>(std::istream &in, std::optional<T> &val) {
47 47 T v;
48 48 in >> v;
... ... @@ -51,7 +51,7 @@ template &lt;typename T&gt; std::istream &amp;operator&gt;&gt;(std::istream &amp;in, std::optional&lt;T
51 51 }
52 52 #endif
53 53  
54   -#ifdef CLI11_EXPERIMENTAL_OPTIONAL
  54 +#if CLI11_EXPERIMENTAL_OPTIONAL
55 55 template <typename T> std::istream &operator>>(std::istream &in, std::experimental::optional<T> &val) {
56 56 T v;
57 57 in >> v;
... ... @@ -60,7 +60,7 @@ template &lt;typename T&gt; std::istream &amp;operator&gt;&gt;(std::istream &amp;in, std::experiment
60 60 }
61 61 #endif
62 62  
63   -#ifdef CLI11_BOOST_OPTIONAL
  63 +#if CLI11_BOOST_OPTIONAL
64 64 template <typename T> std::istream &operator>>(std::istream &in, boost::optional<T> &val) {
65 65 T v;
66 66 in >> v;
... ... @@ -70,17 +70,17 @@ template &lt;typename T&gt; std::istream &amp;operator&gt;&gt;(std::istream &amp;in, boost::optional
70 70 #endif
71 71  
72 72 // Export the best optional to the CLI namespace
73   -#if defined(CLI11_STD_OPTIONAL)
  73 +#if CLI11_STD_OPTIONAL
74 74 using std::optional;
75   -#elif defined(CLI11_EXPERIMENTAL_OPTIONAL)
  75 +#elif CLI11_EXPERIMENTAL_OPTIONAL
76 76 using std::experimental::optional;
77   -#elif defined(CLI11_BOOST_OPTIONAL)
  77 +#elif CLI11_BOOST_OPTIONAL
78 78 using boost::optional;
79 79 #endif
80 80  
81 81 // This is true if any optional is found
82   -#if defined(CLI11_STD_OPTIONAL) || defined(CLI11_EXPERIMENTAL_OPTIONAL) || defined(CLI11_BOOST_OPTIONAL)
83   -#define CLI11_OPTIONAL
  82 +#if CLI11_STD_OPTIONAL || CLI11_EXPERIMENTAL_OPTIONAL || CLI11_BOOST_OPTIONAL
  83 +#define CLI11_OPTIONAL 1
84 84 #endif
85 85  
86 86 } // namespace CLI
... ...
tests/OptionalTest.cpp
... ... @@ -3,7 +3,7 @@
3 3  
4 4 #include "app_helper.hpp"
5 5  
6   -#ifdef CLI11_STD_OPTIONAL
  6 +#if CLI11_STD_OPTIONAL
7 7  
8 8 TEST_F(TApp, StdOptionalTest) {
9 9 std::optional<int> opt;
... ... @@ -25,7 +25,7 @@ TEST_F(TApp, StdOptionalTest) {
25 25 }
26 26  
27 27 #endif
28   -#ifdef CLI11_EXPERIMENTAL_OPTIONAL
  28 +#if CLI11_EXPERIMENTAL_OPTIONAL
29 29  
30 30 TEST_F(TApp, ExperimentalOptionalTest) {
31 31 std::experimental::optional<int> opt;
... ... @@ -47,7 +47,7 @@ TEST_F(TApp, ExperimentalOptionalTest) {
47 47 }
48 48  
49 49 #endif
50   -#ifdef CLI11_BOOST_OPTIONAL
  50 +#if CLI11_BOOST_OPTIONAL
51 51  
52 52 TEST_F(TApp, BoostOptionalTest) {
53 53 boost::optional<int> opt;
... ... @@ -70,6 +70,6 @@ TEST_F(TApp, BoostOptionalTest) {
70 70  
71 71 #endif
72 72  
73   -#ifndef CLI11_OPTIONAL
  73 +#if !CLI11_OPTIONAL
74 74 TEST_F(TApp, DISABLED_OptionalTest) {}
75 75 #endif
... ...
tests/informational.cpp
... ... @@ -28,21 +28,21 @@ int main() {
28 28 std::cout << "no\n";
29 29 #endif
30 30  
31   -#ifdef CLI11_OPTIONAL
  31 +#if CLI11_OPTIONAL
32 32 std::cout << " [Available as CLI::optional]";
33 33 #else
34 34 std::cout << " No optional library found\n";
35 35 #endif
36 36  
37   -#ifdef CLI11_STD_OPTIONAL
  37 +#if CLI11_STD_OPTIONAL
38 38 std::cout << " std::optional support active\n";
39 39 #endif
40 40  
41   -#ifdef CLI11_EXPERIMENTAL_OPTIONAL
  41 +#if CLI11_EXPERIMENTAL_OPTIONAL
42 42 std::cout << " std::experimental::optional support active\n";
43 43 #endif
44 44  
45   -#ifdef CLI11_BOOST_OPTIONAL
  45 +#if CLI11_BOOST_OPTIONAL
46 46 std::cout << " boost::optional support active\n";
47 47 #endif
48 48  
... ...