Форум » C/C++ » Еще раз о пространстве имен и возможном баге в MS VC++ 2010. » Ответить

Еще раз о пространстве имен и возможном баге в MS VC++ 2010.

Сыроежка: Обнаружил такой простой баг в MS VC++ 2010. Есть код [pre2]#include <iostream> namespace A { int i = 5; } int main() { using namespace A; std::cout << "::i = " << ::i << std::endl; }[/pre2] Компилятор MS VC++ 2010 выдает сообщение об ошибке, что имя ::i не находит. Если же директиву using вынести из функции main, то переменная ::i находится. [pre2]#include <iostream> namespace A { int i = 5; } using namespace A; int main() { std::cout << "::i = " << ::i << std::endl; }[/pre2] Что-то я нигде в стандарте С++ не усмотрел, что первый вариант не должен компилироваться и отличается от последнего варианта при поиске имен, квалифицированных оператором ::.

Ответов - 2

PSP : Я вот далек от С, но интересно: MS VC++ глючный компилятор?

Сыроежка: PSP пишет: Я вот далек от С, но интересно: MS VC++ глючный компилятор? Чем больше я с ним работаю, тем больше глюков нахожу. Но дело в том, что вышло исправление к этому компилятору SP1, которое я еще не установил. Возможно, что часть ошибок там уже исправили. Но в целом впечатление такое, тчо этот компилятор повторяет путь компилятора Borland C++ Builder. Там также главным нареканием со стороны пользователей была его несовместимость со стнадартом. Из-за этого часть пользователей вынуждены были переходить на компляторы других фирм. В итоге Borland C++ Builder как продукт именно Borland перестал существовать в виду того, что не приносил прибыль, и Borland его перепродала. Из-за этого популярность Borland Builder резко упала. Я думаю, что Microsoft поступил просто не совсем чистоплотно.. Им главное было - это сбыть продукт в установленные сроки, а уж потом серьезно за него браться. То есть задача была срубить деньги в соответсвии с заранее составленным планом. А план у них такой, что каждлые два года выпускать новую версию своего компиляторпа. Был MS VC++ 2008, теперь MS VC++ 2010, наверное на подходе MS BC++ 2012.



полная версия страницы