Я получил следующий код (не спорю о том, является ли это смысл, это всего лишь минимальный пример):C++ Compiler Странная Ошибка синтаксиса
struct X{
template <typename T>
T foo(){ return T(); }
};
template <typename T>
struct Z{
virtual X bar(){
bar().foo<int>();
return X();
}
};
Это не компилируется на моей г ++ 4.6.3 , Линия bar().foo<int>();
дает следующее сообщение об ошибке:
error: expected primary-expression before ‘int’
error: expected ‘;’ before ‘int’
, когда я первый сохранить результат бар() в локальной переменной, то она работает, то есть, если я заменю bar().foo<int>()
по
X x = bar();
x.foo<int>();
затем он работает , Если я теперь объявить локальную переменную auto
вместо X
, т.е .:
auto x = bar();
x.foo<int>();
тогда я получаю ту же ошибку, как и раньше. Если я удалю параметр типа из класса Z (т. Е. Сделаю его обычным, а не классом шаблона), он снова будет работать.
Если я использую ClassType как X
вместо int
в качестве параметра типа для обув, т.е. foo<X>
, то я получаю следующее сообщение об ошибке вместо:
expected primary-expression before ‘>’ token
expected primary-expression before ‘)’ token
Я действительно не в состоянии обнаружить ошибку здесь. Пожалуйста помоги!
Компилятор кода в визуальной студии. В вашем случае я считаю, что gcc имеет ошибку :) –
@ Mr.Anubis, Comeau C/C++, похоже, также скомпилирует оригинальную версию. Я тоже думаю, что это может быть ошибкой в GCC. –