Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Build gadgetron master #438

Merged
merged 118 commits into from
Mar 2, 2023
Merged

Build gadgetron master #438

merged 118 commits into from
Mar 2, 2023

Conversation

paskino
Copy link
Contributor

@paskino paskino commented Oct 6, 2020

This changes should allow the build of Gadgetron master.
closes #378
closes #384

the CBLAS library needed by Gadgetron is currently found by Gadgetron's CMake.
However, in the case that this fails the user can pass the variable
CBLAS_LIBRARY and CBLAS_INCLUDE_DIR pointing to the cblas library and
the location of cblas.h respectively. These are passed to Gadgetron's cmake as
cached variables.
@paskino paskino requested a review from KrisThielemans October 6, 2020 13:53
@paskino
Copy link
Contributor Author

paskino commented Oct 6, 2020

It'd be good to decide which commit tag to use for Gadgetron in version_config.cmake
This one is the minimum one @johannesmayer would require to build his RPE encoding branch

Copy link
Member

@KrisThielemans KrisThielemans left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks fine to me.

@paskino
Copy link
Contributor Author

paskino commented Oct 7, 2020

But Gadgetron on my VM doesn't seem to build! I had checked but there may have been some caching mechanisms that made it work then.

The culprit is rather simple, really, CMake is giving the wrong directory for includes to Gadgetron:

cd /home/sirfuser/devel/buildVM/builds/Gadgetron/build/core && /usr/bin/c++  
-DARMA_64BIT_WORD -DARMA_DONT_USE_WRAPPER 
-DARMA_USE_CXX11 -DFORCE_LIMIT_OPENBLAS_NUM_THREADS -DUSE_OMP -Dgadgetron_core_EXPORTS 
-I/home/sirfuser/devel/buildVM/builds/Gadgetron/build/include 
-I/home/sirfuser/devel/buildVM/sources/Gadgetron/core 
-I/home/sirfuser/devel/buildVM/sources/Gadgetron/toolboxes/core 
-I/home/sirfuser/devel/buildVM/builds/Gadgetron/build/toolboxes/core 
-I/home/sirfuser/devel/buildVM/sources/Gadgetron/toolboxes/core/cpu 
-I/home/sirfuser/devel/buildVM/sources/Gadgetron/toolboxes/core/cpu/image 
-I/home/sirfuser/devel/buildVM/sources/Gadgetron/toolboxes/core/cpu/algorithm 
-I/home/sirfuser/devel/buildVM/sources/Gadgetron/toolboxes/core/cpu/hostutils 
-I/home/sirfuser/devel/buildVM/sources/Gadgetron/toolboxes/core/cpu/math 
-I/home/sirfuser/devel/buildVM/sources/Gadgetron/apps/gadgetron 
-I/home/sirfuser/devel/buildVM/sources/Gadgetron/toolboxes/log 
-isystem /home/sirfuser/devel/install/include/ismrmrd  
-DBOOST_ERROR_CODE_HEADER_ONLY -DBOOST_SYSTEM_NO_DEPRECATED 
-fopenmp 
-Werror=return-type -Werror=terminate -Werror=non-virtual-dtor 
-O3 -DNDEBUG -fPIC   -std=gnu++1z 
-o CMakeFiles/gadgetron_core.dir/Channel.cpp.o 
-c /home/sirfuser/devel/buildVM/sources/Gadgetron/core/Channel.cpp

I passes the include directory of our install, which is good but it does it with -isystem and appending ismrmrd, which is wrong.

The CMake line that does it reads:

target_include_directories(gadgetron_core PUBLIC
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
        $<INSTALL_INTERFACE:include>
        )

I don't understand very well this generator expression, but it doesn't look to me that it should be wrong. But it's difficult to debug.

@paskino
Copy link
Contributor Author

paskino commented Oct 7, 2020

If I understand correctly, we are trying to pass Gadgetron the include directory here as

-DCMAKE_INCLUDE_PATH:PATH=${SUPERBUILD_INSTALL_DIR}/include

However, CMAKE_INCLUDE_PATH provides a search path for the find_file() and find_path() commands which is not what we want? We want to add to the standard include directories of Gadgetron.

@KrisThielemans
Copy link
Member

However, CMAKE_INCLUDE_PATH provides a search path for the find_file() and find_path() commands which is not what we want? We want to add to the standard include directories of Gadgetron.

That's correct. A lot of the External* files have lines setting CMAKE_* variables, but they shouldn't be there. Even CMAKE_LIBRARY_PATH shouldn't be set as it should find it from the PREFIX or some other default path.

@KrisThielemans
Copy link
Member

-isystem /home/sirfuser/devel/install/include/ismrmrd

this isn't something that we do. It has to come from how Gadgetron depends on ISMRMRD. Gadgetron master uses dependencies on ISMRMRD::ISMRMRD (see e.g.here, so that implies it comes from ISMRMRDConfig.cmake.

That uses include here. It uses to be include/ismrmrd but that was fixed 2 years ago ismrmrd/ismrmrd#109 which seems to be between ISMRMRD 1.4.0 and 1.4.1. I think we're using the latter, so I don't understand. In any case, you'd want to update ISMRMD version if you use Gadgetron master. Most recent seems 1.4.2.1

@paskino
Copy link
Contributor Author

paskino commented Dec 10, 2020

Built ISMRMRD 1.4.2.1, now Gadgetron fails with

/home/sirfuser/devel/buildVM/sources/Gadgetron/toolboxes/core/cpu/math/hoNDArray_reductions.cpp:3:10: fatal error: range/v3/core.hpp: No such file or directory
 #include <range/v3/core.hpp>
          ^~~~~~~~~~~~~~~~~~~
compilation terminated.

It seems now Gadgetron depends on range-v3

@paskino
Copy link
Contributor Author

paskino commented Dec 11, 2020

I'll add the range-v3 to the superbuild (it's a header only library!).

Next problem

