Section 4.3 of C++ Templates states 'Not being able to use floating-point literals (and simple constant floating-point expressions) as template arguments has historical reasons.'
Similarly,
$14.1/7 states - "A non-type template-parameter shall not be declared to have floating point, class, or void type. [ Example:
template<double d> class X; // error
template<double* pd> class Y; // OK
template<double& rd> class Z; // OK"
What is the historical reason that is being talked about in the book in the above quote?
Looking at why Y and Z are valid but not X, is the whole challenge related to having non type template parameters of floating type got to do anything with pointers/references?
Why template non type parameters can not be of class type?