token
является указателем на объект Token_
, а не на сам объект Token_
, поэтому оператор *
в операторе switch разыменовывает только указатель (таким образом только получая объект), но не затем продолжайте вызывать определенный вами оператор.
Попробуйте вместо:
switch(*(*token)) {
Использование вашего пользовательского operator *
может показаться немного запутанным.
Другой вариант - изменить read_buffer_()
так, чтобы вы могли делать следующее:
Token_ token = read_buffer_(); // NOTE: read_buffer_() returns a Token_ object directly
switch (*token)//here if I use explicit call of operator*() it works
В этом случае Token_
объекты имитируют указатели, и вы также не сможете вернуть указатель на указатели.