Рассмотрим следующий код:
struct Foo
{
mutable int m;
template<int Foo::* member>
void change_member() const {
this->*member = 12; // Error: you cannot assign to a variable that is const
}
void g() const {
change_member<&Foo::m>();
}
};
Компилятор генерирует сообщение об ошибке. Дело в том, что член m
является изменяемым, поэтому ему разрешено изменять m
. Но подпись функции скрывает изменяемое объявление.
Как декалировать указатель на изменяемый член для компиляции этого кода?
Если это невозможно, пожалуйста, обратитесь к Стандарту C ++.