У меня проблема с пониманием следующего абзаца Per С++ 11 Standard N3485 Раздел 14.1.7. Я думаю, что более важно понять обоснование, а не запоминать факты.
Параметр шаблона, не относящийся к типу, не должен быть объявлен как имеющий тип с плавающей точкой, классом или void.
[Пример:template<double d> class X; // error template<double* pd> class Y; // OK template<double& rd> class Z; // OK
-end пример]
У меня есть некоторые вопросы относительно этого правила:
-
Есть ли причина, почему тип
floating point
не может использоваться в качестве параметра шаблона? В чем смысл этого? Я знаю, что это верно до С++ 11, и это также верно для стандарта С++ 11. -
Зачем использовать
pointer
илиreference
для типов с плавающей запятой в качестве параметров без шаблона, но не для сырых типов с плавающей запятой? В чем здесь большая разница?
Благодарим вас за помощь.