cprover
Loading...
Searching...
No Matches
optional.h
Go to the documentation of this file.
1/*******************************************************************\
2
3Module: typedef for optional class template. To be replaced with
4 std::optional once C++17 support is enabled
5
6Author: Diffblue Ltd.
7
8\*******************************************************************/
9
10#ifndef CPROVER_UTIL_OPTIONAL_H
11#define CPROVER_UTIL_OPTIONAL_H
12
13#if defined __clang__
14 #pragma clang diagnostic push ignore "-Wall"
15 #pragma clang diagnostic push ignore "-Wpedantic"
16#elif defined __GNUC__
17 #pragma GCC diagnostic push ignore "-Wall"
18 #pragma GCC diagnostic push ignore "-Wpedantic"
19#elif defined _MSC_VER
20 #pragma warning(push)
21#endif
22#include <nonstd/optional.hpp>
23#if defined __clang__
24 #pragma clang diagnostic pop
25 #pragma clang diagnostic pop
26#elif defined __GNUC__
27 #pragma GCC diagnostic pop
28 #pragma GCC diagnostic pop
29#elif defined _MSC_VER
30 #pragma warning(pop)
31#endif
32
33// Swap for std::optional when switching to C++17
34template<typename T>
35using optionalt=nonstd::optional<T>; // NOLINT template typedef
36
37typedef nonstd::bad_optional_access bad_optional_accesst;
38
39using nonstd::nullopt;
40
43template <typename T>
45{
46 PRECONDITION(opt.has_value());
47 return opt.value();
48}
49
51template <typename T>
53{
54 PRECONDITION(opt.has_value());
55 return opt.value();
56}
57
58#endif // CPROVER_UTIL_OPTIONAL_H
ait supplies three of the four components needed: an abstract interpreter (in this case handling func...
Definition ai.h:563
T & get_value_or_abort(optionalt< T > &opt)
Similar to optionalt::value but in case of empty optional, generates an invariant failure instead of ...
Definition optional.h:44
nonstd::bad_optional_access bad_optional_accesst
Definition optional.h:37
nonstd::optional< T > optionalt
Definition optional.h:35
#define PRECONDITION(CONDITION)
Definition invariant.h:463