In file included from /home/sirfuser/devel/buildVM/sources/Gadgetron/toolboxes/klt/cpu/hoNDKLT.cpp:6:0:
/home/sirfuser/devel/buildVM/sources/Gadgetron/toolboxes/core/cpu/hoNDArray_utils.h: In function ‘auto Gadgetron::concat_along_dimension(const COLL&, size_t)’:
/home/sirfuser/devel/buildVM/sources/Gadgetron/toolboxes/core/cpu/hoNDArray_utils.h:1015:121: error: cannot deduce template arguments for ‘logical_and’ from ()
 umulate(arrays | view::transform(dimensions_valid), true, std::logical_and() );
                                                                            ^
/home/sirfuser/devel/buildVM/sources/Gadgetron/toolboxes/core/cpu/hoNDArray_utils.h:1021:81: error: cannot deduce template arguments for ‘multiplies’ from ()
                                                  size_t(1), std::multiplies());

@KrisThielemans
Copy link
Member

not sure. sorry. You'll need to raise an issue on Gadgetron. More than likely they'll say that you need to have a more recent version of gcc (and potentially C++), but as their CMake doesn't enforce it, they should know about this.

@paskino
Copy link
Contributor Author

paskino commented Jan 20, 2021

Opened an issue in gadgetron/gadgetron#925

@paskino
Copy link
Contributor Author

paskino commented Jan 23, 2021

Apparently Gadgetron requires C++17 which means GCC 9. gadgetron/gadgetron#925 (comment)

@paskino
Copy link
Contributor Author

paskino commented Jan 25, 2021

This also requires CUDA SDK >= 10.2 to build Gadgetron with CUDA gadgets, otherwise the build fails with this error:

nvcc fatal : Value 'c++17' is not defined for option 'std'

https://on-demand.gputechconf.com/supercomputing/2019/pdf/sc1936-gpu-programming-with-standard-c++17.pdf

@paskino
Copy link
Contributor Author

paskino commented Jan 26, 2021

currently Gadgetron test build fails:

/usr/include/c++/9/tuple:1394:33: error: no match for ‘operator==’ (operand types are ‘std::__tuple_element_t<0, std::tuple<ISMRMRD::AcquisitionHeader, Gadgetron::hoNDArray<std::complex<float> >, std::optional<Gadgetron::hoNDArray<float> > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} and ‘std::__tuple_element_t<0, std::tuple<ISMRMRD::AcquisitionHeader, Gadgetron::hoNDArray<std::complex<float> >, std::optional<Gadgetron::hoNDArray<float> > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’})
 1394 |  return bool(std::get<__i>(__t) == std::get<__i>(__u))
      |              ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
