[libcxx-commits] [PATCH] D154110: [libc++] Implement LWG3843 (std::expected<T, E>::value() & assumes E is copy constructible)
Louis Dionne via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Wed Jul 5 14:23:06 PDT 2023
ldionne added inline comments.
================
Comment at: libcxx/test/std/utilities/expected/expected.expected/observers/value.pass.cpp:23-39
+template <typename E>
+concept has_value =
+ requires(E&& e) {
+ { std::forward<E>(e).value() };
+ };
+
+struct OnlyCopyConstructibleErrorType {
----------------
I don't think this tests what you intend to test. If you remove `as_const` in the `&` overload, does this test suddenly fail? I don't think it would, since you're still providing the declaration of the member function.
Instead, I think what you want is this:
```
bool ref_called = true;
bool const_ref_called = true;
struct Foo {
Foo(Foo const&) { const_ref_called = true; }
Foo(Foo&) { ref_called = true; }
};
int main() {
std::expected<int, Foo> e;
try {
e.value();
catch (std::bad_expected_access const&) {
assert(const_ref_called);
}
}
```
Obviously this is a poor way to test this, but I think you see the point I'm trying to make?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D154110/new/
https://reviews.llvm.org/D154110
More information about the libcxx-commits
mailing list