в корутинах, но наткнулся на очень странное поведение кода. То ли я что-то делаю не так, то ли gcc глючит.
                  
                  
                  Вот сам код https://godbolt.org/z/aGr79MKGq
                  
                  
                  
                  
                  
                  Есть две корутины: fib и takeN. Я передаю fib как rvalue в takeN, и она должна жить во фрейме takeN. 
                  
                  
                  Потом в fib кидаю исключение прямо на первой строчке, которое перебрасываю в unhandle_exception промиса.
                  
                  
                  В результате деструктор её return-object вызывается два раза: один раз в fib, а второй раз в takeN. 
                  
                  
                  Вопрос, почему это  происходит и как правильно пропагировать исключения, если нельзя их перекидывать из unhandle_exception?
                  
                  
                
Сохранить исключение в promise, перебросить когда из промиса будут пытаться получить результат его работы.
 Stas
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Stas
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Да, так работает корректно. Спасибо
 Stas
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Stas
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Но думаю, что лучше всего кидаться после resume() корутины
Какой смысл делать resume на корутине после того как она вышла по исключению? Скорее всего это ub. Но я не уверен, что правильно понял мысль.
 Stas
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Stas
                          
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Неа, после resume, в котором было выкинуто исключение и перехвачено в unhandled_exception
Речь идет о генераторе? Там, наверное, может иметь смысл делать resume и кидать исключение на инкременте итератора, а значение возвращать при разыменовании. Но не уверен что я бы предпочел такое поведение.
Обсуждают сегодня