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