What does "Foo( Bar() );" mean ?
=======
Hi, I've read about "Foo x( Bar() );" in C++ FAQ LITE, section 10.19
http://www.parashift.com/c++-faq-lite/ctors.html
And then I've played with similar "Foo( Bar() );" construct.
My question is: what does "Foo( Bar() )" really mean ??
See comments for details.
=======
// compiled and tested using gcc 4.1.2
#include <iostream>
using namespace std;
struct Bar
{
Bar() { cout << "Bar::Bar()" << endl; }
};
struct Foo
{
Foo(const Bar&) { cout << "Foo::Foo(const Bar&)" << endl; }
~Foo() { cout << "Foo::~Foo()" << endl; }
};
int main()
{
// doesn't call Foo constr - it declares "foo" as a function
Foo foo( Bar() );
// when You uncomment the following line,
// You'll get a link error: undefined reference to `Bar()'
// You don't get this error when the rest of main() is commented
out
// Foo( Bar() );
// calls Foo constr and then f, gives a warning: "taking address
of temporary"
& Foo( Bar() );
// the same line as before, but here it's accepted by the compiler
// it still doesn't call Foo constr, though
Foo( Bar() );
// gives a warning: "statement has no effect"
// - so "Foo( Bar() );" should be a STATEMENT too
int( double() );
return 0;
}
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]