return *this;
}
- template <typename U = A>
- typename std::enable_if <
- !std::is_same<typename std::decay<U>::type, Optional<A>>::value &&
- std::is_constructible<A, U>::value &&
- std::is_assignable<A &, U>::value &&
- (!std::is_scalar<A>::value || !std::is_same<typename std::decay<U>, A>::value)
- , Optional & >::type operator = (U && a)
+ template < class U, class = typename std::enable_if
+ <
+ std::is_same<typename std::remove_reference<U>::type, A>::value &&
+ std::is_constructible<A, U>::value &&
+ std::is_assignable<A &, U>::value
+ >::type
+ > Optional & operator = (U && a)
{
if (hasValue)
place = std::forward<U>(a);