Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

error: no matching function for call to ‘for_each Chapter1/fig_1_05.cpp #1

Open
NguyenVanThanhHust opened this issue Dec 30, 2019 · 2 comments

Comments

@NguyenVanThanhHust
Copy link

NguyenVanThanhHust commented Dec 30, 2019

I can't build pstl library so that i use prebuilt from intel: https://github.com/intel/tbb/releases

I replace 2 line from:
#include <pstl/algorithm>
#include <pstl/execution>

to
#include <pstl/experimental/algorithm>
#include <pstl/internal/algorithm_impl.h>

Error i encounter is:
figure_1_05.cpp: In function ‘int main()’:
figure_1_05.cpp:10:3: error: no matching function for call to ‘for_each(const pstl::execution::v1::parallel_policy&, std::vector<std::__cxx11::basic_string<char> >::iterator, std::vector<std::__cxx11::basic_string<char> >::iterator, main()::<lambda(std::__cxx11::string&)>)’ ); ^ In file included from /usr/include/c++/5/algorithm:62:0, from /usr/local/include/pstl/experimental/internal/reduction_impl.h:20, from /usr/local/include/pstl/experimental/internal/reduction.h:23, from /usr/local/include/pstl/experimental/algorithm:21, from figure_1_05.cpp:1: /usr/include/c++/5/bits/stl_algo.h:3761:5: note: candidate: template<class _IIter, class _Funct> _Funct std::for_each(_IIter, _IIter, _Funct) for_each(_InputIterator __first, _InputIterator __last, _Function __f) ^ /usr/include/c++/5/bits/stl_algo.h:3761:5: note: template argument deduction/substitution failed: figure_1_05.cpp:10:3: note: deduced conflicting types for parameter ‘_IIter’ (‘pstl::execution::v1::parallel_policy’ and ‘__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char>*, std::vector<std::__cxx11::basic_string<char> > >’) );

I use Linux: 16.04, g++ : 5.5.0
I'm not C++ expert. Does anyone have any idea what is this error and how can i fix it?

@vossmjp
Copy link
Collaborator

vossmjp commented Dec 30, 2019

If you update the [tbb_install_dir]/bin/tbbvars.sh and [pstl_root_dir]/bin/pstlvars.sh scripts in the pre-built version, replacing the SUBSTITUTE_INSTALL_DIR_HERE properly for each, you can then source the pstlvars.sh script (for example, ". ./pstlvars.sh intel64"). You should then be able to use the original source files unchanged. You should not need to change the #include lines.

After changing the pstlvars.sh file, [pstl_root_dir]/stdlib will be in your CPATH, which will contain pstl/algorithm and pstl/execution.

Please let me know if this does not work for you.

@NguyenVanThanhHust
Copy link
Author

I changed 3 file: tbbvars.sh, pstlvars.sh and figure_1_05.cpp

In tbbvars.sh: i changed from TBBROOT=SUBSTITUTE_INSTALL_DIR_HERE to TBBROOT="/home/thanhnv/Downloads/tbb-2020.0-lin/tbb"
In pstlvars.sh: i changed from PSTLROOT=SUBSTITUTE_INSTALL_DIR_HERE to PSTLROOT="/home/thanhnv/Downloads/tbb-2020.0-lin/pstl"
then i run 2 command: (in this command, i'm in folder tbb-2020.0-lin)
source ./tbb/bin/tbbvars.sh intel64 linux auto_tbbroot
source ./pstl/bin/pstlvars.sh intel64 auto_pstlroot
It doesn't show any error.

Then i compile source code (figure_1_05.cpp)
If i keep original (#include <pstl/algorithm>), it shows:
figure_1_05.cpp:4:26: fatal error: pstl/algorithm: No such file or directory
if i change to #include <pstl/experimental/algorithm>, it shows old error.

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

No branches or pull requests

2 participants