C++ is a complex language, with a rich expression system. The debugger understands much of the system, but it does not understand how to evaluate some complex aspects of a C++ expression. It can correctly debug these when they occur in the source code.
The aspects of the expression system not processed properly during debugger expression evaluation include the following:
Many of the implicit conversions
Program-defined operators
Calling constructors and destructors during the debugger's own evaluation of expressions
There are also some minor restrictions in the following grammar, compared with the full C++ expression grammar, to make it unambiguous:
expression
constant-expression