Rozważmy następujący kod:Casting wskaźnik jako szablonu argumentu: Comeau & MSVC skompilować, GCC nie
template<int* a>
class base {};
int main()
{
base<(int*)0> test;
return 0;
}
Zarówno Comeau i MSVC skompilować to bez problemów (z wyjątkiem Comeau ostrzeżenie o nieużywanej zmiennej), natomiast nie GCC na linii base<(int*)0> test;
, podając
In function `int main()': a casts to a type other than an integral or enumeration type cannot appear in a constant-expression
template argument 1 is invalid
Na co dokładnie narzeka? A kto ma rację - czy ten kod się skompiluje? Warto zauważyć, że moja wersja GCC to wyjątkowo stara (3.4.2), więc może mieć z tym coś wspólnego. Dzięki.
FYI: z gcc 4.4.1: test.cpp: 6: error: odlew do innego typu niż integralna lub wyliczenia typu nie może pojawić się w stałej ekspresji test.cpp: 6: error: template argument 1 jest nieprawidłowy test.cpp: 6: błąd: nieprawidłowy typ w deklaracji przed ';' token – jdehaan
Dzięki jdehaan, więc wiemy, że nie ma to nic wspólnego z moją wersją. – GRB
Witamy w Ur. Próbowałem trochę zmodyfikować kod, aby go skompilować. Niewielkie różnice nie wyjaśniają problemu ... – jdehaan