GCC 12 compilation error with CUDA: variable 'std::array<cu::DeviceMemory, 2> has incomplete type
When trying to compile IDG with CUDA support on GCC 12.2.1 I get errors from
- idg-lib/src/Hybrid/CUDA/GenericOptimized/routines/Imaging.cpp
- idg-lib/src/CUDA/common/routines/Beam.cpp
- idg-lib/src/CUDA/Generic/routines/Imaging.cpp
regarding incomplete types. For example:
/opt/lofar/idg/src/idg-lib/src/CUDA/Generic/routines/Imaging.cpp:124:35: error: variable 'std::array<cu::DeviceMemory, 2> d_visibilities_' has initializer but incomplete type
124 | std::array<cu::DeviceMemory, 2> d_visibilities_{
| ^~~~~~~~~~~~~~~
/opt/lofar/idg/src/idg-lib/src/CUDA/Generic/routines/Imaging.cpp:126:35: error: variable 'std::array<cu::DeviceMemory, 2> d_uvw_' has initializer but incomplete type
126 | std::array<cu::DeviceMemory, 2> d_uvw_{
| ^~~~~~
/opt/lofar/idg/src/idg-lib/src/CUDA/Generic/routines/Imaging.cpp:128:35: error: variable 'std::array<cu::DeviceMemory, 2> d_subgrids_' has initializer but incomplete type
128 | std::array<cu::DeviceMemory, 2> d_subgrids_{
| ^~~~~~~~~~~
/opt/lofar/idg/src/idg-lib/src/CUDA/Generic/routines/Imaging.cpp:130:35: error: variable 'std::array<cu::DeviceMemory, 2> d_metadata_' has initializer but incomplete type
130 | std::array<cu::DeviceMemory, 2> d_metadata_{
Adding
#include <array>
to those files makes it compile for me, but I'm no C(++) or CUDA programmer, so I'm not sure if that is the complete fix.