I wrote this simple program to learn how to use Boost::Compute.  The program failed to build on Windows, but builds without any errors on Linux.  If I modify the program to only operate on one vector, it works fine.  On Windows I'm using vcpkg to pull in both Boost::Compute as well as the OpenCL SDK and I'm using Visual Studio 2022 to build the project.
#define CL_TARGET_OPENCL_VERSION 300 #include <random> #include <vector> #include <boost/compute/core.hpp> #include <boost/compute/lambda.hpp> #include <boost/compute/algorithm/transform.hpp> #include <boost/compute/container/vector.hpp> std::mt19937 rng{ std::random_device()() }; std::uniform_int_distribution<> dist(1); namespace compute = boost::compute; using namespace boost::compute::lambda; int GetRandomNumber() { return dist(rng); } int main(int argccharargv[]) { const auto device = compute::system::default_device(); const compute::context context(device); compute::command_queue commandQueue(contextdevice); std::vector<inthostVector1(10000); std::vector<inthostVector2(10000); std::vector<inthostResultVector(10000); std::ranges::generate(hostVector1GetRandomNumber); std::ranges::generate(hostVector2GetRandomNumber); compute::vector<intdeviceVector1(hostVector1.size()context); compute::vector<intdeviceVector2(hostVector2.size()context); compute::vector<intdeviceResultVector(hostResultVector.size()context); compute::copy(hostVector1.begin()hostVector1.end()deviceVector1.begin()commandQueue); compute::copy(hostVector2.begin()hostVector2.end()deviceVector2.begin()commandQueue); transform(deviceVector1.begin()deviceVector1.end()deviceVector2.begin()deviceResultVector.begin(), _1 + _2, commandQueue); compute::copy(deviceResultVector.begin()deviceResultVector.end()hostResultVector.begin()commandQueue); return 0; }
Here is the build output:

