В соответствии с N3126 (окончательный вариант) (14.1 / 4):
Нетипизированный шаблон-параметр должен иметь одно из следующих значений (необязательно с квалификацией cv)) типы:
- целочисленный тип или тип перечисления,
- указатель на объект или указатель на функцию,
- lvalue ссылка на объект или lvalue ссылка на функцию, (выделение моя)
- указатель на элемент.
Итак, как вы можете видеть, rvalue ссылается нане допускаются вообще как параметры шаблона.Если вы хотите преодолеть ограничение, что параметры шаблона не могут быть double
с, почему бы вам не выразить коэффициент загрузки как рациональный:
my_vector<7, 12>
... коэффициент загрузки не менее 7 /12.
Кстати, вы также можете сохранить коэффициент загрузки как константу (или как член), что, вероятно, даст вам меньше раздувания кода и не намного ухудшит производительность.
Вторая проблема, которую выposts (специализация для double&&
) - это совершенно другое, поддерживается и работает для меня (с g ++ - 4.5):
template<class T>
struct X;
template<>
struct X<double&&>
{
};
template<>
struct X<int&&>
{
X();
};
X<int&&> a;
/usr/bin/ld: /usr/lib/debug/usr/lib/crt1.o(.debug_info): relocation 0 has invalid symbol index 12
...
/usr/lib/gcc/i486-linux-gnu/4.5.1/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
/home/jirka/tmp/ccqJkazZ.o: In function `__static_initialization_and_destruction_0(int, int)':
:(.text+0x1d): undefined reference to `X<int&&>::X()'