14 #ifndef BOOST_RANGE_DETAIL_DEFAULT_CONSTRUCTIBLE_UNARY_FN_HPP_INCLUDED 15 #define BOOST_RANGE_DETAIL_DEFAULT_CONSTRUCTIBLE_UNARY_FN_HPP_INCLUDED 19 #include <boost/mpl/if.hpp> 20 #include <boost/optional/optional.hpp> 21 #include <boost/type_traits/has_trivial_constructor.hpp> 24 namespace range_detail {
26 template <
typename F,
typename R>
36 : m_impl(source.m_impl) {}
41 m_impl.emplace(*source.m_impl);
47 template <
typename Arg>
50 return (*m_impl)(std::forward<Arg>(arg));
54 boost::optional<F> m_impl;
57 template <
typename F,
typename R>
59 typedef typename boost::mpl::if_<
60 boost::has_trivial_default_constructor<F>,
68 #endif // include guard Definition: default_constructible_unary_fn.hpp:23
Definition: default_constructible_unary_fn.hpp:58
default_constructible_unary_fn_wrapper(const F &source)
Definition: default_constructible_unary_fn.hpp:32
default_constructible_unary_fn_wrapper()
Definition: default_constructible_unary_fn.hpp:31
R operator()(Arg &&arg) const
Definition: default_constructible_unary_fn.hpp:48
boost::mpl::if_< boost::has_trivial_default_constructor< F >, F, default_constructible_unary_fn_wrapper< F, R > >::type type
Definition: default_constructible_unary_fn.hpp:62
R result_type
Definition: default_constructible_unary_fn.hpp:29
default_constructible_unary_fn_wrapper & operator=(const default_constructible_unary_fn_wrapper &source)
Definition: default_constructible_unary_fn.hpp:37
Definition: default_constructible_unary_fn.hpp:27
default_constructible_unary_fn_wrapper(const default_constructible_unary_fn_wrapper &source)
Definition: default_constructible_unary_fn.hpp:34