Build started at 11:13 PM...
1>------ Build started: Project: BoostComputeTest, Configuration: Debug x64 ------
1>Main.cpp
1>C:\Users\Dave\source\repos\BoostComputeTest\BoostComputeTest\vcpkg_installed\x64-windows\x64-windows\include\boost\compute\iterator\transform_iterator.hpp(177,53): error C2039: 'get_buffer': is not a member of 'boost::compute::zip_iterator<boost::tuples::tuple<boost::compute::buffer_iterator<T>,boost::compute::buffer_iterator<T>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>>'
1>C:\Users\Dave\source\repos\BoostComputeTest\BoostComputeTest\vcpkg_installed\x64-windows\x64-windows\include\boost\compute\iterator\transform_iterator.hpp(177,53): error C2039:         with
1>C:\Users\Dave\source\repos\BoostComputeTest\BoostComputeTest\vcpkg_installed\x64-windows\x64-windows\include\boost\compute\iterator\transform_iterator.hpp(177,53): error C2039:         [
1>C:\Users\Dave\source\repos\BoostComputeTest\BoostComputeTest\vcpkg_installed\x64-windows\x64-windows\include\boost\compute\iterator\transform_iterator.hpp(177,53): error C2039:             T=int
1>C:\Users\Dave\source\repos\BoostComputeTest\BoostComputeTest\vcpkg_installed\x64-windows\x64-windows\include\boost\compute\iterator\transform_iterator.hpp(177,53): error C2039:         ]
1>(compiling source file 'Main.cpp')
1>    C:\Users\Dave\source\repos\BoostComputeTest\BoostComputeTest\vcpkg_installed\x64-windows\x64-windows\include\boost\compute\iterator\zip_iterator.hpp(172,7):
1>    see declaration of 'boost::compute::zip_iterator<boost::tuples::tuple<boost::compute::buffer_iterator<T>,boost::compute::buffer_iterator<T>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>>'
1>        with
1>        [
1>            T=int
1>        ]
1>    C:\Users\Dave\source\repos\BoostComputeTest\BoostComputeTest\vcpkg_installed\x64-windows\x64-windows\include\boost\compute\iterator\transform_iterator.hpp(177,53):
1>    the template instantiation context (the oldest one first) is
1>        C:\Users\Dave\source\repos\BoostComputeTest\BoostComputeTest\Main.cpp(40,2):
1>        see reference to function template instantiation 'OutputIterator boost::compute::transform<boost::compute::buffer_iterator<T>,boost::compute::buffer_iterator<T>,boost::compute::buffer_iterator<T>,boost::compute::lambda::expression<Expr>>(InputIterator1,InputIterator1,InputIterator2,OutputIterator,BinaryOperator,boost::compute::command_queue &)' being compiled
1>        with
1>        [
1>            OutputIterator=boost::compute::buffer_iterator<int>,
1>            T=int,
1>            Expr=boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::plus,boost::proto::argsns_::list2<const boost::compute::lambda::expression<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::compute::lambda::placeholder<0>>,0>> &,const boost::compute::lambda::expression<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::compute::lambda::placeholder<1>>,0>> &>,2>,
1>            InputIterator1=boost::compute::buffer_iterator<int>,
1>            InputIterator2=boost::compute::buffer_iterator<int>,
1>            BinaryOperator=boost::compute::lambda::expression<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::plus,boost::proto::argsns_::list2<const boost::compute::lambda::expression<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::compute::lambda::placeholder<0>>,0>> &,const boost::compute::lambda::expression<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::compute::lambda::placeholder<1>>,0>> &>,2>>
1>        ]
1>        C:\Users\Dave\source\repos\BoostComputeTest\BoostComputeTest\vcpkg_installed\x64-windows\x64-windows\include\boost\compute\algorithm\transform.hpp(75,12):
1>        see reference to function template instantiation 'OutputIterator boost::compute::transform<boost::compute::zip_iterator<boost::tuples::tuple<boost::compute::buffer_iterator<T>,boost::compute::buffer_iterator<T>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>>,OutputIterator,boost::compute::detail::unpacked<BinaryOperator>>(InputIterator,InputIterator,OutputIterator,UnaryOperator,boost::compute::command_queue &)' being compiled
1>        with
1>        [
1>            OutputIterator=boost::compute::buffer_iterator<int>,
1>            T=int,
1>            BinaryOperator=boost::compute::lambda::expression<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::plus,boost::proto::argsns_::list2<const boost::compute::lambda::expression<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::compute::lambda::placeholder<0>>,0>> &,const boost::compute::lambda::expression<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::compute::lambda::placeholder<1>>,0>> &>,2>>,
1>            InputIterator=boost::compute::zip_iterator<boost::tuples::tuple<boost::compute::buffer_iterator<int>,boost::compute::buffer_iterator<int>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>>,
1>            UnaryOperator=boost::compute::detail::unpacked<boost::compute::lambda::expression<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::plus,boost::proto::argsns_::list2<const boost::compute::lambda::expression<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::compute::lambda::placeholder<0>>,0>> &,const boost::compute::lambda::expression<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::compute::lambda::placeholder<1>>,0>> &>,2>>>
1>        ]
1>        C:\Users\Dave\source\repos\BoostComputeTest\BoostComputeTest\vcpkg_installed\x64-windows\x64-windows\include\boost\compute\algorithm\transform.hpp(48,34):
1>        see reference to class template instantiation 'boost::compute::transform_iterator<InputIterator,UnaryOperator>' being compiled
1>        with
1>        [
1>            InputIterator=boost::compute::zip_iterator<boost::tuples::tuple<boost::compute::buffer_iterator<int>,boost::compute::buffer_iterator<int>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>>,
1>            UnaryOperator=boost::compute::detail::unpacked<boost::compute::lambda::expression<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::plus,boost::proto::argsns_::list2<const boost::compute::lambda::expression<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::compute::lambda::placeholder<0>>,0>> &,const boost::compute::lambda::expression<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::compute::lambda::placeholder<1>>,0>> &>,2>>>
1>        ]
1>        C:\Users\Dave\source\repos\BoostComputeTest\BoostComputeTest\vcpkg_installed\x64-windows\x64-windows\include\boost\compute\iterator\transform_iterator.hpp(175,15):
1>        while compiling class template member function 'int boost::compute::transform_iterator<InputIterator,UnaryOperator>::dereference(void) const'
1>        with
1>        [
1>            InputIterator=boost::compute::zip_iterator<boost::tuples::tuple<boost::compute::buffer_iterator<int>,boost::compute::buffer_iterator<int>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>>,
1>            UnaryOperator=boost::compute::detail::unpacked<boost::compute::lambda::expression<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::plus,boost::proto::argsns_::list2<const boost::compute::lambda::expression<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::compute::lambda::placeholder<0>>,0>> &,const boost::compute::lambda::expression<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::compute::lambda::placeholder<1>>,0>> &>,2>>>
1>        ]
1>            C:\Users\Dave\source\repos\BoostComputeTest\BoostComputeTest\vcpkg_installed\x64-windows\x64-windows\include\boost\iterator\iterator_facade.hpp(631,11):
1>            see the first reference to 'boost::compute::transform_iterator<InputIterator,UnaryOperator>::dereference' in 'boost::iterators::iterator_core_access::dereference'
1>        with
1>        [
1>            InputIterator=boost::compute::zip_iterator<boost::tuples::tuple<boost::compute::buffer_iterator<int>,boost::compute::buffer_iterator<int>,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type,boost::tuples::null_type>>,
1>            UnaryOperator=boost::compute::detail::unpacked<boost::compute::lambda::expression<boost::proto::exprns_::basic_expr<boost::proto::tagns_::tag::plus,boost::proto::argsns_::list2<const boost::compute::lambda::expression<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::compute::lambda::placeholder<0>>,0>> &,const boost::compute::lambda::expression<boost::proto::exprns_::expr<boost::proto::tagns_::tag::terminal,boost::proto::argsns_::term<boost::compute::lambda::placeholder<1>>,0>> &>,2>>>
1>        ]
1>C:\Users\Dave\source\repos\BoostComputeTest\BoostComputeTest\vcpkg_installed\x64-windows\x64-windows\include\boost\compute\iterator\transform_iterator.hpp(177,32): error C2530: 'context': references must be initialized
1>(compiling source file 'Main.cpp')
1>Done building project "BoostComputeTest.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Build completed at 11:13 PM and took 03.315 seconds ==========

Is there something I'm missing from my project configuration on Windows?

Thanks,

Dave F.