77#ifndef{{"_".join(config.protocol.namespace)}}_Maybe_h
88#define{{"_".join(config.protocol.namespace)}}_Maybe_h
99
10- // This macro allows to test for the version of the GNU C++ compiler.
11- // Note that this also applies to compilers that masquerade as GCC,
12- // for example clang and the Intel C++ compiler for Linux.
13- // Use like:
14- // #if IP_GNUC_PREREQ(4, 3, 1)
15- // ...
16- // #endif
17- #if defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
18- #define IP_GNUC_PREREQ(major, minor, patchlevel) \
19- ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= \
20- ((major)*10000 + (minor)*100 + (patchlevel)))
21- #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
22- #define IP_GNUC_PREREQ(major, minor, patchlevel) \
23- ((__GNUC__ * 10000 + __GNUC_MINOR__ * 100) >= \
24- ((major)*10000 + (minor)*100 + (patchlevel)))
25- #else
26- #define IP_GNUC_PREREQ(major, minor, patchlevel) 0
27- #endif
28-
29- #if defined(__mips64)
30- #define IP_TARGET_ARCH_MIPS64 1
31- #elif defined(__MIPSEB__) || defined(__MIPSEL__)
32- #define IP_TARGET_ARCH_MIPS 1
33- #endif
34-
35- // Allowing the use of noexcept by removing the keyword on older compilers that
36- // do not support adding noexcept to default members.
37- #if ((IP_GNUC_PREREQ(4, 9, 0) && !defined(IP_TARGET_ARCH_MIPS) && \
38- !defined(IP_TARGET_ARCH_MIPS64)) || \
39- (defined(__clang__) && __cplusplus > 201300L))
40- #define IP_NOEXCEPT noexcept
41- #else
42- #define IP_NOEXCEPT
43- #endif
44-
4510//#include "Forward.h"
4611
4712{% for namespace in config.protocol.namespace %}
@@ -53,7 +18,7 @@ class Maybe{
5318public:
5419 Maybe() : m_value(){}
5520 Maybe(std::unique_ptr<T> value) : m_value(std::move(value)){}
56- Maybe(Maybe&& other) IP_NOEXCEPT : m_value(std::move(other.m_value)){}
21+ Maybe(Maybe&& other) noexcept : m_value(std::move(other.m_value)){}
5722 void operator=(std::unique_ptr<T> value){m_value = std::move(value)}
5823 T* fromJust() const{DCHECK(m_value); return m_value.get()}
5924 T* fromMaybe(T* defaultValue) const{return m_value ? m_value.get() : defaultValue}
@@ -68,7 +33,7 @@ class MaybeBase{
6833public:
6934 MaybeBase() : m_isJust(false){}
7035 MaybeBase(T value) : m_isJust(true), m_value(value){}
71- MaybeBase(MaybeBase&& other) IP_NOEXCEPT
36+ MaybeBase(MaybeBase&& other) noexcept
7237 : m_isJust(other.m_isJust),
7338 m_value(std::move(other.m_value)){}
7439 void operator=(T value){m_value = value; m_isJust = true}
@@ -87,7 +52,7 @@ class Maybe<bool> : public MaybeBase<bool>{
8752public:
8853 Maybe(){m_value = false}
8954 Maybe(bool value) : MaybeBase(value){}
90- Maybe(Maybe&& other) IP_NOEXCEPT : MaybeBase(std::move(other)){}
55+ Maybe(Maybe&& other) noexcept : MaybeBase(std::move(other)){}
9156 using MaybeBase::operator=;
9257};
9358
@@ -96,7 +61,7 @@ class Maybe<int> : public MaybeBase<int>{
9661public:
9762 Maybe(){m_value = 0}
9863 Maybe(int value) : MaybeBase(value){}
99- Maybe(Maybe&& other) IP_NOEXCEPT : MaybeBase(std::move(other)){}
64+ Maybe(Maybe&& other) noexcept : MaybeBase(std::move(other)){}
10065 using MaybeBase::operator=;
10166};
10267
@@ -105,7 +70,7 @@ class Maybe<double> : public MaybeBase<double>{
10570public:
10671 Maybe(){m_value = 0}
10772 Maybe(double value) : MaybeBase(value){}
108- Maybe(Maybe&& other) IP_NOEXCEPT : MaybeBase(std::move(other)){}
73+ Maybe(Maybe&& other) noexcept : MaybeBase(std::move(other)){}
10974 using MaybeBase::operator=;
11075};
11176
@@ -114,7 +79,7 @@ class Maybe<String> : public MaybeBase<String>{
11479public:
11580 Maybe(){}
11681 Maybe(const String& value) : MaybeBase(value){}
117- Maybe(Maybe&& other) IP_NOEXCEPT : MaybeBase(std::move(other)){}
82+ Maybe(Maybe&& other) noexcept : MaybeBase(std::move(other)){}
11883 using MaybeBase::operator=;
11984};
12085
@@ -123,17 +88,12 @@ class Maybe<Binary> : public MaybeBase<Binary>{
12388public:
12489 Maybe(){}
12590 Maybe(Binary value) : MaybeBase(value){}
126- Maybe(Maybe&& other) IP_NOEXCEPT : MaybeBase(std::move(other)){}
91+ Maybe(Maybe&& other) noexcept : MaybeBase(std::move(other)){}
12792 using MaybeBase::operator=;
12893};
12994
13095{% for namespace in config.protocol.namespace %}
13196} // namespace{{namespace}}
13297{% endfor %}
13398
134- #undef IP_GNUC_PREREQ
135- #undef IP_TARGET_ARCH_MIPS64
136- #undef IP_TARGET_ARCH_MIPS
137- #undef IP_NOEXCEPT
138-
13999#endif // !defined({{"_".join(config.protocol.namespace)}}_Maybe_h)
0 commit comments