Ulrich Lauther <[EMAIL PROTECTED]> wrote:
> 
> This code:
> 
> #include <stdio.h>
> 
> class Foo {
>  size_t m_n;
> public:
>  inline explicit Foo(size_t n) : m_n(n) {
>  }
>  inline int operator()(int i) {
>    return i;
>  }
> }; // Foo
> 
> int main() {
> 
>  int n = 10;
>  Foo my_foo(size_t(n));
>  // Foo my_foo((size_t)n);
> 
>  int i = 1;
>  i += my_foo(i);
>  printf("%d\n",i);
>  return 0;
> }
> 
> Gives:
> 
> test.C: In function 'int main()':
> test.C:20: error: no match for 'operator+=' in 'i += my_foo(((size_t)i))'
> test.C:15: warning: unused variable 'n'

Correctly so, even if unexpected.

  Foo my_foo(size_t(n));

can be read as a function declaration for a function 'my_foo', returning
a 'Foo' and taking a size_t argument. The parantheses around 'n' do not
change it.

And as the thing can be legally read as a function declaration, it is
one, causing the compiler later to barf on i+=... .

So to make the compiler parse it as intended, you need to use something
that's not readable as function declaration, e.g.

  Foo my_foo((size_t(n)));

or

  Foo my_foo = Foo(size_t(n));

or

  Foo my_foo(size_t(n) + 0);

or something similarily ugly.

> When I use the commented out line, it works as expected.

That should work, too, indeed.

Regards,
Andre' 
_______________________________________________
help-gplusplus mailing list
help-gplusplus@gnu.org
http://lists.gnu.org/mailman/listinfo/help-gplusplus

Reply via email to