This will probably work on most systems, but it is Undefined Behaviour. Quoth the Standard:
5.2.5.3
If
E1
has the type “pointer to class X,” then the expressionE1->E2
is converted to the equivalent form(*(E1)).E2
[…]
And:
5.2.5.1
A postfix expression followed by a dot
.
or an arrow->
, optionally followed by the keywordtemplate
(14.8.1), and then followed by an id-expression, is a postfix expression. The postfix expression before the dot or arrow is evaluated;58) […]58) This evaluation happens even if the result is unnecessary to determine the value of the entire postfix expression, for example if the id-expression denotes a static member.
Evaluation of *x
where x
is a null pointer results in Undefined Behaviour, so yours is clearly a case of UB, before the function is even entered.