Khaled Alshaya
Khaled Alshaya

Reputation: 96889

Is it possible to do the following with auto in C++0x?

Eric Lippert has written an article about Why no var on fields? in C#. I was curious, will we be able to do that in C++0x? ex.

struct mystruct_t
{
   auto i = 0, d = 0.0, s = std::string("zero");
};

I couldn't reach an answer through the latest draft, sorry.

Thanks,

Upvotes: 8

Views: 550

Answers (1)

Johannes Schaub - litb
Johannes Schaub - litb

Reputation: 507115

Sadly you cannot. The spec says at 7.1.6.4/3 and follows

Otherwise, the type of the variable is deduced from its initializer. The name of the variable being declared shall not appear in the initializer expression. This use of auto is allowed when declaring variables in a block (6.3), in namespace scope (3.3.6), and in a for-init-statement (6.5.3).

The auto type-specifier can also be used in declaring a variable in the condition of a selection statement (6.4) or an iteration statement (6.5), in the type-specifier-seq in the new-type-id or type-id of a new-expression (5.3.4), in a for-range-declaration, and in declaring a static data member with a brace-or-equal-initializer that appears within the member-specification of a class definition (9.4.2).

A program that uses auto in a context not explicitly allowed in this section is ill-formed.

I'm not sure why they forbid auto for non-static data members, it would be quite handy.

Upvotes: 12

Related Questions