Следующий код
#define CUDA_BOTH __host__ __device__
struct array {
CUDA_BOTH inline array() {} // LINE1
CUDA_BOTH inline array(double* d) : _data(d) {}
double* _data;
};
struct test_t {
array x1;
array x2; // LINE2
};
struct mytest_t : public test_t {
};
__constant__ test_t g_test; // LINE3
__constant__ mytest_t g_mytest; // LINE4
int main(){
return 0;
}
не может скомпилироваться с ошибкой
error: dynamic initialization is not supported for a __constant__ variable
on LINE4
.Очевидно, проблема в определении на LINE1
.Тем не менее, он у меня есть, чтобы разрешить как пустую конструкцию, так и конструктор с аргументами.
Странное поведение в том, что определение в LINE3
не дает никаких ошибок, даже если mytest_t
просто наследуется от test_t
без добавления каких-либо полей.
Более того, если я прокомментирую LINE2
все работает!
Есть ли способ заставить эту работу?Или кто-то может объяснить противоречивое поведение?