Variables of built-in types can be value-initialized like this:
int var = int();
this way I get the default value of int
without hardcoding the zero in my code.
However if I try to do similar stuff for a pointer:
int* ptr = int*();
the compiler (Visual C++ 10) refuses to compile that (says type int unexpected
).
How do I value-initialize a pointer in similar manner?
You cannot. The syntax
T()
is defined in 5.2.3/1,2 (C++03, slightly different wording in C++11 FDIS). In particular the second paragraph states:That means that
int()
, will create an rvalue of type int and value-initialize it. Now the problem is thatint*
is not a simple-type-specifier, but rather an elaborated-type-specifier. The definition of simple-type-specifier in the grammar is:With type-name being defined as:
This is what makes the proposed solutions work. The creation of the typedef (either directly or through the template) creates a type-name (third type) that can be used as a simple-type-specifier (first type).