Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
qtws26_logo

The Qt Event of the Year: Qt World Summit 2026

Save Your Spot >
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Trying to use QFuture and QFutureWatcher for the first time
Qt 6.12 LTS is out! See what's new in the release blog

Trying to use QFuture and QFutureWatcher for the first time

Scheduled Pinned Locked Moved Unsolved General and Desktop
25 Posts 2 Posters 7.0k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • PerdrixP Perdrix

    The full horrid set of errors is too large to post here :(
    So I've placed it on my website as a text file:
    http://www.perdrix.co.uk/QtConcurrentRunErrors.txt

    Even the totally trivial case:

           //void test([[maybe_unused]]QPromise<void>& promise) const {}
           void test() const {}
    

    invoked with:

    future = QtConcurrent::run(&GridData::test, gridData);
    

    fails:

    1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(46,43):
    1>    'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple': function does not take 2 arguments
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(532,5):
    1>        could be 'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::allocator_arg_t,const _Alloc &,_Other &&)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(520,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::allocator_arg_t,const _Alloc &,const std::pair<_First,_Second> &&)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(513,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::allocator_arg_t,const _Alloc &,std::pair<_First,_Second> &&)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(507,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::allocator_arg_t,const _Alloc &,const std::pair<_First,_Second> &)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(500,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::allocator_arg_t,const _Alloc &,std::pair<_First,_Second> &)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(494,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::allocator_arg_t,const _Alloc &,const std::tuple<_Types2...> &&)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(485,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::allocator_arg_t,const _Alloc &,std::tuple<_Types2...> &&)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(477,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::allocator_arg_t,const _Alloc &,const std::tuple<_Types2...> &)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(468,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::allocator_arg_t,const _Alloc &,std::tuple<_Types2...> &)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(460,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::allocator_arg_t,const _Alloc &,std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>> &&)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(456,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::allocator_arg_t,const _Alloc &,const std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>> &)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(450,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::allocator_arg_t,const _Alloc &,_This2 &&,_Rest2 ...)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(442,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::allocator_arg_t,const _Alloc &,const _This &,const std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>> &)'
    1>        with
    1>        [
    1>            _This=void (__cdecl DSS::GridData::* )(void) const
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(435,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::allocator_arg_t,const _Alloc &)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(427,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(_Other &&)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(406,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(const std::pair<_Other1,_Other2> &&) noexcept(<expr>)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(399,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::pair<_Other1,_Other2> &&) noexcept(<expr>)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(393,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(const std::pair<_Other1,_Other2> &) noexcept(<expr>)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(386,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::pair<_Other1,_Other2> &) noexcept(<expr>)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(381,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(const std::tuple<_Types1...> &&) noexcept(<expr>)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(373,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::tuple<_Types1...> &&) noexcept(<expr>)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(366,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(const std::tuple<_Types1...> &) noexcept(<expr>)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(358,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(std::tuple<_Types1...> &) noexcept(<expr>)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(346,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(_This2 &&,_Rest2 ...) noexcept(<expr>)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(336,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(const _This &,const std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>> &) noexcept(<expr>)'
    1>        with
    1>        [
    1>            _This=void (__cdecl DSS::GridData::* )(void) const
    1>        ]
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(329,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(void) noexcept(<expr>)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(322,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(_Tag,const _Alloc &,_Tpl &&)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(319,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(_Tag,const _Alloc &,_Tpl &&,std::integer_sequence<size_t,_Indices2...>)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(313,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(_Tag,const _Alloc &,_This2 &&,_Rest2 ...)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(307,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(_Tag,_Tpl &&)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(304,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(_Tag,_Tpl &&,std::integer_sequence<size_t,_Indices1...>)'
    1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(300,5):
    1>        or       'std::tuple<void (__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>>::tuple(_Tag,_This2 &&,_Rest2 ...)'
    1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(46,43):
    1>        while trying to match the argument list '(_Ty, std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>)'
    1>        with
    1>        [
    1>            _Ty=void (__cdecl DSS::GridData::* )(void) const
    1>        ]
    1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(46,43):
    1>    the template instantiation context (the oldest one first) is
    1>        D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,28):
    1>        see reference to function template instantiation 'auto QtConcurrent::run<void(__cdecl DSS::GridData::* )(void) const,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>&>(Function &&,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>> &)' being compiled
    1>        with
    1>        [
    1>            Function=void (__cdecl DSS::GridData::* )(void) const
    1>        ]
    1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(65,12):
    1>        see reference to function template instantiation 'auto QtConcurrent::run<_Ty,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>&>(QThreadPool *,Function &&,std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>> &)' being compiled
    1>        with
    1>        [
    1>            _Ty=void (__cdecl DSS::GridData::* )(void) const,
    1>            Function=void (__cdecl DSS::GridData::* )(void) const
    1>        ]
    1
    

    David

    JonBJ Offline
    JonBJ Offline
    JonB
    wrote on last edited by JonB
    #8

    @Perdrix said in Trying to use QFuture and QFutureWatcher for the first time:

    QtConcurrent::run(&GridData::test, gridData);

    Just in case your version of Qt does not have this apparent "parameter order swap for member methods introduced at Qt6", did you just verify it's not:

    QtConcurrent::run(gridData, &GridData::test);

    Just to be sure :)

    In a moment I will type in the simplest case in my Qt6/gcc and verify....

    1 Reply Last reply
    0
    • PerdrixP Offline
      PerdrixP Offline
      Perdrix
      wrote on last edited by
      #9

      Hmmm I doubt that's the issue as this is 6.10.0. However I changed that invocation:

      future = QtConcurrent::run(gridData, &GridData::test);
      

      and got this:

      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(46,43): error C2440: 'initializing': cannot convert from 'initializer list' to 'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>'
      1>(compiling source file '/QualityChart.cpp')
      1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(46,43):
      1>    'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple': function does not take 2 arguments
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(532,5):
      1>        could be 'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,_Other &&)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(520,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,const std::pair<_First,_Second> &&)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(513,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,std::pair<_First,_Second> &&)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(507,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,const std::pair<_First,_Second> &)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(500,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,std::pair<_First,_Second> &)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(494,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,const std::tuple<_Types2...> &&)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(485,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,std::tuple<_Types2...> &&)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(477,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,const std::tuple<_Types2...> &)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(468,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,std::tuple<_Types2...> &)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(460,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const> &&)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(456,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,const std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const> &)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(450,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,_This2 &&,_Rest2 ...)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(442,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,const _This &,void (__cdecl DSS::GridData::* const &)(void) const)'
      1>        with
      1>        [
      1>            _This=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
      1>        ]
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(435,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(427,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(_Other &&)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(406,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(const std::pair<_Other1,_Other2> &&) noexcept(<expr>)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(399,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::pair<_Other1,_Other2> &&) noexcept(<expr>)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(393,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(const std::pair<_Other1,_Other2> &) noexcept(<expr>)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(386,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::pair<_Other1,_Other2> &) noexcept(<expr>)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(381,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(const std::tuple<_Types1...> &&) noexcept(<expr>)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(373,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::tuple<_Types1...> &&) noexcept(<expr>)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(366,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(const std::tuple<_Types1...> &) noexcept(<expr>)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(358,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::tuple<_Types1...> &) noexcept(<expr>)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(346,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(_This2 &&,_Rest2 ...) noexcept(<expr>)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(336,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(const _This &,void (__cdecl DSS::GridData::* const &)(void) const) noexcept(<expr>)'
      1>        with
      1>        [
      1>            _This=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
      1>        ]
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(329,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(void) noexcept(<expr>)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(322,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(_Tag,const _Alloc &,_Tpl &&)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(319,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(_Tag,const _Alloc &,_Tpl &&,std::integer_sequence<size_t,_Indices2...>)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(313,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(_Tag,const _Alloc &,_This2 &&,_Rest2 ...)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(307,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(_Tag,_Tpl &&)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(304,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(_Tag,_Tpl &&,std::integer_sequence<size_t,_Indices1...>)'
      1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(300,5):
      1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(_Tag,_This2 &&,_Rest2 ...)'
      1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(46,43):
      1>        while trying to match the argument list '(std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>, _Ty)'
      1>        with
      1>        [
      1>            _Ty=void (__cdecl DSS::GridData::* )(void) const
      1>        ]
      1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(46,43):
      1>    the template instantiation context (the oldest one first) is
      1>        D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,28):
      1>        see reference to function template instantiation 'auto QtConcurrent::run<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>&,void(__cdecl DSS::GridData::* )(void) const>(Function,void (__cdecl DSS::GridData::* &&)(void) const)' being compiled
      1>        with
      1>        [
      1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>> &
      1>        ]
      1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(65,12):
      1>        see reference to function template instantiation 'auto QtConcurrent::run<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>&,_Ty>(QThreadPool *,Function,_Ty &&)' being compiled
      1>        with
      1>        [
      1>            _Ty=void (__cdecl DSS::GridData::* )(void) const,
      1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>> &
      1>        ]
      1>C:\Qt\6.10.0\msvc2022_64\include\QtCore\qfuture_impl.h(185,61): error C2039: '()': is not a member of 'std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>'
      1>(compiling source file '/QualityChart.cpp')
      1>    C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\memory(3347,7):
      1>    see declaration of 'std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>'
      1>    C:\Qt\6.10.0\msvc2022_64\include\QtCore\qfuture_impl.h(185,61):
      1>    the template instantiation context (the oldest one first) is
      1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(48,73):
      1>        see reference to class template instantiation 'QtConcurrent::TaskResolver<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>' being compiled
      1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(218,30):
      1>        see reference to class template instantiation 'QtConcurrent::TaskResolverHelper<std::integral_constant<bool,false>,Function,void (__cdecl DSS::GridData::* )(void) const>' being compiled
      1>        with
      1>        [
      1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
      1>        ]
      1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(213,18):
      1>        see reference to class template instantiation 'QtConcurrent::PromiseTaskResolver<Function,void (__cdecl DSS::GridData::* )(void) const>' being compiled
      1>        with
      1>        [
      1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
      1>        ]
      1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(190,53):
      1>        see reference to class template instantiation 'QtPrivate::ArgResolver<Function>' being compiled
      1>        with
      1>        [
      1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
      1>        ]
      1>C:\Qt\6.10.0\msvc2022_64\include\QtCore\qfuture_impl.h(185,22): error C3770: '<error type>': is not a valid base class
      1>(compiling source file '/QualityChart.cpp')
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(190,53): error C3083: 'IsPromise': the symbol to the left of a '::' must be a type
      1>(compiling source file '/QualityChart.cpp')
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(190,64): error C2039: 'value': is not a member of 'QtPrivate::ArgResolver<Function>'
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(190,64): error C2039:         with
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(190,64): error C2039:         [
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(190,64): error C2039:             Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(190,64): error C2039:         ]
      1>(compiling source file '/QualityChart.cpp')
      1>    C:\Qt\6.10.0\msvc2022_64\include\QtCore\qfuture_impl.h(185,8):
      1>    see declaration of 'QtPrivate::ArgResolver<Function>'
      1>        with
      1>        [
      1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
      1>        ]
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(196,72): error C2039: 'PromiseType': is not a member of 'QtPrivate::ArgResolver<Function>'
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(196,72): error C2039:         with
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(196,72): error C2039:         [
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(196,72): error C2039:             Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(196,72): error C2039:         ]
      1>(compiling source file '/QualityChart.cpp')
      1>    C:\Qt\6.10.0\msvc2022_64\include\QtCore\qfuture_impl.h(185,8):
      1>    see declaration of 'QtPrivate::ArgResolver<Function>'
      1>        with
      1>        [
      1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
      1>        ]
      1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(196,72):
      1>    the template instantiation context (the oldest one first) is
      1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(48,73):
      1>        see reference to class template instantiation 'QtConcurrent::TaskResolver<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>' being compiled
      1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(218,30):
      1>        see reference to class template instantiation 'QtConcurrent::TaskResolverHelper<std::integral_constant<bool,false>,Function,void (__cdecl DSS::GridData::* )(void) const>' being compiled
      1>        with
      1>        [
      1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
      1>        ]
      1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(213,18):
      1>        see reference to class template instantiation 'QtConcurrent::PromiseTaskResolver<Function,void (__cdecl DSS::GridData::* )(void) const>' being compiled
      1>        with
      1>        [
      1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
      1>        ]
      1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(195,17):
      1>        while compiling class template member function 'auto QtConcurrent::PromiseTaskResolver<Function,void (__cdecl DSS::GridData::* )(void) const>::run(std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const> &&,const QtConcurrent::TaskStartParameters &)'
      1>        with
      1>        [
      1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
      1>        ]
      1>            C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(48,73):
      1>            see the first reference to 'QtConcurrent::PromiseTaskResolver<Function,void (__cdecl DSS::GridData::* )(void) const>::run' in 'QtConcurrent::run'
      1>        with
      1>        [
      1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
      1>        ]
      1>            C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(65,12):
      1>            see the first reference to 'QtConcurrent::run' in 'QtConcurrent::run'
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(196,72): error C2061: syntax error: identifier 'PromiseType'
      1>(compiling source file '/QualityChart.cpp')
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,61): error C2065: 'PromiseType': undeclared identifier
      1>(compiling source file '/QualityChart.cpp')
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,21): error C2923: 'QtConcurrent::StoredFunctionCallWithPromise': 'PromiseType' is not a valid template type argument for parameter 'PromiseType'
      1>(compiling source file '/QualityChart.cpp')
      1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,61):
      1>    see declaration of 'PromiseType'
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,82): error C2641: cannot deduce template arguments for 'QtConcurrent::StoredFunctionCallWithPromise'
      1>(compiling source file '/QualityChart.cpp')
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,82): error C2780: 'QtConcurrent::StoredFunctionCallWithPromise<Function,PromiseType,Args...> QtConcurrent::StoredFunctionCallWithPromise(std::tuple<decay<_Ty>::type,decay<_Types>::type...> &&,std::integer_sequence<size_t,Is...>)': expects 2 arguments - 1 provided
      1>(compiling source file '/QualityChart.cpp')
      1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(162,5):
      1>    see declaration of 'QtConcurrent::StoredFunctionCallWithPromise'
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,82): error C2783: 'QtConcurrent::StoredFunctionCallWithPromise<Function,PromiseType,Args...> QtConcurrent::StoredFunctionCallWithPromise(std::tuple<decay<_Ty>::type,decay<_Types>::type...> &&)': could not deduce template argument for 'Function'
      1>(compiling source file '/QualityChart.cpp')
      1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(148,5):
      1>    see declaration of 'QtConcurrent::StoredFunctionCallWithPromise'
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,82): error C2783: 'QtConcurrent::StoredFunctionCallWithPromise<Function,PromiseType,Args...> QtConcurrent::StoredFunctionCallWithPromise(std::tuple<decay<_Ty>::type,decay<_Types>::type...> &&)': could not deduce template argument for 'PromiseType'
      1>(compiling source file '/QualityChart.cpp')
      1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(148,5):
      1>    see declaration of 'QtConcurrent::StoredFunctionCallWithPromise'
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,82): error C2783: 'QtConcurrent::StoredFunctionCallWithPromise<Function,PromiseType,Args...> QtConcurrent::StoredFunctionCallWithPromise(Function &&,Args ...)': could not deduce template argument for 'PromiseType'
      1>(compiling source file '/QualityChart.cpp')
      1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(142,5):
      1>    see declaration of 'QtConcurrent::StoredFunctionCallWithPromise'
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,82): error C2784: 'QtConcurrent::StoredFunctionCallWithPromise<Function,PromiseType,Args...> QtConcurrent::StoredFunctionCallWithPromise(QtConcurrent::StoredFunctionCallWithPromise<Function,PromiseType,Args...>)': could not deduce template argument for 'QtConcurrent::StoredFunctionCallWithPromise<Function,PromiseType,Args...>' from 'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>'
      1>(compiling source file '/QualityChart.cpp')
      1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(138,8):
      1>    see declaration of 'QtConcurrent::StoredFunctionCallWithPromise'
      1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,82): error C2514: 'QtConcurrent::StoredFunctionCallWithPromise': class template cannot be constructed
      1>(compiling source file '/QualityChart.cpp')
      1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(138,8):
      1>    see declaration of 'QtConcurrent::StoredFunctionCallWithPromise'
      1>D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,5): error C2679: binary '=': no operator found which takes a right-hand operand of type 'void' (or there is no acceptable conversion)
      1>(compiling source file '/QualityChart.cpp')
      1>    C:\Qt\6.10.0\msvc2022_64\include\QtCore\qfuture.h(307,1):
      1>    could be 'QFuture<void> &QFuture<void>::operator =(QFuture<void> &&)'
      1>        D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,5):
      1>        'QFuture<void> &QFuture<void>::operator =(QFuture<void> &&)': cannot convert argument 2 from 'void' to 'QFuture<void> &&'
      1>            D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,31):
      1>            Expressions of type void cannot be converted to other types
      1>    C:\Qt\6.10.0\msvc2022_64\include\QtCore\qfuture.h(307,1):
      1>    or       'QFuture<void> &QFuture<void>::operator =(const QFuture<void> &)'
      1>        D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,5):
      1>        'QFuture<void> &QFuture<void>::operator =(const QFuture<void> &)': cannot convert argument 2 from 'void' to 'const QFuture<void> &'
      1>            D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,31):
      1>            Expressions of type void cannot be converted to other types
      1>    C:\Qt\6.10.0\msvc2022_64\include\QtCore\qfuture.h(53,20):
      1>    or       'QFuture<void> &QFuture<void>::operator =(const QFuture<U> &)'
      1>        D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,5):
      1>        'QFuture<void> &QFuture<void>::operator =(const QFuture<U> &)': could not deduce template argument for 'const QFuture<U> &' from 'void'
      1>    D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,5):
      1>    while trying to match the argument list '(QFuture<void>, void)'
      
      JonBJ 1 Reply Last reply
      0
      • PerdrixP Perdrix

        Hmmm I doubt that's the issue as this is 6.10.0. However I changed that invocation:

        future = QtConcurrent::run(gridData, &GridData::test);
        

        and got this:

        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(46,43): error C2440: 'initializing': cannot convert from 'initializer list' to 'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>'
        1>(compiling source file '/QualityChart.cpp')
        1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(46,43):
        1>    'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple': function does not take 2 arguments
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(532,5):
        1>        could be 'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,_Other &&)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(520,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,const std::pair<_First,_Second> &&)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(513,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,std::pair<_First,_Second> &&)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(507,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,const std::pair<_First,_Second> &)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(500,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,std::pair<_First,_Second> &)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(494,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,const std::tuple<_Types2...> &&)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(485,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,std::tuple<_Types2...> &&)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(477,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,const std::tuple<_Types2...> &)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(468,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,std::tuple<_Types2...> &)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(460,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const> &&)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(456,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,const std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const> &)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(450,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,_This2 &&,_Rest2 ...)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(442,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &,const _This &,void (__cdecl DSS::GridData::* const &)(void) const)'
        1>        with
        1>        [
        1>            _This=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
        1>        ]
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(435,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::allocator_arg_t,const _Alloc &)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(427,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(_Other &&)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(406,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(const std::pair<_Other1,_Other2> &&) noexcept(<expr>)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(399,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::pair<_Other1,_Other2> &&) noexcept(<expr>)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(393,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(const std::pair<_Other1,_Other2> &) noexcept(<expr>)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(386,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::pair<_Other1,_Other2> &) noexcept(<expr>)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(381,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(const std::tuple<_Types1...> &&) noexcept(<expr>)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(373,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::tuple<_Types1...> &&) noexcept(<expr>)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(366,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(const std::tuple<_Types1...> &) noexcept(<expr>)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(358,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(std::tuple<_Types1...> &) noexcept(<expr>)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(346,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(_This2 &&,_Rest2 ...) noexcept(<expr>)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(336,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(const _This &,void (__cdecl DSS::GridData::* const &)(void) const) noexcept(<expr>)'
        1>        with
        1>        [
        1>            _This=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
        1>        ]
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(329,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(void) noexcept(<expr>)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(322,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(_Tag,const _Alloc &,_Tpl &&)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(319,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(_Tag,const _Alloc &,_Tpl &&,std::integer_sequence<size_t,_Indices2...>)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(313,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(_Tag,const _Alloc &,_This2 &&,_Rest2 ...)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(307,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(_Tag,_Tpl &&)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(304,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(_Tag,_Tpl &&,std::integer_sequence<size_t,_Indices1...>)'
        1>        C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\tuple(300,5):
        1>        or       'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>::tuple(_Tag,_This2 &&,_Rest2 ...)'
        1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(46,43):
        1>        while trying to match the argument list '(std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>, _Ty)'
        1>        with
        1>        [
        1>            _Ty=void (__cdecl DSS::GridData::* )(void) const
        1>        ]
        1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(46,43):
        1>    the template instantiation context (the oldest one first) is
        1>        D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,28):
        1>        see reference to function template instantiation 'auto QtConcurrent::run<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>&,void(__cdecl DSS::GridData::* )(void) const>(Function,void (__cdecl DSS::GridData::* &&)(void) const)' being compiled
        1>        with
        1>        [
        1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>> &
        1>        ]
        1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(65,12):
        1>        see reference to function template instantiation 'auto QtConcurrent::run<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>&,_Ty>(QThreadPool *,Function,_Ty &&)' being compiled
        1>        with
        1>        [
        1>            _Ty=void (__cdecl DSS::GridData::* )(void) const,
        1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>> &
        1>        ]
        1>C:\Qt\6.10.0\msvc2022_64\include\QtCore\qfuture_impl.h(185,61): error C2039: '()': is not a member of 'std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>'
        1>(compiling source file '/QualityChart.cpp')
        1>    C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.44.35207\include\memory(3347,7):
        1>    see declaration of 'std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>'
        1>    C:\Qt\6.10.0\msvc2022_64\include\QtCore\qfuture_impl.h(185,61):
        1>    the template instantiation context (the oldest one first) is
        1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(48,73):
        1>        see reference to class template instantiation 'QtConcurrent::TaskResolver<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>' being compiled
        1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(218,30):
        1>        see reference to class template instantiation 'QtConcurrent::TaskResolverHelper<std::integral_constant<bool,false>,Function,void (__cdecl DSS::GridData::* )(void) const>' being compiled
        1>        with
        1>        [
        1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
        1>        ]
        1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(213,18):
        1>        see reference to class template instantiation 'QtConcurrent::PromiseTaskResolver<Function,void (__cdecl DSS::GridData::* )(void) const>' being compiled
        1>        with
        1>        [
        1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
        1>        ]
        1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(190,53):
        1>        see reference to class template instantiation 'QtPrivate::ArgResolver<Function>' being compiled
        1>        with
        1>        [
        1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
        1>        ]
        1>C:\Qt\6.10.0\msvc2022_64\include\QtCore\qfuture_impl.h(185,22): error C3770: '<error type>': is not a valid base class
        1>(compiling source file '/QualityChart.cpp')
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(190,53): error C3083: 'IsPromise': the symbol to the left of a '::' must be a type
        1>(compiling source file '/QualityChart.cpp')
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(190,64): error C2039: 'value': is not a member of 'QtPrivate::ArgResolver<Function>'
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(190,64): error C2039:         with
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(190,64): error C2039:         [
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(190,64): error C2039:             Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(190,64): error C2039:         ]
        1>(compiling source file '/QualityChart.cpp')
        1>    C:\Qt\6.10.0\msvc2022_64\include\QtCore\qfuture_impl.h(185,8):
        1>    see declaration of 'QtPrivate::ArgResolver<Function>'
        1>        with
        1>        [
        1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
        1>        ]
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(196,72): error C2039: 'PromiseType': is not a member of 'QtPrivate::ArgResolver<Function>'
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(196,72): error C2039:         with
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(196,72): error C2039:         [
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(196,72): error C2039:             Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(196,72): error C2039:         ]
        1>(compiling source file '/QualityChart.cpp')
        1>    C:\Qt\6.10.0\msvc2022_64\include\QtCore\qfuture_impl.h(185,8):
        1>    see declaration of 'QtPrivate::ArgResolver<Function>'
        1>        with
        1>        [
        1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
        1>        ]
        1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(196,72):
        1>    the template instantiation context (the oldest one first) is
        1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(48,73):
        1>        see reference to class template instantiation 'QtConcurrent::TaskResolver<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>' being compiled
        1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(218,30):
        1>        see reference to class template instantiation 'QtConcurrent::TaskResolverHelper<std::integral_constant<bool,false>,Function,void (__cdecl DSS::GridData::* )(void) const>' being compiled
        1>        with
        1>        [
        1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
        1>        ]
        1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(213,18):
        1>        see reference to class template instantiation 'QtConcurrent::PromiseTaskResolver<Function,void (__cdecl DSS::GridData::* )(void) const>' being compiled
        1>        with
        1>        [
        1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
        1>        ]
        1>        C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(195,17):
        1>        while compiling class template member function 'auto QtConcurrent::PromiseTaskResolver<Function,void (__cdecl DSS::GridData::* )(void) const>::run(std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const> &&,const QtConcurrent::TaskStartParameters &)'
        1>        with
        1>        [
        1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
        1>        ]
        1>            C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(48,73):
        1>            see the first reference to 'QtConcurrent::PromiseTaskResolver<Function,void (__cdecl DSS::GridData::* )(void) const>::run' in 'QtConcurrent::run'
        1>        with
        1>        [
        1>            Function=std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>
        1>        ]
        1>            C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentrun.h(65,12):
        1>            see the first reference to 'QtConcurrent::run' in 'QtConcurrent::run'
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(196,72): error C2061: syntax error: identifier 'PromiseType'
        1>(compiling source file '/QualityChart.cpp')
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,61): error C2065: 'PromiseType': undeclared identifier
        1>(compiling source file '/QualityChart.cpp')
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,21): error C2923: 'QtConcurrent::StoredFunctionCallWithPromise': 'PromiseType' is not a valid template type argument for parameter 'PromiseType'
        1>(compiling source file '/QualityChart.cpp')
        1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,61):
        1>    see declaration of 'PromiseType'
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,82): error C2641: cannot deduce template arguments for 'QtConcurrent::StoredFunctionCallWithPromise'
        1>(compiling source file '/QualityChart.cpp')
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,82): error C2780: 'QtConcurrent::StoredFunctionCallWithPromise<Function,PromiseType,Args...> QtConcurrent::StoredFunctionCallWithPromise(std::tuple<decay<_Ty>::type,decay<_Types>::type...> &&,std::integer_sequence<size_t,Is...>)': expects 2 arguments - 1 provided
        1>(compiling source file '/QualityChart.cpp')
        1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(162,5):
        1>    see declaration of 'QtConcurrent::StoredFunctionCallWithPromise'
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,82): error C2783: 'QtConcurrent::StoredFunctionCallWithPromise<Function,PromiseType,Args...> QtConcurrent::StoredFunctionCallWithPromise(std::tuple<decay<_Ty>::type,decay<_Types>::type...> &&)': could not deduce template argument for 'Function'
        1>(compiling source file '/QualityChart.cpp')
        1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(148,5):
        1>    see declaration of 'QtConcurrent::StoredFunctionCallWithPromise'
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,82): error C2783: 'QtConcurrent::StoredFunctionCallWithPromise<Function,PromiseType,Args...> QtConcurrent::StoredFunctionCallWithPromise(std::tuple<decay<_Ty>::type,decay<_Types>::type...> &&)': could not deduce template argument for 'PromiseType'
        1>(compiling source file '/QualityChart.cpp')
        1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(148,5):
        1>    see declaration of 'QtConcurrent::StoredFunctionCallWithPromise'
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,82): error C2783: 'QtConcurrent::StoredFunctionCallWithPromise<Function,PromiseType,Args...> QtConcurrent::StoredFunctionCallWithPromise(Function &&,Args ...)': could not deduce template argument for 'PromiseType'
        1>(compiling source file '/QualityChart.cpp')
        1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(142,5):
        1>    see declaration of 'QtConcurrent::StoredFunctionCallWithPromise'
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,82): error C2784: 'QtConcurrent::StoredFunctionCallWithPromise<Function,PromiseType,Args...> QtConcurrent::StoredFunctionCallWithPromise(QtConcurrent::StoredFunctionCallWithPromise<Function,PromiseType,Args...>)': could not deduce template argument for 'QtConcurrent::StoredFunctionCallWithPromise<Function,PromiseType,Args...>' from 'std::tuple<std::unique_ptr<DSS::GridData,std::default_delete<DSS::GridData>>,void (__cdecl DSS::GridData::* )(void) const>'
        1>(compiling source file '/QualityChart.cpp')
        1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(138,8):
        1>    see declaration of 'QtConcurrent::StoredFunctionCallWithPromise'
        1>C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(197,82): error C2514: 'QtConcurrent::StoredFunctionCallWithPromise': class template cannot be constructed
        1>(compiling source file '/QualityChart.cpp')
        1>    C:\Qt\6.10.0\msvc2022_64\include\QtConcurrent\qtconcurrentstoredfunctioncall.h(138,8):
        1>    see declaration of 'QtConcurrent::StoredFunctionCallWithPromise'
        1>D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,5): error C2679: binary '=': no operator found which takes a right-hand operand of type 'void' (or there is no acceptable conversion)
        1>(compiling source file '/QualityChart.cpp')
        1>    C:\Qt\6.10.0\msvc2022_64\include\QtCore\qfuture.h(307,1):
        1>    could be 'QFuture<void> &QFuture<void>::operator =(QFuture<void> &&)'
        1>        D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,5):
        1>        'QFuture<void> &QFuture<void>::operator =(QFuture<void> &&)': cannot convert argument 2 from 'void' to 'QFuture<void> &&'
        1>            D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,31):
        1>            Expressions of type void cannot be converted to other types
        1>    C:\Qt\6.10.0\msvc2022_64\include\QtCore\qfuture.h(307,1):
        1>    or       'QFuture<void> &QFuture<void>::operator =(const QFuture<void> &)'
        1>        D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,5):
        1>        'QFuture<void> &QFuture<void>::operator =(const QFuture<void> &)': cannot convert argument 2 from 'void' to 'const QFuture<void> &'
        1>            D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,31):
        1>            Expressions of type void cannot be converted to other types
        1>    C:\Qt\6.10.0\msvc2022_64\include\QtCore\qfuture.h(53,20):
        1>    or       'QFuture<void> &QFuture<void>::operator =(const QFuture<U> &)'
        1>        D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,5):
        1>        'QFuture<void> &QFuture<void>::operator =(const QFuture<U> &)': could not deduce template argument for 'const QFuture<U> &' from 'void'
        1>    D:\Github\DSS\DeepSkyStacker\QualityChart.cpp(234,5):
        1>    while trying to match the argument list '(QFuture<void>, void)'
        
        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by JonB
        #10

        @Perdrix
        The following example compiles fine just as I expected:

        #include <QCoreApplication>
        #include <QtConcurrent>
        
        void func1()
        {
        
        }
        
        class AClass
        {
        public:
            void func2() const {}
            void func3(int arg1, float arg2) const {}
            void func4(QPromise<void> &promise, int arg1, float arg2) const {}
        };
        
        int main(int argc, char *argv[])
        {
            QCoreApplication a(argc, argv);
        
            QFuture<void> fut1 = QtConcurrent::run(func1);
        
            AClass *instance(new AClass);
        
            QFuture<void> fut2 = QtConcurrent::run(&AClass::func2, instance);
        
            QFuture<void> fut3 = QtConcurrent::run(&AClass::func3, instance, 42, 42.0f);
            
            QFuture<void> fut4 = QtConcurrent::run(&AClass::func4, instance, 42, 42.0f);
        
            return a.exec();
        }
        

        gcc 13.3.0 and Qt 6.4.2 as supplied with Ubuntu 24.04 distro.

        1 Reply Last reply
        1
        • PerdrixP Offline
          PerdrixP Offline
          Perdrix
          wrote on last edited by Perdrix
          #11

          OK I've reduced the replication to a relatively simple case:

          You can find the source files here:
          http://www.perdrix.co.uk/TestQtConcurrent.zip

          If you want the entire MSVC solution, say so and I will zip that up and make it available.
          David

          JonBJ 3 Replies Last reply
          0
          • PerdrixP Perdrix

            OK I've reduced the replication to a relatively simple case:

            You can find the source files here:
            http://www.perdrix.co.uk/TestQtConcurrent.zip

            If you want the entire MSVC solution, say so and I will zip that up and make it available.
            David

            JonBJ Offline
            JonBJ Offline
            JonB
            wrote on last edited by
            #12

            @Perdrix
            Can't you start by just copy/paste my code and say whether that works or not....?!

            1 Reply Last reply
            0
            • PerdrixP Offline
              PerdrixP Offline
              Perdrix
              wrote on last edited by
              #13

              I did precisely that and then extended it until I got a fail.
              D.

              JonBJ 1 Reply Last reply
              0
              • PerdrixP Perdrix

                I did precisely that and then extended it until I got a fail.
                D.

                JonBJ Offline
                JonBJ Offline
                JonB
                wrote on last edited by
                #14

                @Perdrix Ah, well it helps if you say that! I will have a look at your code to see if I can spot something different.....

                1 Reply Last reply
                0
                • PerdrixP Perdrix

                  OK I've reduced the replication to a relatively simple case:

                  You can find the source files here:
                  http://www.perdrix.co.uk/TestQtConcurrent.zip

                  If you want the entire MSVC solution, say so and I will zip that up and make it available.
                  David

                  JonBJ Offline
                  JonBJ Offline
                  JonB
                  wrote on last edited by JonB
                  #15

                  @Perdrix said in Trying to use QFuture and QFutureWatcher for the first time:

                  You can find the source files here:
                  http://www.perdrix.co.uk/TestQtConcurrent.zip

                  If I just open it in Chrome nothing happens.
                  If I force it to download (it seems to start but never finishes) I get about 4k and then it stops.
                  If you want someone to access this then please verify it works for you from an incognito browsing session....
                  UPDATE OK, although the download does not finish properly if I rename the temporary .crdownload file to .zip it seems to have content....

                  1 Reply Last reply
                  0
                  • PerdrixP Offline
                    PerdrixP Offline
                    Perdrix
                    wrote on last edited by Perdrix
                    #16

                    The zip file is only 4kB... - worked for me in an incognito Chrome session on Windows, but did bitch that it wasn't https ...

                    D.

                    1 Reply Last reply
                    0
                    • PerdrixP Perdrix

                      OK I've reduced the replication to a relatively simple case:

                      You can find the source files here:
                      http://www.perdrix.co.uk/TestQtConcurrent.zip

                      If you want the entire MSVC solution, say so and I will zip that up and make it available.
                      David

                      JonBJ Offline
                      JonBJ Offline
                      JonB
                      wrote on last edited by JonB
                      #17

                      @Perdrix
                      So I have copied/pasted the 3 files you supply into their own project.

                      I don't even see how what you have supplied would compile. In griddata.h there are two errors:

                      • No template named QPromise
                      • Use of undeclared identifier std

                      These are both visible in Creator. And make sense to me, as the necessary includes are not in griddata.h. That is improved with the addition of #include <QPromise> in griddata.h. (And I had to comment out a couple of other includes.)

                      Now I think I am down to a couple of compilation error messages like you have been showing. I will investigate further... :)

                      The zip file is only 4kB...

                      I know! But for whatever reason my Chrome does not complete the download of this file from you. It seems to get the full content but never sees it finish, so does not rename the temporary download file to the intended .zip. But doing that manually I seem to have the full zip so I am good.

                      1 Reply Last reply
                      0
                      • PerdrixP Offline
                        PerdrixP Offline
                        Perdrix
                        wrote on last edited by Perdrix
                        #18

                        Don't need a template GridData only uses a reference: QPrimose<void>& promise but won't harm to include it.

                        Don't need to do anything for std:: stuff, so long as you call it out by its full name

                        JonBJ 1 Reply Last reply
                        0
                        • PerdrixP Perdrix

                          Don't need a template GridData only uses a reference: QPrimose<void>& promise but won't harm to include it.

                          Don't need to do anything for std:: stuff, so long as you call it out by its full name

                          JonBJ Offline
                          JonBJ Offline
                          JonB
                          wrote on last edited by JonB
                          #19

                          @Perdrix

                          @Perdrix said in Trying to use QFuture and QFutureWatcher for the first time:

                              void
                                  interpolate(QPromise<void>& promise,
                                      const std::vector<double>& x, const std::vector<double>& y, const std::vector<double>& z,
                                      const std::vector<double>& xg, const std::vector<double>& yg, std::vector<double>& zg,
                                      InterpolationType type, float data = 0.0);
                          

                          All the other std::vector<double>&s are const, but not the final zg one. Intended or not? This is the error.

                          If you make that one const too it compiles.

                          If you test just

                          void
                          GridData::interpolate2(QPromise<void>& promise,
                                                 const std::vector<double> &x)
                          
                          QFuture<void>future2 = QtConcurrent::run(&GridData::interpolate2, instance.get(), xValues);
                          

                          That works. But take out the const and it fails.

                          You could have reduced it down to just this parameter type, nothing to do with all the member methods:

                          void func1(QPromise<void>& promise, std::vector<double> &xValues)
                          {
                          }
                          
                          QFuture<void> fut1 = QtConcurrent::run(func1, xValues);
                          

                          std::vector<double> &xValues does not pass. Either (or both) of adding in const or removing the & do pass.

                          I don't use std::vector and am going leave it to you now. You may need e.g. @Christian-Ehrlicher to explain the deep reason. I am not sure anyway about accessing non-const reference to arrays in the thread(s) run by QtConcurrent. As I wrote, if you can change yours to const std::vector<double>& zg or std::vector<double> zg it won't matter. Though of course we would like to hear from a C++ expert for the definitive explanation!

                          Phew!

                          And, yes, no, C++ compiler errors, especially with templates, are not the simplest.

                          P.S.
                          Just this fails in same way:

                          void func1(QPromise<void>& promise, int &test)
                          {
                          }
                          
                          int test;
                          QtConcurrent::run(func1, test);
                          

                          And again changing func1() to either const int &test or int test works. So nothing to do with std::vector. You evidently cannot pass a mutable reference parameter here, I am thinking QtConcurrent::run() does not allow this because of threading/need to copy requirements? Now that we knows this is the issue we find e.g.
                          https://stackoverflow.com/questions/25091518/qt-concurrent-run-pass-value-by-reference-but-the-memory-address-is-different

                          QtConcurrent::run creates internal copies of all arguments that you pass to it. Your thread function is then given access to these copies, not to the original arguments. Passing something by raw reference does not prevent creation of a copy. In other words, QtConcurrent::run enforces pass-by-value semantics internally.

                          The address that you see in the ref function is the address of that internal copy.

                          For this reason, if you specifically want access to the original object, instead of a naked reference you have to use something with pointer semantics or with "copyable reference" semantics.

                          That was a few years ago. Perhaps the definitions/compiler now show an attempt to pass a non-const reference as a compile-time error where it used to get through but then did not act as expected?

                          1 Reply Last reply
                          1
                          • PerdrixP Offline
                            PerdrixP Offline
                            Perdrix
                            wrote on last edited by Perdrix
                            #20

                            Argh! I need that to be a non const vector reference, as the interpolate code populates that vector.

                            @JonB Thanks for finding out what was stopping it working! I'd never have guessed that was the problem.

                            I've updated the files so it should compile OK on Linux, and refreshed the zip file:
                            http://www.perdrix.co.uk/TestQtConcurrent.zip
                            @Christian-Ehrlicher Can you advise please?

                            Meantime I will change the code to use std::ref(zgEccentricity).

                            UPDATE: using std::ref(zgEccentricity) worked fine. May I suggest that some documentation updates to say you can't pass a non-const thing using a normal reference and that using std::ref might be useful. Either that or?
                            David

                            JonBJ 1 Reply Last reply
                            0
                            • PerdrixP Perdrix

                              Argh! I need that to be a non const vector reference, as the interpolate code populates that vector.

                              @JonB Thanks for finding out what was stopping it working! I'd never have guessed that was the problem.

                              I've updated the files so it should compile OK on Linux, and refreshed the zip file:
                              http://www.perdrix.co.uk/TestQtConcurrent.zip
                              @Christian-Ehrlicher Can you advise please?

                              Meantime I will change the code to use std::ref(zgEccentricity).

                              UPDATE: using std::ref(zgEccentricity) worked fine. May I suggest that some documentation updates to say you can't pass a non-const thing using a normal reference and that using std::ref might be useful. Either that or?
                              David

                              JonBJ Offline
                              JonBJ Offline
                              JonB
                              wrote on last edited by JonB
                              #21

                              @Perdrix said in Trying to use QFuture and QFutureWatcher for the first time:

                              Argh! I need that to be a non const vector reference, as the interpolate code populates that vector.

                              You have just crossed with my final update to my reply. Have a read through the stackoverflow post (or try to find your own), there may be stuff there which allows you to do something, e.g.

                              QtConcurrent::run(func1, std::ref(test));
                              

                              seems to compile against int &test, I don't know anything about std::ref() but it looks good?

                              P.S.
                              Being an originally C person, without all this C++ nonsense, references etc. I bet

                              void func1(QPromise<void>& promise, int *test) {}
                              QtConcurrent::run(func1, &test);
                              

                              would work ;-) [But of course don't do this!]

                              1 Reply Last reply
                              0
                              • PerdrixP Offline
                                PerdrixP Offline
                                Perdrix
                                wrote on last edited by
                                #22

                                I found the line about the use of std::ref in the docs, so it is there, but it is fairly easy to miss it.

                                D.

                                JonBJ 1 Reply Last reply
                                0
                                • PerdrixP Perdrix

                                  I found the line about the use of std::ref in the docs, so it is there, but it is fairly easy to miss it.

                                  D.

                                  JonBJ Offline
                                  JonBJ Offline
                                  JonB
                                  wrote on last edited by
                                  #23

                                  @Perdrix
                                  It would be good for this thread if you provided the link to whatever you say it says about std::ref() and also pasted the relevant sentence/paragraph here, for others to see in future.

                                  1 Reply Last reply
                                  0
                                  • PerdrixP Offline
                                    PerdrixP Offline
                                    Perdrix
                                    wrote on last edited by Perdrix
                                    #24

                                    It is buried in the "Additional API Features" section of the doc and says:
                                    image.png

                                    It should be right up front where QtConcurrent::run() is described, saying very clearly that you must use std:ref(variable) when passing a reference to a modifiable object.

                                    JonBJ 1 Reply Last reply
                                    0
                                    • PerdrixP Perdrix

                                      It is buried in the "Additional API Features" section of the doc and says:
                                      image.png

                                      It should be right up front where QtConcurrent::run() is described, saying very clearly that you must use std:ref(variable) when passing a reference to a modifiable object.

                                      JonBJ Offline
                                      JonBJ Offline
                                      JonB
                                      wrote on last edited by
                                      #25

                                      @Perdrix
                                      OK, for whatever reason (maybe misplaced) this appears in subsection https://doc.qt.io/qt-6/qtconcurrentrun.html#using-lambda-functions, for anyone reading this.

                                      1 Reply Last reply
                                      0

                                      • Login

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • Users
                                      • Groups
                                      • Search
                                      • Get Qt
                                      • Unsolved