title: Should std::unique_ptr<void> be permitted
body: <p>This is a very simple question.  Consider the following code:</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;memory&gt;
  
  typedef std::unique_ptr&lt;void&gt; UniqueVoidPtr;
  
  int main() {
      UniqueVoidPtr p(new int);
      return 0;
  }
  </code></pre>
  
  <p>Compiling with cygwin (g++ 4.5.3) with the following command <code>g++ -std=c++0x -o prog file.cpp</code> works just fine.  However, compiling with the microsoft compiler (either VS 2010 or 2013) I get this error:</p>
  
  <pre><code>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\memory(2067) : error C2070: 'void': illegal sizeof operand
          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\memory(2066) : while compiling class template member function 'void std::default_delete&lt;_Ty&gt;::operator ()(_Ty *) const'
          with
          [
              _Ty=void
          ]
          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\type_traits(650) : see reference to class template instantiation 'std::default_delete&lt;_Ty&gt;' being compiled
          with
          [
              _Ty=void
          ]
          C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\memory(2193) : see reference to class template instantiation 'std::tr1::is_empty&lt;_Ty&gt;' being compiled
          with
          [
              _Ty=std::default_delete&lt;void&gt;
          ]
          foo1.cpp(7) : see reference to class template instantiation 'std::unique_ptr&lt;_Ty&gt;' being compiled
          with
          [
              _Ty=void
          ]
  </code></pre>
  
  <p>Is this expected?  I'm writing a class where I wanted to have a unique pointer in the in the class.  While trying to work out the semantics of a move constructor for the class, I ran into this (I assume because I finally got my move constructor coded correctly: i.e. the other errors were fixed).</p>