title: Is there a reason GPU/CPU pointers aren't more strongly typed?
body: <p>Is there a reason the language designers didn't make pointers more strongly typed, so that the compiler could differentiate between a GPU-pointer and a CPU-pointer and eliminate the ridiculously common bug of mixing the two?</p>
  
  <p>Is there <strong>ever</strong> a need to have a pointer refer to both a GPU-memory location and a CPU-memory location at once <em>(is that even possible)</em>?</p>
  
  <p>Or is this just an incredibly glaring oversight in the design of the language?</p>
  
  <hr>
  
  <p><strong>[Edit]</strong> Example:  C++/CLI has two different types of pointers, which cannot be mixed.  They introduced separate notation so that this requirement could be enforced by the compiler:</p>
  
  <pre><code>int* a; //Normal pointer
  int^ b; //Managed pointer
  //pretend a is assigned here
  b = a;  //Compiler error!
  </code></pre>
  
  <p>Is there a reason <em>(other than laziness/oversight)</em> that CUDA does not do the same thing?</p>