1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
/*=============================================================================
Copyright (c) 2017 Paul Fultz II
returns.cpp
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
==============================================================================*/
#include <boost/hof/returns.hpp>
#include "test.hpp"
#if !defined (__GNUC__) || defined (__clang__)
struct add_1
{
int a;
add_1() : a(1) {}
BOOST_HOF_RETURNS_CLASS(add_1);
template<class T>
auto operator()(T x) const
BOOST_HOF_RETURNS(x+BOOST_HOF_CONST_THIS->a);
};
BOOST_HOF_TEST_CASE()
{
BOOST_HOF_TEST_CHECK(3 == add_1()(2));
}
#endif
// TODO: check noexcept
struct id
{
template<class T>
constexpr auto operator()(T x) const BOOST_HOF_RETURNS
(x);
};
BOOST_HOF_TEST_CASE()
{
BOOST_HOF_TEST_CHECK(id{}(3) == 3);
BOOST_HOF_STATIC_TEST_CHECK(id{}(3) == 3);
}
struct void_ {};
constexpr void_ no_op() { return void_{}; }
struct id_comma
{
template<class T>
constexpr auto operator()(T&& x) const BOOST_HOF_RETURNS
(no_op(), boost::hof::forward<T>(x));
};
BOOST_HOF_TEST_CASE()
{
BOOST_HOF_TEST_CHECK(id_comma{}(3) == 3);
BOOST_HOF_STATIC_TEST_CHECK(id_comma{}(3) == 3);
}
|