template
struct X
{ };
int main(void)
{
X 1)> a; // Works on vc9, works on g++ 4.1.2, works on Comeau 4.3.10.1
X 1)> b; // Works on vc9, works on g++ 4.1.2, works on Comeau 4.3.10.1
X> 1)> c; // Works on vc9, works on g++ 4.1.2, works on Comeau 4.3.10.1
X> 1)> d; // Fails on vc9, works on g++ 4.1.2, works on Comeau 4.3.10.1
X 1> e; // Fails on vc9, works on g++ 4.1.2, fails on Comeau 4.3.10.1
X 1> f; // Fails on vc9, fails on g++ 4.1.2, fails on Comeau 4.3.10.1
X> 1> g; // Fails on vc9, works on g++ 4.1.2, fails on Comeau 4.3.10.1
X> 1> h; // Fails on vc9, works on g++ 4.1.2, fails on Comeau 4.3.10.1
}
Почему такое несоответствие? Что разрешено/запрещено стандартом? Такое поведение также является причиной синтаксической ошибки при использовании BOOST_AUTO в vc9. Мне кажется, Комо поступает правильно, отвергая все выражения без скобок.
Вот что я наблюдал в различных компиляторах. Кажется, есть ошибки компилятора.
[code]template struct X { };
int main(void) { X 1)> a; // Works on vc9, works on g++ 4.1.2, works on Comeau 4.3.10.1 X 1)> b; // Works on vc9, works on g++ 4.1.2, works on Comeau 4.3.10.1 X> 1)> c; // Works on vc9, works on g++ 4.1.2, works on Comeau 4.3.10.1 X> 1)> d; // Fails on vc9, works on g++ 4.1.2, works on Comeau 4.3.10.1
X 1> e; // Fails on vc9, works on g++ 4.1.2, fails on Comeau 4.3.10.1 X 1> f; // Fails on vc9, fails on g++ 4.1.2, fails on Comeau 4.3.10.1 X> 1> g; // Fails on vc9, works on g++ 4.1.2, fails on Comeau 4.3.10.1 X> 1> h; // Fails on vc9, works on g++ 4.1.2, fails on Comeau 4.3.10.1 } [/code]
Почему такое несоответствие? Что разрешено/запрещено стандартом? Такое поведение также является причиной синтаксической ошибки при использовании BOOST_AUTO в vc9. Мне кажется, Комо поступает правильно, отвергая все выражения без скобок.