2013/8/4 Edward Diener <eldiener@tropicsoft.com>
On 8/4/2013 8:57 AM, gast128 wrote:
Returning a 'const X' is meaningless. Just return 'X' instead.

Just to clarify, Edward, I think you're wrong. Consider:

struct X { void go() {} };

X source_a();
X const source_b();

int main()
{
  source_a().go(); // ok
  source_b().go(); // error
 
 The same goes for passing something as 'const X'.

I assume you mean a function *taking* something as 'const X'. Consider:

void g( X x );
void g( X const x );

The two declarations of g() are equivalent (!), so you could say this 'const' is meaningless ;-). The 'const' here matters in the implementation of function g.

void f( X x, X const y )
{
  x.go(); // ok
  y.go(); // error
 
When you pass or return by value you get a copy of the object being passed so it means nothing to say that the object is 'const'.

Considering what I've written above, I disagree that 'const' means nothing here. When function source_b() returns by const value, it *means* the returned temporary is const. When function f() takes by const value, it *means* the implementation of f() doesn't modify the copy it gets. For the caller of f(), this 'const' is meaningless indeed ;-)

Regards,
Kris