: m_impl(source)
{
}
+ default_constructible_unary_fn_wrapper(const default_constructible_unary_fn_wrapper& source)
+ : m_impl(source.m_impl)
+ {
+ }
+ default_constructible_unary_fn_wrapper& operator=(const default_constructible_unary_fn_wrapper& source)
+ {
+ if (source.m_impl)
+ {
+ // Lambda are not copy/move assignable.
+ m_impl.emplace(*source.m_impl);
+ }
+ else
+ {
+ m_impl.reset();
+ }
+ return *this;
+ }
template<typename Arg>
R operator()(const Arg& arg) const
{