Добрый день, уважаемые разработчики!
Есть такой замечательный язык C++ со своими правилами, парадигмами, хорошими и плохими практиками, а также с хорошими и плохими библиотеками. И вот есть такое правило, что константные объекты менять нельзя. Казалось бы, правило логичное, и хорошие мальчики и девочки должны ему прилежно следовать.
Однако существует ещё такая библиотека, как Boost.Exception. В ней есть такая возможность, как дополнять объекты исключения произвольной информацией с помощью оператора <<. Причём, дополнять можно не просто объекты, а объекты константные. Давайте посмотрим API:
template <class E, class Tag, class T>
E const & operator<<( E const & x, error_info<Tag,T> const & v );
Итак, константные объекты по мнению разработчиков хорошей библиотеки Boost.Exception могут меняться, что противоречит самой идее константности. А что думаете вы по этому поводу?
const там только потому, что в противном случае, в функцию можно было бы передать только lvalue, что не очень подходит для исключений, где объекты как правило создаются и используются без каких-либо промежуточных переменных. (C) anonymous