Coverage Report

Created: 2026-07-23 20:35

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/tmp/bitcoin/build/src/ipc/test/ipc_test.capnp.proxy.h
Line
Count
Source
1
// Generated by mpgen from /tmp/bitcoin/src/ipc/test/ipc_test.capnp
2
3
#ifndef TEST_IPC_TEST_CAPNP_PROXY_H
4
#define TEST_IPC_TEST_CAPNP_PROXY_H
5
6
#include <test/ipc_test.capnp.h> // IWYU pragma: keep
7
#include "ipc/test/ipc_test.h" // IWYU pragma: export
8
#include <mp/proxy.h>
9
10
#if defined(__GNUC__)
11
#pragma GCC diagnostic push
12
#if !defined(__has_warning)
13
#pragma GCC diagnostic ignored "-Wsuggest-override"
14
#elif __has_warning("-Wsuggest-override")
15
#pragma GCC diagnostic ignored "-Wsuggest-override"
16
#endif
17
#endif
18
namespace mp {
19
template<>
20
struct ProxyMethod<gen::FooInterface::AddParams>
21
{
22
    static constexpr auto impl = &FooImplementation::add;
23
};
24
25
template<>
26
struct ProxyMethod<gen::FooInterface::PassOutPointParams>
27
{
28
    static constexpr auto impl = &FooImplementation::passOutPoint;
29
};
30
31
template<>
32
struct ProxyMethod<gen::FooInterface::PassUniValueParams>
33
{
34
    static constexpr auto impl = &FooImplementation::passUniValue;
35
};
36
37
template<>
38
struct ProxyMethod<gen::FooInterface::PassTransactionParams>
39
{
40
    static constexpr auto impl = &FooImplementation::passTransaction;
41
};
42
43
template<>
44
struct ProxyMethod<gen::FooInterface::PassVectorCharParams>
45
{
46
    static constexpr auto impl = &FooImplementation::passVectorChar;
47
};
48
49
template<>
50
struct ProxyMethod<gen::FooInterface::PassScriptParams>
51
{
52
    static constexpr auto impl = &FooImplementation::passScript;
53
};
54
55
template<>
56
struct ProxyMethod<gen::FooInterface::PassTransactionsParams>
57
{
58
    static constexpr auto impl = &FooImplementation::passTransactions;
59
};
60
61
namespace ipc_test_fields {
62
struct A
63
{
64
1
    template<typename S> static auto get(S&& s) -> decltype(s.getA()) { return s.getA(); }
Unexecuted instantiation: decltype(fp.getA()) mp::ipc_test_fields::A::get<capnp::Request<gen::FooInterface::AddParams, gen::FooInterface::AddResults>&>(capnp::Request<gen::FooInterface::AddParams, gen::FooInterface::AddResults>&)
decltype(fp.getA()) mp::ipc_test_fields::A::get<gen::FooInterface::AddParams::Reader const&>(gen::FooInterface::AddParams::Reader const&)
Line
Count
Source
64
1
    template<typename S> static auto get(S&& s) -> decltype(s.getA()) { return s.getA(); }
Unexecuted instantiation: decltype(fp.getA()) mp::ipc_test_fields::A::get<gen::FooInterface::AddParams::Reader&>(gen::FooInterface::AddParams::Reader&)
65
    template<typename S> static bool has(S&& s) { return s.hasA(); }
66
1
    template<typename S, typename A> static void set(S&& s, A&& a) { s.setA(std::forward<A>(a)); }
67
    template<typename S, typename... A> static decltype(auto) init(S&& s, A&&... a) { return s.initA(std::forward<A>(a)...); }
68
    template<typename S> static bool getWant(S&& s) { return s.getWantA(); }
69
    template<typename S> static void setWant(S&& s) { s.setWantA(true); }
70
    template<typename S> static bool getHas(S&& s) { return s.getHasA(); }
71
    template<typename S> static void setHas(S&& s) { s.setHasA(true); }
72
};
73
struct B
74
{
75
1
    template<typename S> static auto get(S&& s) -> decltype(s.getB()) { return s.getB(); }
Unexecuted instantiation: decltype(fp.getB()) mp::ipc_test_fields::B::get<capnp::Request<gen::FooInterface::AddParams, gen::FooInterface::AddResults>&>(capnp::Request<gen::FooInterface::AddParams, gen::FooInterface::AddResults>&)
decltype(fp.getB()) mp::ipc_test_fields::B::get<gen::FooInterface::AddParams::Reader const&>(gen::FooInterface::AddParams::Reader const&)
Line
Count
Source
75
1
    template<typename S> static auto get(S&& s) -> decltype(s.getB()) { return s.getB(); }
Unexecuted instantiation: decltype(fp.getB()) mp::ipc_test_fields::B::get<gen::FooInterface::AddParams::Reader&>(gen::FooInterface::AddParams::Reader&)
76
    template<typename S> static bool has(S&& s) { return s.hasB(); }
77
1
    template<typename S, typename A> static void set(S&& s, A&& a) { s.setB(std::forward<A>(a)); }
78
    template<typename S, typename... A> static decltype(auto) init(S&& s, A&&... a) { return s.initB(std::forward<A>(a)...); }
79
    template<typename S> static bool getWant(S&& s) { return s.getWantB(); }
80
    template<typename S> static void setWant(S&& s) { s.setWantB(true); }
81
    template<typename S> static bool getHas(S&& s) { return s.getHasB(); }
82
    template<typename S> static void setHas(S&& s) { s.setHasB(true); }
83
};
84
struct Result
85
{
86
10
    template<typename S> static auto get(S&& s) -> decltype(s.getResult()) { return s.getResult(); }
decltype(fp.getResult()) mp::ipc_test_fields::Result::get<capnp::Response<gen::FooInterface::AddResults>&>(capnp::Response<gen::FooInterface::AddResults>&)
Line
Count
Source
86
1
    template<typename S> static auto get(S&& s) -> decltype(s.getResult()) { return s.getResult(); }
decltype(fp.getResult()) mp::ipc_test_fields::Result::get<capnp::Response<gen::FooInterface::PassOutPointResults>&>(capnp::Response<gen::FooInterface::PassOutPointResults>&)
Line
Count
Source
86
1
    template<typename S> static auto get(S&& s) -> decltype(s.getResult()) { return s.getResult(); }
decltype(fp.getResult()) mp::ipc_test_fields::Result::get<capnp::Response<gen::FooInterface::PassUniValueResults>&>(capnp::Response<gen::FooInterface::PassUniValueResults>&)
Line
Count
Source
86
1
    template<typename S> static auto get(S&& s) -> decltype(s.getResult()) { return s.getResult(); }
decltype(fp.getResult()) mp::ipc_test_fields::Result::get<capnp::Response<gen::FooInterface::PassTransactionResults>&>(capnp::Response<gen::FooInterface::PassTransactionResults>&)
Line
Count
Source
86
2
    template<typename S> static auto get(S&& s) -> decltype(s.getResult()) { return s.getResult(); }
decltype(fp.getResult()) mp::ipc_test_fields::Result::get<capnp::Response<gen::FooInterface::PassVectorCharResults>&>(capnp::Response<gen::FooInterface::PassVectorCharResults>&)
Line
Count
Source
86
2
    template<typename S> static auto get(S&& s) -> decltype(s.getResult()) { return s.getResult(); }
decltype(fp.getResult()) mp::ipc_test_fields::Result::get<capnp::Response<gen::FooInterface::PassScriptResults>&>(capnp::Response<gen::FooInterface::PassScriptResults>&)
Line
Count
Source
86
2
    template<typename S> static auto get(S&& s) -> decltype(s.getResult()) { return s.getResult(); }
decltype(fp.getResult()) mp::ipc_test_fields::Result::get<capnp::Response<gen::FooInterface::PassTransactionsResults>&>(capnp::Response<gen::FooInterface::PassTransactionsResults>&)
Line
Count
Source
86
1
    template<typename S> static auto get(S&& s) -> decltype(s.getResult()) { return s.getResult(); }
Unexecuted instantiation: decltype(fp.getResult()) mp::ipc_test_fields::Result::get<gen::FooInterface::AddResults::Builder&>(gen::FooInterface::AddResults::Builder&)
Unexecuted instantiation: decltype(fp.getResult()) mp::ipc_test_fields::Result::get<gen::FooInterface::PassOutPointResults::Builder&>(gen::FooInterface::PassOutPointResults::Builder&)
Unexecuted instantiation: decltype(fp.getResult()) mp::ipc_test_fields::Result::get<gen::FooInterface::PassUniValueResults::Builder&>(gen::FooInterface::PassUniValueResults::Builder&)
Unexecuted instantiation: decltype(fp.getResult()) mp::ipc_test_fields::Result::get<gen::FooInterface::PassTransactionResults::Builder&>(gen::FooInterface::PassTransactionResults::Builder&)
Unexecuted instantiation: decltype(fp.getResult()) mp::ipc_test_fields::Result::get<gen::FooInterface::PassVectorCharResults::Builder&>(gen::FooInterface::PassVectorCharResults::Builder&)
Unexecuted instantiation: decltype(fp.getResult()) mp::ipc_test_fields::Result::get<gen::FooInterface::PassScriptResults::Builder&>(gen::FooInterface::PassScriptResults::Builder&)
Unexecuted instantiation: decltype(fp.getResult()) mp::ipc_test_fields::Result::get<gen::FooInterface::PassTransactionsResults::Builder&>(gen::FooInterface::PassTransactionsResults::Builder&)
87
2
    template<typename S> static bool has(S&& s) { return s.hasResult(); }
bool mp::ipc_test_fields::Result::has<capnp::Response<gen::FooInterface::PassOutPointResults>&>(capnp::Response<gen::FooInterface::PassOutPointResults>&)
Line
Count
Source
87
1
    template<typename S> static bool has(S&& s) { return s.hasResult(); }
bool mp::ipc_test_fields::Result::has<capnp::Response<gen::FooInterface::PassTransactionResults>&>(capnp::Response<gen::FooInterface::PassTransactionResults>&)
Line
Count
Source
87
1
    template<typename S> static bool has(S&& s) { return s.hasResult(); }
88
1
    template<typename S, typename A> static void set(S&& s, A&& a) { s.setResult(std::forward<A>(a)); }
89
6
    template<typename S, typename... A> static decltype(auto) init(S&& s, A&&... a) { return s.initResult(std::forward<A>(a)...); }
decltype(auto) mp::ipc_test_fields::Result::init<gen::FooInterface::PassOutPointResults::Builder&, unsigned long>(gen::FooInterface::PassOutPointResults::Builder&, unsigned long&&)
Line
Count
Source
89
1
    template<typename S, typename... A> static decltype(auto) init(S&& s, A&&... a) { return s.initResult(std::forward<A>(a)...); }
decltype(auto) mp::ipc_test_fields::Result::init<gen::FooInterface::PassUniValueResults::Builder&, unsigned long>(gen::FooInterface::PassUniValueResults::Builder&, unsigned long&&)
Line
Count
Source
89
1
    template<typename S, typename... A> static decltype(auto) init(S&& s, A&&... a) { return s.initResult(std::forward<A>(a)...); }
decltype(auto) mp::ipc_test_fields::Result::init<gen::FooInterface::PassTransactionResults::Builder&, unsigned long>(gen::FooInterface::PassTransactionResults::Builder&, unsigned long&&)
Line
Count
Source
89
1
    template<typename S, typename... A> static decltype(auto) init(S&& s, A&&... a) { return s.initResult(std::forward<A>(a)...); }
decltype(auto) mp::ipc_test_fields::Result::init<gen::FooInterface::PassVectorCharResults::Builder&, unsigned long>(gen::FooInterface::PassVectorCharResults::Builder&, unsigned long&&)
Line
Count
Source
89
1
    template<typename S, typename... A> static decltype(auto) init(S&& s, A&&... a) { return s.initResult(std::forward<A>(a)...); }
decltype(auto) mp::ipc_test_fields::Result::init<gen::FooInterface::PassScriptResults::Builder&, unsigned long>(gen::FooInterface::PassScriptResults::Builder&, unsigned long&&)
Line
Count
Source
89
1
    template<typename S, typename... A> static decltype(auto) init(S&& s, A&&... a) { return s.initResult(std::forward<A>(a)...); }
decltype(auto) mp::ipc_test_fields::Result::init<gen::FooInterface::PassTransactionsResults::Builder&, unsigned long>(gen::FooInterface::PassTransactionsResults::Builder&, unsigned long&&)
Line
Count
Source
89
1
    template<typename S, typename... A> static decltype(auto) init(S&& s, A&&... a) { return s.initResult(std::forward<A>(a)...); }
90
    template<typename S> static bool getWant(S&& s) { return s.getWantResult(); }
91
    template<typename S> static void setWant(S&& s) { s.setWantResult(true); }
92
    template<typename S> static bool getHas(S&& s) { return s.getHasResult(); }
93
    template<typename S> static void setHas(S&& s) { s.setHasResult(true); }
94
};
95
struct Arg
96
{
97
9
    template<typename S> static auto get(S&& s) -> decltype(s.getArg()) { return s.getArg(); }
Unexecuted instantiation: decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<capnp::Request<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults>&>(capnp::Request<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults>&)
Unexecuted instantiation: decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<capnp::Request<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults>&>(capnp::Request<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults>&)
Unexecuted instantiation: decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<capnp::Request<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults>&>(capnp::Request<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults>&)
Unexecuted instantiation: decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<capnp::Request<gen::FooInterface::PassVectorCharParams, gen::FooInterface::PassVectorCharResults>&>(capnp::Request<gen::FooInterface::PassVectorCharParams, gen::FooInterface::PassVectorCharResults>&)
Unexecuted instantiation: decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<capnp::Request<gen::FooInterface::PassScriptParams, gen::FooInterface::PassScriptResults>&>(capnp::Request<gen::FooInterface::PassScriptParams, gen::FooInterface::PassScriptResults>&)
Unexecuted instantiation: decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<capnp::Request<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>&>(capnp::Request<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>&)
decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<gen::FooInterface::PassOutPointParams::Reader const&>(gen::FooInterface::PassOutPointParams::Reader const&)
Line
Count
Source
97
1
    template<typename S> static auto get(S&& s) -> decltype(s.getArg()) { return s.getArg(); }
decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<gen::FooInterface::PassUniValueParams::Reader const&>(gen::FooInterface::PassUniValueParams::Reader const&)
Line
Count
Source
97
1
    template<typename S> static auto get(S&& s) -> decltype(s.getArg()) { return s.getArg(); }
decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<gen::FooInterface::PassTransactionParams::Reader const&>(gen::FooInterface::PassTransactionParams::Reader const&)
Line
Count
Source
97
2
    template<typename S> static auto get(S&& s) -> decltype(s.getArg()) { return s.getArg(); }
decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<gen::FooInterface::PassVectorCharParams::Reader const&>(gen::FooInterface::PassVectorCharParams::Reader const&)
Line
Count
Source
97
2
    template<typename S> static auto get(S&& s) -> decltype(s.getArg()) { return s.getArg(); }
decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<gen::FooInterface::PassScriptParams::Reader const&>(gen::FooInterface::PassScriptParams::Reader const&)
Line
Count
Source
97
2
    template<typename S> static auto get(S&& s) -> decltype(s.getArg()) { return s.getArg(); }
decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<gen::FooInterface::PassTransactionsParams::Reader const&>(gen::FooInterface::PassTransactionsParams::Reader const&)
Line
Count
Source
97
1
    template<typename S> static auto get(S&& s) -> decltype(s.getArg()) { return s.getArg(); }
Unexecuted instantiation: decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<gen::FooInterface::PassOutPointParams::Reader&>(gen::FooInterface::PassOutPointParams::Reader&)
Unexecuted instantiation: decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<gen::FooInterface::PassUniValueParams::Reader&>(gen::FooInterface::PassUniValueParams::Reader&)
Unexecuted instantiation: decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<gen::FooInterface::PassTransactionParams::Reader&>(gen::FooInterface::PassTransactionParams::Reader&)
Unexecuted instantiation: decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<gen::FooInterface::PassVectorCharParams::Reader&>(gen::FooInterface::PassVectorCharParams::Reader&)
Unexecuted instantiation: decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<gen::FooInterface::PassScriptParams::Reader&>(gen::FooInterface::PassScriptParams::Reader&)
Unexecuted instantiation: decltype(fp.getArg()) mp::ipc_test_fields::Arg::get<gen::FooInterface::PassTransactionsParams::Reader&>(gen::FooInterface::PassTransactionsParams::Reader&)
98
2
    template<typename S> static bool has(S&& s) { return s.hasArg(); }
bool mp::ipc_test_fields::Arg::has<gen::FooInterface::PassOutPointParams::Reader const&>(gen::FooInterface::PassOutPointParams::Reader const&)
Line
Count
Source
98
1
    template<typename S> static bool has(S&& s) { return s.hasArg(); }
bool mp::ipc_test_fields::Arg::has<gen::FooInterface::PassTransactionParams::Reader const&>(gen::FooInterface::PassTransactionParams::Reader const&)
Line
Count
Source
98
1
    template<typename S> static bool has(S&& s) { return s.hasArg(); }
99
    template<typename S, typename A> static void set(S&& s, A&& a) { s.setArg(std::forward<A>(a)); }
100
6
    template<typename S, typename... A> static decltype(auto) init(S&& s, A&&... a) { return s.initArg(std::forward<A>(a)...); }
decltype(auto) mp::ipc_test_fields::Arg::init<capnp::Request<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults>&, unsigned long>(capnp::Request<gen::FooInterface::PassOutPointParams, gen::FooInterface::PassOutPointResults>&, unsigned long&&)
Line
Count
Source
100
1
    template<typename S, typename... A> static decltype(auto) init(S&& s, A&&... a) { return s.initArg(std::forward<A>(a)...); }
decltype(auto) mp::ipc_test_fields::Arg::init<capnp::Request<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults>&, unsigned long>(capnp::Request<gen::FooInterface::PassUniValueParams, gen::FooInterface::PassUniValueResults>&, unsigned long&&)
Line
Count
Source
100
1
    template<typename S, typename... A> static decltype(auto) init(S&& s, A&&... a) { return s.initArg(std::forward<A>(a)...); }
decltype(auto) mp::ipc_test_fields::Arg::init<capnp::Request<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults>&, unsigned long>(capnp::Request<gen::FooInterface::PassTransactionParams, gen::FooInterface::PassTransactionResults>&, unsigned long&&)
Line
Count
Source
100
1
    template<typename S, typename... A> static decltype(auto) init(S&& s, A&&... a) { return s.initArg(std::forward<A>(a)...); }
decltype(auto) mp::ipc_test_fields::Arg::init<capnp::Request<gen::FooInterface::PassVectorCharParams, gen::FooInterface::PassVectorCharResults>&, unsigned long>(capnp::Request<gen::FooInterface::PassVectorCharParams, gen::FooInterface::PassVectorCharResults>&, unsigned long&&)
Line
Count
Source
100
1
    template<typename S, typename... A> static decltype(auto) init(S&& s, A&&... a) { return s.initArg(std::forward<A>(a)...); }
decltype(auto) mp::ipc_test_fields::Arg::init<capnp::Request<gen::FooInterface::PassScriptParams, gen::FooInterface::PassScriptResults>&, unsigned long>(capnp::Request<gen::FooInterface::PassScriptParams, gen::FooInterface::PassScriptResults>&, unsigned long&&)
Line
Count
Source
100
1
    template<typename S, typename... A> static decltype(auto) init(S&& s, A&&... a) { return s.initArg(std::forward<A>(a)...); }
decltype(auto) mp::ipc_test_fields::Arg::init<capnp::Request<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>&, unsigned long>(capnp::Request<gen::FooInterface::PassTransactionsParams, gen::FooInterface::PassTransactionsResults>&, unsigned long&&)
Line
Count
Source
100
1
    template<typename S, typename... A> static decltype(auto) init(S&& s, A&&... a) { return s.initArg(std::forward<A>(a)...); }
101
    template<typename S> static bool getWant(S&& s) { return s.getWantArg(); }
102
    template<typename S> static void setWant(S&& s) { s.setWantArg(true); }
103
    template<typename S> static bool getHas(S&& s) { return s.getHasArg(); }
104
    template<typename S> static void setHas(S&& s) { s.setHasArg(true); }
105
};
106
} // namespace ipc_test_fields
107
108
template<>
109
struct ProxyClient<gen::FooInterface> final : public ProxyClientCustom<gen::FooInterface, FooImplementation>
110
{
111
public:
112
    using ProxyClientCustom::ProxyClientCustom;
113
    ~ProxyClient();
114
    using M0 = ProxyClientMethodTraits<gen::FooInterface::AddParams>;
115
    typename M0::Result add(M0::Param<0> a,M0::Param<1> b);
116
    using M1 = ProxyClientMethodTraits<gen::FooInterface::PassOutPointParams>;
117
    typename M1::Result passOutPoint(M1::Param<0> arg);
118
    using M2 = ProxyClientMethodTraits<gen::FooInterface::PassUniValueParams>;
119
    typename M2::Result passUniValue(M2::Param<0> arg);
120
    using M3 = ProxyClientMethodTraits<gen::FooInterface::PassTransactionParams>;
121
    typename M3::Result passTransaction(M3::Param<0> arg);
122
    using M4 = ProxyClientMethodTraits<gen::FooInterface::PassVectorCharParams>;
123
    typename M4::Result passVectorChar(M4::Param<0> arg);
124
    using M5 = ProxyClientMethodTraits<gen::FooInterface::PassScriptParams>;
125
    typename M5::Result passScript(M5::Param<0> arg);
126
    using M6 = ProxyClientMethodTraits<gen::FooInterface::PassTransactionsParams>;
127
    typename M6::Result passTransactions(M6::Param<0> arg);
128
};
129
130
template<>
131
struct ProxyServer<gen::FooInterface> : public ProxyServerCustom<gen::FooInterface, FooImplementation>
132
{
133
public:
134
    using ProxyServerCustom::ProxyServerCustom;
135
    ~ProxyServer();
136
    kj::Promise<void> add(AddContext call_context) override;
137
    kj::Promise<void> passOutPoint(PassOutPointContext call_context) override;
138
    kj::Promise<void> passUniValue(PassUniValueContext call_context) override;
139
    kj::Promise<void> passTransaction(PassTransactionContext call_context) override;
140
    kj::Promise<void> passVectorChar(PassVectorCharContext call_context) override;
141
    kj::Promise<void> passScript(PassScriptContext call_context) override;
142
    kj::Promise<void> passTransactions(PassTransactionsContext call_context) override;
143
};
144
145
template<>
146
struct ProxyType<FooImplementation>
147
{
148
    using Type = FooImplementation;
149
    using Message = gen::FooInterface;
150
    using Client = ProxyClient<Message>;
151
    using Server = ProxyServer<Message>;
152
};
153
} // namespace mp
154
#if defined(__GNUC__)
155
#pragma GCC diagnostic pop
156
#endif
157
#endif