]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/yap/test/reference_returns.cpp
1 // Copyright (C) 2016-2018 T. Zachary Laine
3 // Distributed under the Boost Software License, Version 1.0. (See
4 // accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
6 #include <boost/yap/expression.hpp>
8 #include <boost/mpl/assert.hpp>
10 #include <boost/test/minimal.hpp>
14 using term
= boost::yap::terminal
<boost::yap::expression
, T
>;
16 namespace yap
= boost::yap
;
18 namespace reference_returning
{
26 number
const the_result
{13.0};
28 number
const & operator+(number a
, number b
) { return the_result
; }
30 number
& operator-(number a
, number b
) { return a_result
; }
33 int test_main(int, char * [])
36 term
<reference_returning::number
> unity
= {{1.0}};
37 auto plus_expr
= unity
+ reference_returning::number
{1.0};
40 reference_returning::number
const & n
= evaluate(plus_expr
);
41 BOOST_CHECK(&n
== &reference_returning::the_result
);
44 using plus_eval_type
= decltype(evaluate(plus_expr
));
45 BOOST_MPL_ASSERT((std::is_same
<
47 reference_returning::number
const &>));
49 auto minus_expr
= unity
- reference_returning::number
{1.0};
52 reference_returning::number
& n
= evaluate(minus_expr
);
53 BOOST_CHECK(&n
== &reference_returning::a_result
);
56 using minus_eval_type
= decltype(evaluate(minus_expr
));
57 BOOST_MPL_ASSERT((std::is_same
<
59 reference_returning::number
&>));
61 using namespace yap::literals
;
64 reference_returning::number
& n
=
65 evaluate(1_p
, reference_returning::a_result
);
66 BOOST_CHECK(&n
== &reference_returning::a_result
);
69 using a_eval_type
= decltype(evaluate(1_p
, reference_returning::a_result
));
73 reference_returning::number
&>));
76 reference_returning::number
const & n
=
77 evaluate(1_p
, reference_returning::the_result
);
78 BOOST_CHECK(&n
== &reference_returning::the_result
);
81 using the_eval_type
= decltype(evaluate(1_p
, reference_returning::the_result
));
85 reference_returning::number
const &>));