Template cpp and cuda code

I have cuda template class as
cuda_class.hcu

template <class T>
class cuda_class
{
....
};

cuda_class.cu

#include "cuda_class.cuh"

template <class T>
cuda_class<T>::cuda_class()
{}
...

main.cc

#include "cuda_class.cuh"
#include "cuda_class.cu"
int main()
{
cuda_class<int> obj;
}

I use the following CMakeLists.txt to compile the code

cmake_minimum_required(VERSION 3.21.3)

project(FasNasmGpu
			VERSION 0.1
			DESCRIPTION "FAS With NASM on GPU"
			LANGUAGES CXX C)

set(CMAKE_THREAD_LIBS_INIT "-lpthread")
set(CMAKE_HAVE_THREADS_LIBRARY 1)
set(CMAKE_USE_WIN32_THREADS_INIT 0)
set(CMAKE_USE_PTHREADS_INIT 1)
set(THREADS_PREFER_PTHREAD_FLAG ON)

if (NOT CMAKE_BUILD_TYPE)
	set(CMAKE_BUILD_TYPE "Release")
endif()

if (CMAKE_BUILD_TYPE STREQUAL "Debug")
	set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -fsanitize=address ")
endif()

if (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
	set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")
endif()

include(CheckCXXSourceCompiles)


set (CMAKE_CXX_FLAGS "-Wsign-compare -Wno-unused-variable -Wno-unused-parameter -Wdeprecated-copy -std=c++17 ")


set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ltbb")

find_package(MPI)

# CUDA
include(CheckLanguage)
check_language(CUDA)
if(CMAKE_CUDA_COMPILER)
	set(FASNASMGPU_USE_CUDA ON CACHE BOOL "Use CUDA")
endif()
if (FASNASMGPU_USE_CUDA)
	enable_language(CUDA)
endif()

set (CUDA_SEPARABLE_COMPILATION ON)
set (CMAKE_CUDA_HOST_COMPILER "${CMAKE_CUDA_FLAGS}")

find_package(Eigen3 3.3 REQUIRED NO_MODULE)

# VTK library
find_package(VTK REQUIRED COMPONENTS
  vtkCommonColor
  vtkCommonCore
  vtkCommonDataModel
  vtkInteractionStyle
  vtkRenderingContextOpenGL2
  vtkRenderingCore
  vtkRenderingFreeType
  vtkRenderingGL2PSOpenGL2
  vtkRenderingOpenGL2
  vtkCommonCore
  vtkCommonDataModel
  vtkIOXML
  QUIET
)

if (NOT VTK_FOUND)
  message("Skipping StructuredGrid: ${VTK_NOT_FOUND_MESSAGE}")
  return ()
endif()

message (STATUS "VTK_VERSION: ${VTK_VERSION}")


if (VTK_VERSION VERSION_LESS "8.90.0")
  # old system
  INCLUDE_DIRECTORIES(include ${VTK_USE_FILE} ${VTK_INCLUDE_DIRS}  ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES} ${EIGEN3_INCLUDE_DIRS})



  target_compile_options(lib PRIVATE $<$<COMPILE_LANGUAGE:CUDA>: --expt-extended-lambda -lcudadevrt;
  							>)
  vtk_module_autoinit(
	 TARGETS lib
    MODULES ${VTK_LIBRARIES}
    )

 TARGET_LINK_LIBRARIES(lib ${VTK_LIBRARIES} ${CUDA_LIBRARIES})
  
  add_executable(${PROJECT_NAME} MACOSX_BUNDLE "test/main.cc")

  TARGET_LINK_LIBRARIES(${PROJECT_NAME} lib ${VTK_LIBRARIES} ${CUDA_LIBRARIES})

else ()
  # include all components
  INCLUDE_DIRECTORIES(include ${VTK_INCLUDE_DIRS} ${CUDA_LIBRARIES} ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES} ${EIGEN3_INCLUDE_DIRS})
  
  FILE (GLOB CXX_LIB "src/*.cc")
  FILE (GLOB CUDA_LIB "src/*.cu")

  ADD_LIBRARY(lib SHARED ${CXX_LIB} ${CUDA_LIB})

  target_compile_options(lib PRIVATE $<$<COMPILE_LANGUAGE:CUDA>: --expt-extended-lambda -lcudadevrt;
  							>)
  vtk_module_autoinit(
	 TARGETS lib
    MODULES ${VTK_LIBRARIES}
    )

  TARGET_LINK_LIBRARIES(lib ${VTK_LIBRARIES} ${CUDA_LIBRARIES} )
  
  add_executable(${PROJECT_NAME} MACOSX_BUNDLE "test/main.cc")

  TARGET_LINK_LIBRARIES(${PROJECT_NAME} lib  ${VTK_LIBRARIES} ${CUDA_LIBRARIES} )
  
  # vtk_module_autoinit is needed
  vtk_module_autoinit(
    TARGETS ${PROJECT_NAME}
    MODULES ${VTK_LIBRARIES}
    )
endif ()

When I compile it I get the following error

Building CXX object CMakeFiles/FasNasmGpu.dir/test/main.cc.o
/usr/bin/c++ -Dkiss_fft_scalar=double -DvtkRenderingContext2D_AUTOINIT_INCLUDE=\"/home/mehdi/myFolder/programming/domain_decomposition/gpu_mg_asm/build/CMakeFiles/vtkModuleAutoInit_04d683062bbc5774e34e8c62b13e1a5a.h\" -DvtkRenderingCore_AUTOINIT_INCLUDE=\"/home/mehdi/myFolder/programming/domain_decomposition/gpu_mg_asm/build/CMakeFiles/vtkModuleAutoInit_04d683062bbc5774e34e8c62b13e1a5a.h\" -DvtkRenderingOpenGL2_AUTOINIT_INCLUDE=\"/home/mehdi/myFolder/programming/domain_decomposition/gpu_mg_asm/build/CMakeFiles/vtkModuleAutoInit_04d683062bbc5774e34e8c62b13e1a5a.h\" -I/home/mehdi/myFolder/programming/domain_decomposition/gpu_mg_asm/include -I/opt/cuda/targets/x86_64-linux/include -I/usr/include/eigen3 -isystem /usr/include/vtk -isystem /usr/include/freetype2 -Wsign-compare -Wno-unused-variable -Wno-unused-parameter -Wdeprecated-copy -std=c++17 -ltbb -O3 -DNDEBUG -fopenmp -MD -MT CMakeFiles/FasNasmGpu.dir/test/main.cc.o -MF CMakeFiles/FasNasmGpu.dir/test/main.cc.o.d -o CMakeFiles/FasNasmGpu.dir/test/main.cc.o -c /home/mehdi/myFolder/programming/domain_decomposition/gpu_mg_asm/test/main.cc

...
/opt/cuda/targets/x86_64-linux/include/thrust/system/detail/generic/for_each.h:48:69: error: static assertion failed: unimplemented for this system
   48 |     (thrust::detail::depend_on_instantiation<InputIterator, false>::value)
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
/opt/cuda/targets/x86_64-linux/include/thrust/detail/static_assert.h:50:58: note: in definition of macro ‘THRUST_STATIC_ASSERT_MSG’
   50 | #  define THRUST_STATIC_ASSERT_MSG(B, msg) static_assert(B, msg)

Do you have any Idea what I should change in cmake file?