Я использую Visual Studio 2017, набор инструментов платформы v141 и CUDA Toolkit 9.2.
Я заметил, что конструктор перемещения и назначение перемещения отсутствуют при компиляции thrust :: device_vector с помощью nvcc. Причиной является условие, которое проверяет значение макроса __ cplusplus в библиотеке Thrust.
Как объяснено в документах , я установил C ++ Language Standard на / std: c ++ 17 и дополнительно установил / Zc: __cplusplus , чтобы правильно определите макрос в msvc, то есть 201703 .
Однако для файлов, скомпилированных nvcc, макрос установлен на 199711 .
Я создал простой случай, который воспроизводит проблему.
test.cuh:
#pragma once
#include <iostream>
void test();
test.cu:
#include "test.cuh"
void test()
{
std::cout << "CU file: " << __cplusplus << std::endl;
}
main.cpp:
#include "test.cuh"
int main()
{
test();
std::cout << "CPP file: " << __cplusplus << std::endl;
return 0;
}
Выходы:
CU file: 199711
CPP file: 201703
Я ищу решение, применимое также к CMake с FindCUDA.