c++ - GCC 4.8 with GNU STL produces bad code for std::string constructor? -
so bit of c++ code:
void func( const std::string& thestring ) { std::string thestring( thestring ); thestring += " more string"; std::cout << thestring; }
which compiles fine gcc 4.8
, vs 2013
. c++ knowledge, code okay local variable thestring
beingness brought scope hides thestring
function argument. @ point of thestring
construction, thestring
in scope function argument passed std::string
constructor. constructed std::string
named thestring
comes scope , thestring
used later in code. phew!
however, gcc
seems deed thestring
passed std::string
constructor local thestring
(which hasn't been constructed yet) causing compiled programme crash. vs 2013 code compiles , runs fine.
so,
is code correct? or doing outside spec means gcc behaviour undefined. is bug in gcc?
no, code invalid.
according c++ standard (3.3.2 point of declaration)
1 point of declaration name after finish declarator (clause 8) , before initializer (if any), except noted below.
[ example: int x = 12; { int x = x; }
here sec x initialized own (indeterminate) value. —end illustration ]
and (3.3.3 block scope, #2)
a parameter name shall not redeclared in outermost block of function definition nor in outermost block of handler associated function-try-block.
c++ gcc stl undefined-behavior
No comments:
Post a Comment