Рассмотрим следующий код:
template<int* a>
class base {};
int main()
{
base<(int*)0> test;
return 0;
}
И Comeau, и MSVC компилируют это без проблем (за исключением предупреждения Comeau о неиспользуемой переменной), в то время как GCC завершается ошибкой в строке base<(int*)0> test;
, указывая
В функции `int main () ':
приведение к типу, отличному от целочисленного или перечислимого, не может появляться в константном выражении
Недопустимый аргумент шаблона 1
На что именно он жалуется? И кто прав - этот код должен компилироваться? Стоит отметить, что моя версия GCC крайне старая (3.4.2), так что может иметь к этому какое-то отношение. Спасибо.