* initializing `short`s with `short`s instead of `int`s to avoid narrowing warnings
* Explicitly discard the result of `value` calls to avoid `[[nodiscard]]` warnings
Drive-by: `testException` from `value` test is duplicated in `value_or` test; remove the duplicate.
Differential Review: https://reviews.llvm.org/D141108
// multi args
{
- std::expected<std::tuple<int, short, MoveOnly>, int> e(std::in_place, 1, 2, MoveOnly(3));
+ std::expected<std::tuple<int, short, MoveOnly>, int> e(std::in_place, 1, short{2}, MoveOnly(3));
assert(e.has_value());
- assert((e.value() == std::tuple<int, short, MoveOnly>(1, 2, MoveOnly(3))));
+ assert((e.value() == std::tuple<int, short, MoveOnly>(1, short{2}, MoveOnly(3))));
}
return true;
// multi args
{
- std::expected<int, std::tuple<int, short, MoveOnly>> e(std::unexpect, 1, 2, MoveOnly(3));
+ std::expected<int, std::tuple<int, short, MoveOnly>> e(std::unexpect, 1, short{2}, MoveOnly(3));
assert(!e.has_value());
- assert((e.error() == std::tuple<int, short, MoveOnly>(1, 2, MoveOnly(3))));
+ assert((e.error() == std::tuple<int, short, MoveOnly>(1, short{2}, MoveOnly(3))));
}
return true;
{
const std::expected<int, int> e(std::unexpect, 5);
try {
- e.value();
+ (void) e.value();
assert(false);
} catch (const std::bad_expected_access<int>& ex) {
assert(ex.error() == 5);
{
std::expected<int, MoveOnly> e(std::unexpect, 5);
try {
- std::move(e).value();
+ (void) std::move(e).value();
assert(false);
} catch (const std::bad_expected_access<MoveOnly>& ex) {
assert(ex.error() == 5);
return true;
}
-void testException() {
-#ifndef TEST_HAS_NO_EXCEPTIONS
-
- // int
- {
- const std::expected<int, int> e(std::unexpect, 5);
- try {
- e.value();
- assert(false);
- } catch (const std::bad_expected_access<int>& ex) {
- assert(ex.error() == 5);
- }
- }
-
- // MoveOnly
- {
- std::expected<int, MoveOnly> e(std::unexpect, 5);
- try {
- std::move(e).value();
- assert(false);
- } catch (const std::bad_expected_access<MoveOnly>& ex) {
- assert(ex.error() == 5);
- }
- }
-
-#endif // TEST_HAS_NO_EXCEPTIONS
-}
-
int main(int, char**) {
test();
static_assert(test());
- testException();
return 0;
}
// multi args
{
- std::expected<void, std::tuple<int, short, MoveOnly>> e(std::unexpect, 1, 2, MoveOnly(3));
+ std::expected<void, std::tuple<int, short, MoveOnly>> e(std::unexpect, 1, short{2}, MoveOnly(3));
assert(!e.has_value());
- assert((e.error() == std::tuple<int, short, MoveOnly>(1, 2, MoveOnly(3))));
+ assert((e.error() == std::tuple<int, short, MoveOnly>(1, short{2}, MoveOnly(3))));
}
return true;