Skip to content

Commit ccffb06

Browse files
committed
fn
1 parent cea8b3d commit ccffb06

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

libcxx/include/__algorithm/generate.h

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
#include <__algorithm/for_each.h>
1313
#include <__config>
14-
#include <__iterator/iterator_traits.h>
1514
#include <__utility/forward.h>
1615

1716
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -20,11 +19,22 @@
2019

2120
_LIBCPP_BEGIN_NAMESPACE_STD
2221

22+
template <typename _Generator>
23+
struct __fn {
24+
__fn(_Generator& __g) : __gen(__g) {}
25+
26+
template <typename _Tp>
27+
void operator()(_Tp&& __element) const {
28+
std::forward<_Tp>(__element) = __gen();
29+
}
30+
31+
_Generator& __gen;
32+
};
33+
2334
template <class _ForwardIterator, class _Generator>
2435
inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void
2536
generate(_ForwardIterator __first, _ForwardIterator __last, _Generator __gen) {
26-
typedef typename std::iterator_traits<_ForwardIterator>::value_type value_type;
27-
std::for_each(__first, __last, [&](value_type&& __element) { std::forward<value_type>(__element) = __gen(); });
37+
std::for_each(__first, __last, __fn<_Generator>(__gen));
2838
}
2939

3040
_LIBCPP_END_NAMESPACE_STD

0 commit comments

Comments
 (0)