A RESPOSTA SIMPLES
O padrão não permite pontos flutuantes como argumentos de modelo não-tipo , que podem ser lidos na seção seguinte do padrão C ++ 11;
14.3.2 / 1 Argumentos sem tipo de modelo [temp.arg.nontype]
Um argumento-modelo para um parâmetro-modelo sem tipo e sem modelo deve ser um dos seguintes:
para um parâmetro-modelo não-tipo do tipo integral ou enumeração, uma expressão constante convertida (5.19) do tipo do parâmetro-modelo;
o nome de um parâmetro de modelo sem tipo; ou
uma expressão constante (5.19) que designa o endereço de um objeto com duração de armazenamento estático e ligação externa ou interna ou uma função com ligação externa ou interna, incluindo modelos de função e IDs de modelo de função, mas excluindo membros de classe não estáticos, expressa (ignorando parênteses) como & id-expression, exceto que o & pode ser omitido se o nome se referir a uma função ou array e deverá ser omitido se o parâmetro-modelo correspondente for uma referência; ou
uma expressão constante que é avaliada como um valor de ponteiro nulo (4.10); ou
uma expressão constante que é avaliada como um valor de ponteiro de membro nulo (4.11); ou
um indicador para membro expresso conforme descrito em 5.3.1.
Mas .. mas .. POR QUE !?
Provavelmente é devido ao fato de que os cálculos de ponto flutuante não podem ser representados de maneira exata. Se fosse permitido, poderia / resultaria em um comportamento errôneo / estranho ao fazer algo como isso;
func<1/3.f> ();
func<2/6.f> ();
Pretendíamos chamar a mesma função duas vezes, mas pode não ser o caso, pois a representação de ponto flutuante dos dois cálculos não é garantida como exatamente a mesma.
Como eu representaria valores de ponto flutuante como argumentos de modelo?
Com C++11
você poderia escrever algumas expressões constantes bastante avançadas ( constexpr ) que calculariam o numerador / denominador de um tempo de compilação de valor flutuante e então passaria esses dois como argumentos inteiros separados.
Lembre-se de definir algum tipo de limite para que os valores de ponto flutuante próximos uns dos outros produzam o mesmo numerador / denominador , caso contrário, é um tanto inútil, pois produzirá o mesmo resultado mencionado anteriormente como um motivo para não permitir valores de ponto flutuante como não-tipo argumentos do modelo .
float
como um parâmetro de modelo sem tipo ? Em que capítulo é isso?