Tuesday, 15 September 2015

c++ - Most vexing parse: why doesn't A a(()); work? -



c++ - Most vexing parse: why doesn't A a(()); work? -

among many things stack overflow has taught me known "most vexing parse", classically demonstrated line such as

a a(b()); //declares function

while this, most, intuitively appears declaration of object a of type a, taking temporary b object constructor parameter, it's declaration of function a returning a, taking pointer function returns b , takes no parameters. line

a a(); //declares function

also falls under same category, since instead of object, declares function. now, in first case, usual workaround issue add together set of brackets/parenthesis around b(), compiler interpret declaration of object

a a((b())); //declares object

however, in sec case, doing same leads compile error

a a(()); //compile error

my question is, why? yes i'm aware right 'workaround' alter a a;, i'm curious know () compiler in first illustration doesn't work when reapplying in sec example. a a((b())); workaround specific exception written standard?

there no enlightened answer, it's because it's not defined valid syntax c++ language... so, definition of language.

if have look within valid. example:

((0));//compiles

to larn more how languages defined, , how compilers work, should larn formal language theory or more context free grammars (cfg) , related material finite state machines. if interested in though wikipedia pages won't enough, you'll have book.

c++

No comments:

Post a Comment