The resulting string in TempData is "TEST" (without the quotes and no terminating null - BString doesn't need one). Uppercase() returns a type of BString. The overloaded dereference operator returns a type of (signed char *). The order of operations are to execute the Uppercase() method on TempData and then execute a dereference (overloaded) on the temporary BString that Uppercase() returns. If I type:
TempData = *TempData.
VAX incorrectly converts this to:
TempData = *TempData->
Hovering over TempData also displays the wrong tooltip. I should be seeing the data type of TempData and not the overloaded dereference operator's prototype. I'd expect to see the overloaded dereference operator prototype when hovering over the dereference operator (if that's even possible).
Default Intellisense doesn't have any problems with continuing to type after the '.' is entered and also displays the appropriate drop-down list. (VAX doesn't display anything because it converts the . to -> which results in an incorrect code path that wouldn't compile anyway).
BString is from "Safe C++ Design Principles" (a book I wrote). BString's source is included in that book and is a class I use extensively in my software products and is not related to anything GNU. It combines the best aspects of BASIC, Perl, PHP, C, C++ (STL string), MFC CString, and leaves out the worthless features. It also includes a couple things that I came up with to make life easier when interfacing with 3rd party libraries - for example, the * dereference operator. You don't recognize this class because very few people know about it (the book is relatively "new" and I don't talk about BString that often).