File tree 7 files changed +31
-10
lines changed
7 files changed +31
-10
lines changed Original file line number Diff line number Diff line change 1874
1874
<ClInclude Include =" ql\utilities\observablevalue.hpp" />
1875
1875
<ClInclude Include =" ql\utilities\steppingiterator.hpp" />
1876
1876
<ClInclude Include =" ql\utilities\tracing.hpp" />
1877
+ <ClInclude Include =" ql\utilities\variants.hpp" />
1877
1878
<ClInclude Include =" ql\utilities\vectors.hpp" />
1878
1879
<ClInclude Include =" ql\any.hpp" />
1879
1880
<ClInclude Include =" ql\auto_link.hpp" />
Original file line number Diff line number Diff line change 2286
2286
<ClInclude Include =" ql\utilities\tracing.hpp" >
2287
2287
<Filter >utilities</Filter >
2288
2288
</ClInclude >
2289
+ <ClInclude Include =" ql\utilities\variants.hpp" >
2290
+ <Filter >utilities</Filter >
2291
+ </ClInclude >
2289
2292
<ClInclude Include =" ql\utilities\vectors.hpp" >
2290
2293
<Filter >utilities</Filter >
2291
2294
</ClInclude >
Original file line number Diff line number Diff line change @@ -2241,6 +2241,7 @@ set(QL_HEADERS
2241
2241
utilities/observablevalue.hpp
2242
2242
utilities/steppingiterator.hpp
2243
2243
utilities/tracing.hpp
2244
+ utilities/variants.hpp
2244
2245
utilities/vectors.hpp
2245
2246
version .hpp
2246
2247
volatilitymodel.hpp
Original file line number Diff line number Diff line change 20
20
#include < ql/quote.hpp>
21
21
#include < ql/quotes/simplequote.hpp>
22
22
#include < ql/errors.hpp>
23
+ #include < ql/utilities/variants.hpp>
23
24
24
25
namespace QuantLib {
25
26
26
27
Handle <Quote> handleFromVariant (const std::variant<Real, Handle <Quote>>& value) {
27
28
return std::visit (
28
- [](const auto & x) -> Handle <Quote> {
29
- using T = std::decay_t <decltype (x)>;
30
- if constexpr (std::is_same_v<T, Real>) {
31
- return makeQuoteHandle (x);
32
- } else if constexpr (std::is_same_v<T, Handle <Quote>>) {
33
- return x;
34
- } else {
35
- QL_FAIL (" Unexpected type in quote variant" );
36
- }
29
+ detail::variant_visitor{
30
+ [](Real x) -> Handle <Quote> { return makeQuoteHandle (x); },
31
+ [](const Handle <Quote>& x) { return x; }
37
32
},
38
33
value);
39
34
}
Original file line number Diff line number Diff line change @@ -8,10 +8,11 @@ this_include_HEADERS = \
8
8
dataformatters.hpp \
9
9
dataparsers.hpp \
10
10
null.hpp \
11
- null_deleter.hpp \
11
+ null_deleter.hpp \
12
12
observablevalue.hpp \
13
13
steppingiterator.hpp \
14
14
tracing.hpp \
15
+ variants.hpp \
15
16
vectors.hpp
16
17
17
18
cpp_files = \
Original file line number Diff line number Diff line change 9
9
#include < ql/utilities/observablevalue.hpp>
10
10
#include < ql/utilities/steppingiterator.hpp>
11
11
#include < ql/utilities/tracing.hpp>
12
+ #include < ql/utilities/variants.hpp>
12
13
#include < ql/utilities/vectors.hpp>
13
14
Original file line number Diff line number Diff line change
1
+ /* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
+
3
+ #ifndef quantlib_utilities_variants_hpp
4
+ #define quantlib_utilities_variants_hpp
5
+
6
+ namespace QuantLib ::detail {
7
+
8
+ // Helper type for use with std::visit.
9
+ template <class ... Ts>
10
+ struct variant_visitor : Ts... {
11
+ using Ts::operator ()...;
12
+ };
13
+
14
+ template <class ... Ts>
15
+ variant_visitor (Ts...) -> variant_visitor<Ts...>;
16
+
17
+ }
18
+
19
+ #endif
You can’t perform that action at this time.
0 commit comments