быть использован в другой функции которая никогда не вызывается?
Тут сильнее набросили, у людей оказывается бывают функторы с разными const() и () а через function нельзя вызвать const()
Да, это изначальная хрень в std function. Я в своей реализации сохраняю const
наоборот можно всегда
Да, проблема что можно всегда
А вроде можно, не? Только другой тип надо указать
Там оператор const хотя callable может быть mutable. То есть const независимо от сигнатуры () или () const.
в общем походу я из этой дискуссии ничего не понял, впрочем и читал по диагонали, так забью пока на это
Помнятся претензии что это приводит к тому что вызов const метода function нарушает std гарантии отсутствия гонок. Был когда то proposal на поддержку qualified сигнатур, p0045r1.
а что там за гарантии такие?
[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
на англ не слушаю, не могу распарсить...
автоматически сгенерированные субтитры норм
Ну какие-то объекты могут иметь скрытое мутабельное состояние, например lazy evaluated. Логически это может быть const, но при этом непотокобезопасно. А это гарантия того, что такого состояния не должно быть и объекты std либы через const методы можно использовать конкурентно.
ну если имеется ввиду то, что надо все мутаблы надо мутексами обкладывать, это справедливо
Нет же, имеется в виду что const не надо мьютексами обкладывать :)
а как же если объект const, а у него внутри mutable поле?
Это std, неведомо нам чо mutable есть там
а на случай когда std вызывает юзерский код это не распространяется?
можете какой-нибудь пример придумать?
мне тоже ничего в голову не приходит. если пользовать пишет специализацию шаблона стандартной библиотеки для своего типа, то он подчиняется требованиям стандарта http://eel.is/c++draft/library#namespace.std-2
Обсуждают сегодня