En C ++, el valor flotante se trunca del doble

He codificado usando variables flotantes antes y nunca tuve este problema.

float  a, b, subtotal, stx;
a=15.95;
b=24.95;
subtotal=a+b;
stx=subtotal*.07;

cout << "Item 1: $" << a << endl;
cout << "Item 2: $" << b << endl;
cout << "\nSubtotal: $" <<subtotal<< endl;
cout << "Sales Tax: $" << stx << endl; 
cout << "Total: $"  << subtotal+stx << endl;

código relativamente estrecho

warning C4305: '=' : truncation from 'double' to 'float'

Entiendo la idea de datos truncados (y también sé que puedes escribir elf al final de la variable. Pero si las variables se declaran como flotantes, ¿por qué el compilador interpreta los valores literales como dobles si se declararon como flotantes?

Busqué algunas otras entradas y fueron diferentes, entonces mi consulta parece que no puedo encontrar una solución de por qué los datos se leen como dobles si se declaran como flotantes.

Respuestas a la pregunta(4)

Su respuesta a la pregunta