``` [ 92%] Building CXX object test/CMakeFiles/test_all.dir/read_writer_test.cpp.o In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple: In instantiation of ‘static constexpr bool std::__tuple_compare<_Tp, _Up, __i, __size>::__eq(const _Tp&, const _Up&) [with _Tp = std::tuple >, std::optional > >; _Up = std::tuple >, std::optional > >; long unsigned int __i = 0; long unsigned int __size = 3]’: /usr/include/c++/9/tuple:1427:29: required from ‘constexpr bool std::operator==(const std::tuple<_Tps ...>&, const std::tuple<_Elements ...>&) [with _TElements = {ISMRMRD::AcquisitionHeader, Gadgetron::hoNDArray >, std::optional >}; _UElements = {ISMRMRD::AcquisitionHeader, Gadgetron::hoNDArray >, std::optional >}]’ /usr/include/c++/9/bits/stl_algobase.h:820:22: required from ‘static bool std::__equal<_BoolType>::equal(_II1, _II1, _II2) [with _II1 = const std::tuple >, std::optional > >*; _II2 = const std::tuple >, std::optional > >*; bool _BoolType = false]’ /usr/include/c++/9/bits/stl_algobase.h:851:43: required from ‘bool std::__equal_aux(_II1, _II1, _II2) [with _II1 = const std::tuple >, std::optional > >*; _II2 = const std::tuple >, std::optional > >*]’ /usr/include/c++/9/bits/stl_algobase.h:1069:30: required from ‘bool std::equal(_II1, _II1, _II2) [with _II1 = __gnu_cxx::__normal_iterator >, std::optional > >*, std::vector >, std::optional > > > >; _II2 = __gnu_cxx::__normal_iterator >, std::optional > >*, std::vector >, std::optional > > > >]’ /usr/include/c++/9/bits/stl_vector.h:1890:21: required from ‘bool std::operator==(const std::vector<_Tp, _Alloc>&, const std::vector<_Tp, _Alloc>&) [with _Tp = std::tuple >, std::optional > >; _Alloc = std::allocator >, std::optional > > >]’ /home/ofn77899/devel/installg/include/gtest/gtest.h:1392:11: required from ‘testing::AssertionResult testing::internal::CmpHelperEQ(const char*, const char*, const T1&, const T2&) [with T1 = std::vector >, std::optional > > >; T2 = std::vector >, std::optional > > >]’ /home/ofn77899/devel/installg/include/gtest/gtest.h:1421:23: required from ‘static testing::AssertionResult testing::internal::EqHelper::Compare(const char*, const char*, const T1&, const T2&) [with T1 = std::vector >, std::optional > > >; T2 = std::vector >, std::optional > > >; bool lhs_is_null_literal = false]’ /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:188:5: required from here /usr/include/c++/9/tuple:1394:33: error: no match for ‘operator==’ (operand types are ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} and ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’}) 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/iosfwd:40, from /usr/include/c++/9/system_error:40, from /usr/include/c++/9/bits/std_mutex.h:39, from /usr/include/c++/9/condition_variable:39, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/postypes.h:222:5: note: candidate: ‘template bool std::operator==(const std::fpos<_StateT>&, const std::fpos<_StateT>&)’ 222 | operator==(const fpos<_StateT>& __lhs, const fpos<_StateT>& __rhs) | ^~~~~~~~ /usr/include/c++/9/bits/postypes.h:222:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::fpos<_StateT>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/stl_algobase.h:64, from /usr/include/c++/9/bits/char_traits.h:39, from /usr/include/c++/9/string:40, from /usr/include/c++/9/stdexcept:39, from /usr/include/c++/9/system_error:41, from /usr/include/c++/9/bits/std_mutex.h:39, from /usr/include/c++/9/condition_variable:39, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/stl_pair.h:448:5: note: candidate: ‘template constexpr bool std::operator==(const std::pair<_T1, _T2>&, const std::pair<_T1, _T2>&)’ 448 | operator==(const pair<_T1, _T2>& __x, const pair<_T1, _T2>& __y) | ^~~~~~~~ /usr/include/c++/9/bits/stl_pair.h:448:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::pair<_T1, _T2>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/stl_algobase.h:67, from /usr/include/c++/9/bits/char_traits.h:39, from /usr/include/c++/9/string:40, from /usr/include/c++/9/stdexcept:39, from /usr/include/c++/9/system_error:41, from /usr/include/c++/9/bits/std_mutex.h:39, from /usr/include/c++/9/condition_variable:39, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/stl_iterator.h:325:5: note: candidate: ‘template constexpr bool std::operator==(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_Iterator>&)’ 325 | operator==(const reverse_iterator<_Iterator>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_iterator.h:325:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::reverse_iterator<_Iterator>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/stl_algobase.h:67, from /usr/include/c++/9/bits/char_traits.h:39, from /usr/include/c++/9/string:40, from /usr/include/c++/9/stdexcept:39, from /usr/include/c++/9/system_error:41, from /usr/include/c++/9/bits/std_mutex.h:39, from /usr/include/c++/9/condition_variable:39, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/stl_iterator.h:363:5: note: candidate: ‘template constexpr bool std::operator==(const std::reverse_iterator<_Iterator>&, const std::reverse_iterator<_IteratorR>&)’ 363 | operator==(const reverse_iterator<_IteratorL>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_iterator.h:363:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::reverse_iterator<_Iterator>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/stl_algobase.h:67, from /usr/include/c++/9/bits/char_traits.h:39, from /usr/include/c++/9/string:40, from /usr/include/c++/9/stdexcept:39, from /usr/include/c++/9/system_error:41, from /usr/include/c++/9/bits/std_mutex.h:39, from /usr/include/c++/9/condition_variable:39, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/stl_iterator.h:1139:5: note: candidate: ‘template constexpr bool std::operator==(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorR>&)’ 1139 | operator==(const move_iterator<_IteratorL>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_iterator.h:1139:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::move_iterator<_IteratorL>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/stl_algobase.h:67, from /usr/include/c++/9/bits/char_traits.h:39, from /usr/include/c++/9/string:40, from /usr/include/c++/9/stdexcept:39, from /usr/include/c++/9/system_error:41, from /usr/include/c++/9/bits/std_mutex.h:39, from /usr/include/c++/9/condition_variable:39, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/stl_iterator.h:1145:5: note: candidate: ‘template constexpr bool std::operator==(const std::move_iterator<_IteratorL>&, const std::move_iterator<_IteratorL>&)’ 1145 | operator==(const move_iterator<_Iterator>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_iterator.h:1145:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::move_iterator<_IteratorL>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/string:41, from /usr/include/c++/9/stdexcept:39, from /usr/include/c++/9/system_error:41, from /usr/include/c++/9/bits/std_mutex.h:39, from /usr/include/c++/9/condition_variable:39, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/allocator.h:168:5: note: candidate: ‘template bool std::operator==(const std::allocator<_CharT>&, const std::allocator<_T2>&)’ 168 | operator==(const allocator<_T1>&, const allocator<_T2>&) | ^~~~~~~~ /usr/include/c++/9/bits/allocator.h:168:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::allocator<_CharT>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/basic_string.h:48, from /usr/include/c++/9/string:55, from /usr/include/c++/9/stdexcept:39, from /usr/include/c++/9/system_error:41, from /usr/include/c++/9/bits/std_mutex.h:39, from /usr/include/c++/9/condition_variable:39, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/string_view:473:5: note: candidate: ‘template constexpr bool std::operator==(std::basic_string_view<_CharT, _Traits>, std::basic_string_view<_CharT, _Traits>)’ 473 | operator==(basic_string_view<_CharT, _Traits> __x, | ^~~~~~~~ /usr/include/c++/9/string_view:473:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘ISMRMRD::AcquisitionHeader’ is not derived from ‘std::basic_string_view<_CharT, _Traits>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/basic_string.h:48, from /usr/include/c++/9/string:55, from /usr/include/c++/9/stdexcept:39, from /usr/include/c++/9/system_error:41, from /usr/include/c++/9/bits/std_mutex.h:39, from /usr/include/c++/9/condition_variable:39, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/string_view:479:5: note: candidate: ‘template constexpr bool std::operator==(std::basic_string_view<_CharT, _Traits>, std::__detail::__idt >)’ 479 | operator==(basic_string_view<_CharT, _Traits> __x, | ^~~~~~~~ /usr/include/c++/9/string_view:479:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘ISMRMRD::AcquisitionHeader’ is not derived from ‘std::basic_string_view<_CharT, _Traits>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/basic_string.h:48, from /usr/include/c++/9/string:55, from /usr/include/c++/9/stdexcept:39, from /usr/include/c++/9/system_error:41, from /usr/include/c++/9/bits/std_mutex.h:39, from /usr/include/c++/9/condition_variable:39, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/string_view:485:5: note: candidate: ‘template constexpr bool std::operator==(std::__detail::__idt >, std::basic_string_view<_CharT, _Traits>)’ 485 | operator==(__detail::__idt> __x, | ^~~~~~~~ /usr/include/c++/9/string_view:485:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘ISMRMRD::AcquisitionHeader’ is not derived from ‘std::basic_string_view<_CharT, _Traits>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/string:55, from /usr/include/c++/9/stdexcept:39, from /usr/include/c++/9/system_error:41, from /usr/include/c++/9/bits/std_mutex.h:39, from /usr/include/c++/9/condition_variable:39, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/basic_string.h:6141:5: note: candidate: ‘template bool std::operator==(const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>&, const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>&)’ 6141 | operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, | ^~~~~~~~ /usr/include/c++/9/bits/basic_string.h:6141:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/string:55, from /usr/include/c++/9/stdexcept:39, from /usr/include/c++/9/system_error:41, from /usr/include/c++/9/bits/std_mutex.h:39, from /usr/include/c++/9/condition_variable:39, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/basic_string.h:6149:5: note: candidate: ‘template typename __gnu_cxx::__enable_if::__value, bool>::__type std::operator==(const std::__cxx11::basic_string<_CharT>&, const std::__cxx11::basic_string<_CharT>&)’ 6149 | operator==(const basic_string<_CharT>& __lhs, | ^~~~~~~~ /usr/include/c++/9/bits/basic_string.h:6149:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::__cxx11::basic_string<_CharT>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/string:55, from /usr/include/c++/9/stdexcept:39, from /usr/include/c++/9/system_error:41, from /usr/include/c++/9/bits/std_mutex.h:39, from /usr/include/c++/9/condition_variable:39, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/basic_string.h:6163:5: note: candidate: ‘template bool std::operator==(const _CharT*, const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>&)’ 6163 | operator==(const _CharT* __lhs, | ^~~~~~~~ /usr/include/c++/9/bits/basic_string.h:6163:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: mismatched types ‘const _CharT*’ and ‘ISMRMRD::AcquisitionHeader’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/string:55, from /usr/include/c++/9/stdexcept:39, from /usr/include/c++/9/system_error:41, from /usr/include/c++/9/bits/std_mutex.h:39, from /usr/include/c++/9/condition_variable:39, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/basic_string.h:6175:5: note: candidate: ‘template bool std::operator==(const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>&, const _CharT*)’ 6175 | operator==(const basic_string<_CharT, _Traits, _Alloc>& __lhs, | ^~~~~~~~ /usr/include/c++/9/bits/basic_string.h:6175:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::__cxx11::basic_string<_CharT, _Traits, _Allocator>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/std_mutex.h:39, from /usr/include/c++/9/condition_variable:39, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/system_error:292:3: note: candidate: ‘bool std::operator==(const std::error_code&, const std::error_code&)’ 292 | operator==(const error_code& __lhs, const error_code& __rhs) noexcept | ^~~~~~~~ /usr/include/c++/9/system_error:292:32: note: no known conversion for argument 1 from ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} to ‘const std::error_code&’ 292 | operator==(const error_code& __lhs, const error_code& __rhs) noexcept | ~~~~~~~~~~~~~~~~~~^~~~~ /usr/include/c++/9/system_error:297:3: note: candidate: ‘bool std::operator==(const std::error_code&, const std::error_condition&)’ 297 | operator==(const error_code& __lhs, const error_condition& __rhs) noexcept | ^~~~~~~~ /usr/include/c++/9/system_error:297:32: note: no known conversion for argument 1 from ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} to ‘const std::error_code&’ 297 | operator==(const error_code& __lhs, const error_condition& __rhs) noexcept | ~~~~~~~~~~~~~~~~~~^~~~~ /usr/include/c++/9/system_error:304:3: note: candidate: ‘bool std::operator==(const std::error_condition&, const std::error_code&)’ 304 | operator==(const error_condition& __lhs, const error_code& __rhs) noexcept | ^~~~~~~~ /usr/include/c++/9/system_error:304:37: note: no known conversion for argument 1 from ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} to ‘const std::error_condition&’ 304 | operator==(const error_condition& __lhs, const error_code& __rhs) noexcept | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~ /usr/include/c++/9/system_error:311:3: note: candidate: ‘bool std::operator==(const std::error_condition&, const std::error_condition&)’ 311 | operator==(const error_condition& __lhs, | ^~~~~~~~ /usr/include/c++/9/system_error:311:37: note: no known conversion for argument 1 from ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} to ‘const std::error_condition&’ 311 | operator==(const error_condition& __lhs, | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~ In file included from /usr/include/c++/9/tuple:39, from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/array:252:5: note: candidate: ‘template bool std::operator==(const std::array<_Tp, _Nm>&, const std::array<_Tp, _Nm>&)’ 252 | operator==(const array<_Tp, _Nm>& __one, const array<_Tp, _Nm>& __two) | ^~~~~~~~ /usr/include/c++/9/array:252:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::array<_Tp, _Nm>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/9/tuple:1419:5: note: candidate: ‘template constexpr bool std::operator==(const std::tuple<_Tps ...>&, const std::tuple<_Elements ...>&)’ 1419 | operator==(const tuple<_TElements...>& __t, | ^~~~~~~~ /usr/include/c++/9/tuple:1419:5: note: template argument deduction/substitution failed: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::tuple<_Tps ...>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/unique_ptr.h:715:5: note: candidate: ‘template bool std::operator==(const std::unique_ptr<_Tp, _Dp>&, const std::unique_ptr<_Up, _Ep>&)’ 715 | operator==(const unique_ptr<_Tp, _Dp>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/unique_ptr.h:715:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::unique_ptr<_Tp, _Dp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/unique_ptr.h:721:5: note: candidate: ‘template bool std::operator==(const std::unique_ptr<_Tp, _Dp>&, std::nullptr_t)’ 721 | operator==(const unique_ptr<_Tp, _Dp>& __x, nullptr_t) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/unique_ptr.h:721:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::unique_ptr<_Tp, _Dp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/unique_ptr.h:726:5: note: candidate: ‘template bool std::operator==(std::nullptr_t, const std::unique_ptr<_Tp, _Dp>&)’ 726 | operator==(nullptr_t, const unique_ptr<_Tp, _Dp>& __x) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/unique_ptr.h:726:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::unique_ptr<_Tp, _Dp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/shared_ptr.h:52, from /usr/include/c++/9/condition_variable:45, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/shared_ptr_base.h:1412:5: note: candidate: ‘template bool std::operator==(const std::__shared_ptr<_Tp1, _Lp>&, const std::__shared_ptr<_Tp2, _Lp>&)’ 1412 | operator==(const __shared_ptr<_Tp1, _Lp>& __a, | ^~~~~~~~ /usr/include/c++/9/bits/shared_ptr_base.h:1412:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::__shared_ptr<_Tp1, _Lp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/shared_ptr.h:52, from /usr/include/c++/9/condition_variable:45, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/shared_ptr_base.h:1418:5: note: candidate: ‘template bool std::operator==(const std::__shared_ptr<_Tp, _Lp>&, std::nullptr_t)’ 1418 | operator==(const __shared_ptr<_Tp, _Lp>& __a, nullptr_t) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/shared_ptr_base.h:1418:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::__shared_ptr<_Tp, _Lp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/shared_ptr.h:52, from /usr/include/c++/9/condition_variable:45, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/shared_ptr_base.h:1423:5: note: candidate: ‘template bool std::operator==(std::nullptr_t, const std::__shared_ptr<_Tp, _Lp>&)’ 1423 | operator==(nullptr_t, const __shared_ptr<_Tp, _Lp>& __a) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/shared_ptr_base.h:1423:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::__shared_ptr<_Tp, _Lp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/condition_variable:45, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/shared_ptr.h:383:5: note: candidate: ‘template bool std::operator==(const std::shared_ptr<_Tp>&, const std::shared_ptr<_Tp>&)’ 383 | operator==(const shared_ptr<_Tp>& __a, const shared_ptr<_Up>& __b) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/shared_ptr.h:383:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::shared_ptr<_Tp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/condition_variable:45, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/shared_ptr.h:388:5: note: candidate: ‘template bool std::operator==(const std::shared_ptr<_Tp>&, std::nullptr_t)’ 388 | operator==(const shared_ptr<_Tp>& __a, nullptr_t) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/shared_ptr.h:388:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::shared_ptr<_Tp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/condition_variable:45, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/shared_ptr.h:393:5: note: candidate: ‘template bool std::operator==(std::nullptr_t, const std::shared_ptr<_Tp>&)’ 393 | operator==(nullptr_t, const shared_ptr<_Tp>& __a) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/shared_ptr.h:393:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::shared_ptr<_Tp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/list:63, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:4, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/stl_list.h:1991:5: note: candidate: ‘template bool std::operator==(const std::__cxx11::list<_Tp, _Alloc>&, const std::__cxx11::list<_Tp, _Alloc>&)’ 1991 | operator==(const list<_Tp, _Alloc>& __x, const list<_Tp, _Alloc>& __y) | ^~~~~~~~ /usr/include/c++/9/bits/stl_list.h:1991:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::__cxx11::list<_Tp, _Alloc>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/locale_facets.h:48, from /usr/include/c++/9/bits/basic_ios.h:37, from /usr/include/c++/9/ios:44, from /usr/include/c++/9/istream:38, from /usr/include/c++/9/sstream:38, from /usr/include/c++/9/complex:45, from /home/ofn77899/devel/installg/include/ismrmrd/ismrmrd.h:40, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/streambuf_iterator.h:208:5: note: candidate: ‘template bool std::operator==(const std::istreambuf_iterator<_CharT, _Traits>&, const std::istreambuf_iterator<_CharT, _Traits>&)’ 208 | operator==(const istreambuf_iterator<_CharT, _Traits>& __a, | ^~~~~~~~ /usr/include/c++/9/bits/streambuf_iterator.h:208:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::istreambuf_iterator<_CharT, _Traits>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /home/ofn77899/devel/installg/include/ismrmrd/ismrmrd.h:40, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/complex:459:5: note: candidate: ‘template constexpr bool std::operator==(const std::complex<_Tp>&, const std::complex<_Tp>&)’ 459 | operator==(const complex<_Tp>& __x, const complex<_Tp>& __y) | ^~~~~~~~ /usr/include/c++/9/complex:459:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::complex<_Tp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /home/ofn77899/devel/installg/include/ismrmrd/ismrmrd.h:40, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/complex:464:5: note: candidate: ‘template constexpr bool std::operator==(const std::complex<_Tp>&, const _Tp&)’ 464 | operator==(const complex<_Tp>& __x, const _Tp& __y) | ^~~~~~~~ /usr/include/c++/9/complex:464:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::complex<_Tp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /home/ofn77899/devel/installg/include/ismrmrd/ismrmrd.h:40, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/complex:469:5: note: candidate: ‘template constexpr bool std::operator==(const _Tp&, const std::complex<_Tp>&)’ 469 | operator==(const _Tp& __x, const complex<_Tp>& __y) | ^~~~~~~~ /usr/include/c++/9/complex:469:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::complex<_Tp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/vector:67, from /home/ofn77899/devel/installg/include/ismrmrd/ismrmrd.h:73, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/stl_vector.h:1888:5: note: candidate: ‘template bool std::operator==(const std::vector<_Tp, _Alloc>&, const std::vector<_Tp, _Alloc>&)’ 1888 | operator==(const vector<_Tp, _Alloc>& __x, const vector<_Tp, _Alloc>& __y) | ^~~~~~~~ /usr/include/c++/9/bits/stl_vector.h:1888:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::vector<_Tp, _Alloc>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/node_handle.h:39, from /usr/include/c++/9/bits/stl_tree.h:72, from /usr/include/c++/9/map:60, from /home/ofn77899/devel/installg/include/ismrmrd/meta.h:15, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:4, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/optional:983:5: note: candidate: ‘template constexpr std::__optional_relop_t() == declval<_Up>()))> std::operator==(const std::optional<_Tp>&, const std::optional<_Up>&)’ 983 | operator==(const optional<_Tp>& __lhs, const optional<_Up>& __rhs) | ^~~~~~~~ /usr/include/c++/9/optional:983:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::optional<_Tp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/node_handle.h:39, from /usr/include/c++/9/bits/stl_tree.h:72, from /usr/include/c++/9/map:60, from /home/ofn77899/devel/installg/include/ismrmrd/meta.h:15, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:4, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/optional:1034:5: note: candidate: ‘template constexpr bool std::operator==(const std::optional<_Tp>&, std::nullopt_t)’ 1034 | operator==(const optional<_Tp>& __lhs, nullopt_t) noexcept | ^~~~~~~~ /usr/include/c++/9/optional:1034:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::optional<_Tp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/node_handle.h:39, from /usr/include/c++/9/bits/stl_tree.h:72, from /usr/include/c++/9/map:60, from /home/ofn77899/devel/installg/include/ismrmrd/meta.h:15, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:4, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/optional:1039:5: note: candidate: ‘template constexpr bool std::operator==(std::nullopt_t, const std::optional<_Tp>&)’ 1039 | operator==(nullopt_t, const optional<_Tp>& __rhs) noexcept | ^~~~~~~~ /usr/include/c++/9/optional:1039:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::optional<_Tp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/node_handle.h:39, from /usr/include/c++/9/bits/stl_tree.h:72, from /usr/include/c++/9/map:60, from /home/ofn77899/devel/installg/include/ismrmrd/meta.h:15, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:4, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/optional:1095:5: note: candidate: ‘template constexpr std::__optional_relop_t() == declval<_Up>()))> std::operator==(const std::optional<_Tp>&, const _Up&)’ 1095 | operator==(const optional<_Tp>& __lhs, const _Up& __rhs) | ^~~~~~~~ /usr/include/c++/9/optional:1095:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::optional<_Tp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/bits/node_handle.h:39, from /usr/include/c++/9/bits/stl_tree.h:72, from /usr/include/c++/9/map:60, from /home/ofn77899/devel/installg/include/ismrmrd/meta.h:15, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:4, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/optional:1101:5: note: candidate: ‘template constexpr std::__optional_relop_t() == declval<_Tp>()))> std::operator==(const _Up&, const std::optional<_Tp>&)’ 1101 | operator==(const _Up& __lhs, const optional<_Tp>& __rhs) | ^~~~~~~~ /usr/include/c++/9/optional:1101:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::optional<_Tp>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/map:61, from /home/ofn77899/devel/installg/include/ismrmrd/meta.h:15, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:4, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/stl_map.h:1455:5: note: candidate: ‘template bool std::operator==(const std::map<_Key, _Tp, _Compare, _Allocator>&, const std::map<_Key, _Tp, _Compare, _Allocator>&)’ 1455 | operator==(const map<_Key, _Tp, _Compare, _Alloc>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_map.h:1455:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::map<_Key, _Tp, _Compare, _Allocator>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/map:62, from /home/ofn77899/devel/installg/include/ismrmrd/meta.h:15, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:4, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/stl_multimap.h:1119:5: note: candidate: ‘template bool std::operator==(const std::multimap<_Key, _Tp, _Compare, _Allocator>&, const std::multimap<_Key, _Tp, _Compare, _Allocator>&)’ 1119 | operator==(const multimap<_Key, _Tp, _Compare, _Alloc>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_multimap.h:1119:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::multimap<_Key, _Tp, _Compare, _Allocator>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/functional:59, from /usr/include/c++/9/pstl/glue_algorithm_defs.h:13, from /usr/include/c++/9/algorithm:71, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/toolboxes/core/NDArray.h:15, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/toolboxes/core/cpu/hoNDArray.h:7, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/std_function.h:746:5: note: candidate: ‘template bool std::operator==(const std::function<_Res(_ArgTypes ...)>&, std::nullptr_t)’ 746 | operator==(const function<_Res(_Args...)>& __f, nullptr_t) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/std_function.h:746:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::function<_Res(_ArgTypes ...)>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/functional:59, from /usr/include/c++/9/pstl/glue_algorithm_defs.h:13, from /usr/include/c++/9/algorithm:71, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/toolboxes/core/NDArray.h:15, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/toolboxes/core/cpu/hoNDArray.h:7, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/std_function.h:752:5: note: candidate: ‘template bool std::operator==(std::nullptr_t, const std::function<_Res(_ArgTypes ...)>&)’ 752 | operator==(nullptr_t, const function<_Res(_Args...)>& __f) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/std_function.h:752:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::function<_Res(_ArgTypes ...)>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/unordered_map:47, from /usr/include/c++/9/functional:61, from /usr/include/c++/9/pstl/glue_algorithm_defs.h:13, from /usr/include/c++/9/algorithm:71, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/toolboxes/core/NDArray.h:15, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/toolboxes/core/cpu/hoNDArray.h:7, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/unordered_map.h:2091:5: note: candidate: ‘template bool std::operator==(const std::unordered_map<_Key1, _Tp1, _Hash1, _Pred1, _Alloc1>&, const std::unordered_map<_Key1, _Tp1, _Hash1, _Pred1, _Alloc1>&)’ 2091 | operator==(const unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/unordered_map.h:2091:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::unordered_map<_Key1, _Tp1, _Hash1, _Pred1, _Alloc1>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/unordered_map:47, from /usr/include/c++/9/functional:61, from /usr/include/c++/9/pstl/glue_algorithm_defs.h:13, from /usr/include/c++/9/algorithm:71, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/toolboxes/core/NDArray.h:15, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/toolboxes/core/cpu/hoNDArray.h:7, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/bits/unordered_map.h:2103:5: note: candidate: ‘template bool std::operator==(const std::unordered_multimap<_Key1, _Tp1, _Hash1, _Pred1, _Alloc1>&, const std::unordered_multimap<_Key1, _Tp1, _Hash1, _Pred1, _Alloc1>&)’ 2103 | operator==(const unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/unordered_map.h:2103:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::unordered_multimap<_Key1, _Tp1, _Hash1, _Pred1, _Alloc1>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:11, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/variant:1177:3: note: candidate: ‘template constexpr bool std::operator==(const std::variant<_Types ...>&, const std::variant<_Types ...>&)’ 1177 | _VARIANT_RELATION_FUNCTION_TEMPLATE(==, equal) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/9/variant:1177:3: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::variant<_Types ...>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Types.h:11, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/MPMCChannel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/variant:1177:3: note: candidate: ‘constexpr bool std::operator==(std::monostate, std::monostate)’ 1177 | _VARIANT_RELATION_FUNCTION_TEMPLATE(==, equal) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /usr/include/c++/9/variant:1177:3: note: no known conversion for argument 1 from ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} to ‘std::monostate’ 1177 | _VARIANT_RELATION_FUNCTION_TEMPLATE(==, equal) | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/set:61, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/toolboxes/mri_core/mri_core_data.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:6: /usr/include/c++/9/bits/stl_set.h:979:5: note: candidate: ‘template bool std::operator==(const std::set<_Key, _Compare, _Allocator>&, const std::set<_Key, _Compare, _Allocator>&)’ 979 | operator==(const set<_Key, _Compare, _Alloc>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_set.h:979:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::set<_Key, _Compare, _Allocator>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/set:62, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/toolboxes/mri_core/mri_core_data.h:8, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:6: /usr/include/c++/9/bits/stl_multiset.h:964:5: note: candidate: ‘template bool std::operator==(const std::multiset<_Key, _Compare, _Allocator>&, const std::multiset<_Key, _Compare, _Allocator>&)’ 964 | operator==(const multiset<_Key, _Compare, _Alloc>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_multiset.h:964:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::multiset<_Key, _Compare, _Allocator>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/iterator:66, from /usr/include/boost/filesystem/path_traits.hpp:28, from /usr/include/boost/filesystem/path.hpp:25, from /usr/include/boost/dll/detail/posix/program_location_impl.hpp:13, from /usr/include/boost/dll/detail/posix/path_from_handle.hpp:12, from /usr/include/boost/dll/detail/posix/shared_library_impl.hpp:13, from /usr/include/boost/dll/shared_library.hpp:26, from /usr/include/boost/dll.hpp:16, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Reader.h:5, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/readers/BufferReader.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:7: /usr/include/c++/9/bits/stream_iterator.h:134:5: note: candidate: ‘template bool std::operator==(const std::istream_iterator<_Tp, _CharT, _Traits, _Dist>&, const std::istream_iterator<_Tp, _CharT, _Traits, _Dist>&)’ 134 | operator==(const istream_iterator<_Tp, _CharT, _Traits, _Dist>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stream_iterator.h:134:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::istream_iterator<_Tp, _CharT, _Traits, _Dist>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/deque:67, from /usr/include/c++/9/stack:60, from /usr/include/boost/filesystem/operations.hpp:42, from /usr/include/boost/dll/detail/posix/program_location_impl.hpp:126, from /usr/include/boost/dll/detail/posix/path_from_handle.hpp:12, from /usr/include/boost/dll/detail/posix/shared_library_impl.hpp:13, from /usr/include/boost/dll/shared_library.hpp:26, from /usr/include/boost/dll.hpp:16, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Reader.h:5, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/readers/BufferReader.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:7: /usr/include/c++/9/bits/stl_deque.h:286:5: note: candidate: ‘template bool std::operator==(const std::_Deque_iterator<_Tp, _Ref, _Ptr>&, const std::_Deque_iterator<_Tp, _Ref, _Ptr>&)’ 286 | operator==(const _Deque_iterator<_Tp, _Ref, _Ptr>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_deque.h:286:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::_Deque_iterator<_Tp, _Ref, _Ptr>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/deque:67, from /usr/include/c++/9/stack:60, from /usr/include/boost/filesystem/operations.hpp:42, from /usr/include/boost/dll/detail/posix/program_location_impl.hpp:126, from /usr/include/boost/dll/detail/posix/path_from_handle.hpp:12, from /usr/include/boost/dll/detail/posix/shared_library_impl.hpp:13, from /usr/include/boost/dll/shared_library.hpp:26, from /usr/include/boost/dll.hpp:16, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Reader.h:5, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/readers/BufferReader.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:7: /usr/include/c++/9/bits/stl_deque.h:293:5: note: candidate: ‘template bool std::operator==(const std::_Deque_iterator<_Tp, _Ref, _Ptr>&, const std::_Deque_iterator<_Tp, _RefR, _PtrR>&)’ 293 | operator==(const _Deque_iterator<_Tp, _RefL, _PtrL>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_deque.h:293:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::_Deque_iterator<_Tp, _Ref, _Ptr>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/deque:67, from /usr/include/c++/9/stack:60, from /usr/include/boost/filesystem/operations.hpp:42, from /usr/include/boost/dll/detail/posix/program_location_impl.hpp:126, from /usr/include/boost/dll/detail/posix/path_from_handle.hpp:12, from /usr/include/boost/dll/detail/posix/shared_library_impl.hpp:13, from /usr/include/boost/dll/shared_library.hpp:26, from /usr/include/boost/dll.hpp:16, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Reader.h:5, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/readers/BufferReader.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:7: /usr/include/c++/9/bits/stl_deque.h:2312:5: note: candidate: ‘template bool std::operator==(const std::deque<_Tp, _Alloc>&, const std::deque<_Tp, _Alloc>&)’ 2312 | operator==(const deque<_Tp, _Alloc>& __x, | ^~~~~~~~ /usr/include/c++/9/bits/stl_deque.h:2312:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::deque<_Tp, _Alloc>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/stack:61, from /usr/include/boost/filesystem/operations.hpp:42, from /usr/include/boost/dll/detail/posix/program_location_impl.hpp:126, from /usr/include/boost/dll/detail/posix/path_from_handle.hpp:12, from /usr/include/boost/dll/detail/posix/shared_library_impl.hpp:13, from /usr/include/boost/dll/shared_library.hpp:26, from /usr/include/boost/dll.hpp:16, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Reader.h:5, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/readers/BufferReader.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:7: /usr/include/c++/9/bits/stl_stack.h:313:5: note: candidate: ‘template bool std::operator==(const std::stack<_Tp, _Seq>&, const std::stack<_Tp, _Seq>&)’ 313 | operator==(const stack<_Tp, _Seq>& __x, const stack<_Tp, _Seq>& __y) | ^~~~~~~~ /usr/include/c++/9/bits/stl_stack.h:313:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::stack<_Tp, _Seq>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/random:51, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:19: /usr/include/c++/9/bits/random.tcc:1884:5: note: candidate: ‘template bool std::operator==(const std::normal_distribution<_RealType>&, const std::normal_distribution<_RealType>&)’ 1884 | operator==(const std::normal_distribution<_RealType>& __d1, | ^~~~~~~~ /usr/include/c++/9/bits/random.tcc:1884:5: note: template argument deduction/substitution failed: In file included from /usr/include/c++/9/bits/unique_ptr.h:37, from /usr/include/c++/9/condition_variable:44, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/core/Channel.h:3, from /home/ofn77899/devel/build_Gadgetron/sources/Gadgetron/test/read_writer_test.cpp:2: /usr/include/c++/9/tuple:1394:33: note: ‘std::__tuple_element_t<0, std::tuple >, std::optional > > >’ {aka ‘const ISMRMRD::AcquisitionHeader’} is not derived from ‘const std::normal_distribution<_RealType>’ 1394 | return bool(std::get<__i>(__t) == std::get<__i>(__u)) | ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~ ```

