ho il seguente codice cpp:errore del compilatore quando si utilizza modello di specializzazione in Visual C++
#include <iostream>
#include <limits>
// C2589 when compiling with specialization, fine when compiling without
template<typename T>
void foo(T value = std::numeric_limits<T>::infinity())
{
}
// this specialization causes compiler error C2589 above
template<>
void foo<float>(float value)
{
}
int main()
{
foo<float>();
return 0;
}
Quando provo a compilare questo utilizzando Visual Studio 2013, ho il seguente errore:
..\check2\main.cpp(5) : error C2589: '::' : illegal token on right side of '::'
..\check2\main.cpp(5) : error C2059: syntax error : '::'
Il programma viene compilato correttamente se non includo la specializzazione foo<float>
. Il codice compila anche il valore compresa la specializzazione in gcc 4.8.4, che indica alcuni problemi con il compilatore di Visual C++.
Il codice è corretto e deve essere compilato? C'è una soluzione alternativa per Visual C++?
I have t Lo stesso errore su VS2015, ma compila [qui] (http://ideone.com/ttD7BH). –
@ Ben: buon punto. Non sapevo di questo sito. Non riuscivo a capire quale compilatore usano ma dal momento che si compila con successo presumo il suo gcc. Mi imbarazza perché si compila con gcc ma non riesce con VC++. – dkoerner