быть использован в другой функции которая никогда не вызывается?
                  
                  
                
Тут сильнее набросили, у людей оказывается бывают функторы с разными const() и () а через function нельзя вызвать const()
 Dmitry
                          Sokolov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Dmitry
                          Sokolov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Да, это изначальная хрень в std function. Я в своей реализации сохраняю const
наоборот можно всегда
 Dmitry
                          Sokolov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Dmitry
                          Sokolov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Да, проблема что можно всегда
А вроде можно, не? Только другой тип надо указать
 Dmitry
                          Sokolov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Dmitry
                          Sokolov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Там оператор const хотя callable может быть mutable. То есть const независимо от сигнатуры () или () const.
в общем походу я из этой дискуссии ничего не понял, впрочем и читал по диагонали, так забью пока на это
 Dmitry
                          Sokolov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Dmitry
                          Sokolov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Помнятся претензии что это приводит к тому что вызов const метода function нарушает std гарантии отсутствия гонок. Был когда то proposal на поддержку qualified сигнатур, p0045r1.
а что там за гарантии такие?
 Dmitry
                          Sokolov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Dmitry
                          Sokolov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  [res.on.data.races]/p3, A C++ standard library function shall not directly or indirectly modify objects accessible by threads other than the current thread unless the objects are accessed directly or indirectly via the function's non-const arguments, including this".
странноватая гарантия, имхо, избыточная, но из текста не всё ясно...
https://youtu.be/xTdeZ4MxbKo?t=2636
на англ не слушаю, не могу распарсить...
автоматически сгенерированные субтитры норм
 Dmitry
                          Sokolov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Dmitry
                          Sokolov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Ну какие-то объекты могут иметь скрытое мутабельное состояние, например lazy evaluated. Логически это может быть const, но при этом непотокобезопасно. А это гарантия того, что такого состояния не должно быть и объекты std либы через const методы можно использовать конкурентно.
ну если имеется ввиду то, что надо все мутаблы надо мутексами обкладывать, это справедливо
 Dmitry
                          Sokolov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Dmitry
                          Sokolov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Нет же, имеется в виду что const не надо мьютексами обкладывать :)
а как же если объект const, а у него внутри mutable поле?
 Dmitry
                          Sokolov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                      
                      
                        
                          Dmitry
                          Sokolov
                        
                      
                    
                    
                    
                    
                      Автор вопроса
                    
                    
                  Это std, неведомо нам чо mutable есть там
а на случай когда std вызывает юзерский код это не распространяется?
можете какой-нибудь пример придумать?
мне тоже ничего в голову не приходит. если пользовать пишет специализацию шаблона стандартной библиотеки для своего типа, то он подчиняется требованиям стандарта http://eel.is/c++draft/library#namespace.std-2
Обсуждают сегодня