[libcxx-commits] [libcxx] [libc++] Resolve LWG4308: `std::optional<T&>::iterator` can't be a contiguous iterator for some T (PR #173948)
A. Jiang via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Dec 29 22:24:08 PST 2025
================
@@ -19,6 +19,12 @@
#include <type_traits>
#include <utility>
+template <typename T>
+concept has_iterator = requires {
+ typename T::iterator;
+ typename T::const_iterator;
+};
+
----------------
frederick-vs-ja wrote:
I'd like to test that `optional<X&>` sometimes has neither `iterator` nor `const_iterator`, by using something like:
```C++
template <typename T>
concept has_no_iterator = !requires { typename T::iterator; } && !requires { typename T::const_iterator; };
```
https://github.com/llvm/llvm-project/pull/173948
More information about the libcxx-commits
mailing list