В 2003 году - да, 2003 - Vandervoorde и Josuttis написали это в своей книге "С++ Templates" (стр. 40):
Невозможно использовать литералы с плавающей запятой (и простые константные выражения с плавающей запятой), поскольку аргументы шаблона имеют исторические причины. Поскольку нет серьезных технических проблем, это может быть поддержано в будущих версиях С++.
Но это все еще не работает, даже в С++ 11:
template<double D> //error
void foo() {}
Почему это не добавлено?