File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -34,9 +34,9 @@ namespace cppcoro
3434 constexpr std::experimental::suspend_always final_suspend () const { return {}; }
3535
3636 template <
37- typename U,
38- typename = std::enable_if_t <std::is_same<U, T >::value> >
39- std::experimental::suspend_always yield_value (U & value) noexcept
37+ typename U = T ,
38+ std::enable_if_t <! std::is_lvalue_reference<U >::value, int > = 0 >
39+ std::experimental::suspend_always yield_value (T & value) noexcept
4040 {
4141 m_value = std::addressof (value);
4242 return {};
Original file line number Diff line number Diff line change @@ -60,6 +60,31 @@ TEST_CASE("generator of reference returns by reference")
6060 CHECK (value == 2 .0f );
6161}
6262
63+ TEST_CASE (" generator of const type" )
64+ {
65+ auto fib = []() -> generator<const std::uint64_t >
66+ {
67+ std::uint64_t a = 0 , b = 1 ;
68+ while (true )
69+ {
70+ co_yield b;
71+ b += std::exchange (a, b);
72+ }
73+ };
74+
75+ std::uint64_t count = 0 ;
76+ for (auto i : fib ())
77+ {
78+ if (i > 1'000'000 ) {
79+ break ;
80+ }
81+ ++count;
82+ }
83+
84+ // 30th fib number is 832'040
85+ CHECK (count == 30 );
86+ }
87+
6388TEST_CASE (" generator doesn't start until its called" )
6489{
6590 bool reachedA = false ;
You can’t perform that action at this time.
0 commit comments