Возможно я чего-то не понимаю, но почему nvcc позволяет вот такое:
__constant__ int foo;
__host__ int hostf()
{
return foo;
}
Это успешно компилируется и даже не падает с ошибкой в рантайме, а просто тихо и незаметно возвращает полную ерунду. Я бы на месте компилятора в этом месте ругался как сапожник.