@paskino
Copy link
Contributor Author

paskino commented Jan 26, 2021

Using GCC 9 for building Gadgetron adds another layer of difficulty, due to some changes in behaviour of GCC 9 wrt older versions.

In particular the OpenMP clause #pragma omp parallel for default(none) leads to some variable not being declared. Unfortunately, this happens with NIFTYREG.

In function ‘void GetDiscretisedValueSSD_core3D_2(nifti_image*, float*, int, int, nifti_image*, nifti_image*, int*) [with DTYPE = float]’:
/home/ofn77899/devel/build_Gadgetron/sources/NIFTYREG/reg-lib/cpu/_reg_ssd.cpp:850:35: error: ‘voxelBlockNumber_t’ not specified in enclosing ‘parallel’
  850 |             for(idBlock=0;idBlock<voxelBlockNumber_t;idBlock++) {
      |

@paskino
Copy link
Contributor Author

paskino commented Jan 26, 2021

CUDA SDK restrict which GCC works: for instance 10.1 won't build with GCC 9

[  4%] Building NVCC (Device) object nipet/CMakeFiles/mmr_auxe.dir/src/mmr_auxe_generated_scanner_0.cu.o
In file included from /usr/local/cuda/include/cuda_runtime.h:83,
                 from <command-line>:
/usr/local/cuda/include/crt/host_config.h:129:2: error: #error -- unsupported GNU version! gcc versions later than 8 are not supported!

GCC9 is passed as external flag at cmake time, and passed to Gadgetron's cmake
updated ITK version
add range-v3
@KrisThielemans
Copy link
Member

In particular the OpenMP clause #pragma omp parallel for default(none) leads to some variable not being declared. Unfortunately, this happens with NIFTYREG.

Yes, noted at #413 (comment), which points to a NiftyReg PR

@paskino
Copy link
Contributor Author

paskino commented Feb 27, 2023

@KrisThielemans I think I fixed it. I noticed a failure of range-v3 tests on GCC 11, devel build. However, I restarted the step and the tests passed :O ??

@paskino
Copy link
Contributor Author

paskino commented Feb 28, 2023

If you are happy with this @evgueni-ovtchinnikov @KrisThielemans I will remove the reference to the update_Gadgetron_master branch and I will merge.

@KrisThielemans
Copy link
Member

range-v3 tests need to be disabled due to ericniebler/range-v3#1759

CHANGES.md Show resolved Hide resolved
SuperBuild/External_Gadgetron.cmake Outdated Show resolved Hide resolved
SuperBuild/External_Gadgetron.cmake Show resolved Hide resolved
SuperBuild/External_Gadgetron.cmake Outdated Show resolved Hide resolved
SuperBuild/External_ISMRMRD.cmake Show resolved Hide resolved
docker/docker-compose.yml Outdated Show resolved Hide resolved
@KrisThielemans
Copy link
Member

Also, do we still use gcc9 tricks? Is so, I'd remove them.

@paskino
Copy link
Contributor Author

paskino commented Mar 1, 2023

Also, do we still use gcc9 tricks? Is so, I'd remove them.

I removed them already. And I added DISABLE_range-v3_TESTING option to disable range-v3 tests, default is ON.

option(DISABLE_range-v3_TESTING "Disable range-v3 testing" ON)

@KrisThielemans
Copy link
Member

I'm guessing you're as good as ready.

I think this might be best with a squash-merge.

Copy link
Member

@KrisThielemans KrisThielemans left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

time to press the button if CI is fine! Thanks a lot, and congratulations!

@KrisThielemans
Copy link
Member

address #776

@paskino paskino merged commit 71d7c7b into master Mar 2, 2023
@paskino paskino deleted the build_Gadgetron_master branch March 2, 2023 13:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Go to Gadgetron Master to get access to Coilmap Gadget enable pass-through of options for CBLAS
7 participants