title: Why is double not allowed as a non-type template parameter?
body: <p>In 2003 - yes, <strong>2003</strong> - Vandervoorde and Josuttis wrote this in their book "C++ Templates" (p. 40):</p>
  
  <blockquote>
    <p>Not being able to use floating-point literals (and simple constant floating-point expressions) as template arguments has historical reasons. Because there are no serious technical challenges, this may be supported in future versions of C++.</p>
  </blockquote>
  
  <p>But this still doesn't work, even under C++11:</p>
  
  <pre><code>template&lt;double D&gt; //error
  void foo() {}
  </code></pre>
  
  <p>Why was this not added?</p>