Skip to content

Conversation

@ITHelpDec
Copy link

A return is needed when calling the two-parameter version of accumulate_block() inside of the lambda function.

futures[i] = pool.submit([=] () {
-    accumulate_block<_ForwardIt, _Tp>()(block_start, block_end);
+    return accumulate_block<_ForwardIt, _Tp>()(block_start, block_end);
});

Without it, we receive the following error:

No viable overloaded '='

The listing in this repo (here) also doesn't mirror what was written in the book, so I've first brought them in sync before applying the correction.

- opted for version that returns type _Tp
- - void version in book takes three arguments
- - _Tp version in book takes two
- struct called without arguments
- add arguments according to earlier operator() definition
- book passes accumulate_block as part of a lambda function
- accumulate_block::operator() returns type _Tp
- we must call `return` on the struct's call inside the lambda to capture this return type
- without this, the code will fail to compile, and provide the following error:
- - "No viable overloaded '='"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant