Sto utilizzando una coppia di parametri del modello intero per specificare un rapporto, poiché non posso utilizzare un doppio come parametro di modello. La conversione in doppio è protetta contro lo split-by-zero con un ternario. Questo ha funzionato in una versione precedente del compilatore, ma Visual Studio 2013 dà un errore:Come eliminare l'errore "dividi per 0" nel codice di modello
error C2124: divide or mod by zero
Ecco una versione semplificata del codice:
template<int B1, int B2>
class MyClass
{
const double B = (B2 == 0) ? 0.0 : (double) B1/(double) B2;
// ...
};
MyClass<0, 0> myobj;
voglio davvero B
da ottimizzare di espressioni che lo usa quando è zero, quindi ho bisogno della definizione a linea singola. So che posso semplicemente usare i parametri del modello <0, 1>
per aggirare il problema, ma mi chiedo se c'è un modo per convincere il compilatore che la mia espressione è sicura?
Mi chiedo se c'è un modo per mettere questo _diagnostic_ off .... – P0W
@ P0W sfortunatamente è un errore, non un avvertimento. –
Non è stato segnalato da [_'clang'_] (http://rextester.com/FFYYTT36366) né [_'gcc'_] (http://rextester.com/SEDWX49285) – P0W