Mam następujący kod cpp:błąd kompilatora przy użyciu szablonu specjalizacji pod 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;
}
Kiedy próbuję skompilować ten przy użyciu programu Visual Studio 2013, pojawia się następujący błąd:
..\check2\main.cpp(5) : error C2589: '::' : illegal token on right side of '::'
..\check2\main.cpp(5) : error C2059: syntax error : '::'
Program kompiluje się dobrze, jeśli nie obejmuję specjalizacji foo<float>
. Kod również kompiluje dobrze , w tym specjalizację pod gcc 4.8.4, co wskazuje na pewien problem z kompilatorem Visual C++.
Czy kod jest prawidłowy i czy powinien zostać skompilowany? Czy istnieje obejście dla Visual C++?
Mam t ten sam błąd na VS2015, ale kompiluje [tutaj] (http://ideone.com/ttD7BH). –
@Ben: Dobra uwaga. Nie wiedziałem o tej witrynie. Nie mogłem ustalić, którego kompilatora używają, ale ponieważ kompiluje się pomyślnie, zakładam jego gcc. Zastanawia mnie, dlaczego kompiluje się z gcc, ale nie działa z VC++. – dkoerner