This commit is contained in:
Simon Brand
2018-08-30 08:43:09 +01:00
parent 5cb2aaa34e
commit 6a2bc3888f
2 changed files with 18 additions and 4 deletions

View File

@@ -68,4 +68,8 @@ struct i31{
TEST_CASE("Issue 31", "[issues.31]") {
const tl::expected<i31, int> a = i31{42};
a->i;
tl::expected< void, std::string > result;
tl::expected< void, std::string > result2 = result;
result2 = result;
}

View File

@@ -324,6 +324,16 @@ template <class T>
using is_move_constructible_or_void =
is_void_or<T, std::is_move_constructible<T>>;
template <class T>
using is_copy_assignable_or_void =
is_void_or<T, std::is_copy_assignable<T>>;
template <class T>
using is_move_assignable_or_void =
is_void_or<T, std::is_move_assignable<T>>;
} // namespace detail
/// \exclude
@@ -998,13 +1008,13 @@ struct expected_delete_ctor_base<T, E, false, false> {
// constructors depending on whether T and E are copy/move constructible +
// assignable
template <class T, class E,
bool EnableCopy = (std::is_copy_constructible<T>::value &&
bool EnableCopy = (is_copy_constructible_or_void<T>::value &&
std::is_copy_constructible<E>::value &&
std::is_copy_assignable<T>::value &&
is_copy_assignable_or_void<T>::value &&
std::is_copy_assignable<E>::value),
bool EnableMove = (std::is_move_constructible<T>::value &&
bool EnableMove = (is_move_constructible_or_void<T>::value &&
std::is_move_constructible<E>::value &&
std::is_move_assignable<T>::value &&
is_move_assignable_or_void<T>::value &&
std::is_move_assignable<E>::value)>
struct expected_delete_assign_base {
expected_delete_assign_base() = default;