...или статические функции не такие уж и статические Делаем foo.cpp и boo.cpp следующего содержания: Код (Text): // foo.cpp #include <iostream> static void proc() { class Local { public: void LyaLyaLya() { std::cout << "foo!" << std::endl; } }; } int main() { return 0; } Код (Text): // boo.cpp #include <iostream> static void proc() { class Local { public: void LyaLyaLya() { std::cout << "boo!" << std::endl; } }; } Билдемсо и получаем ошибку линковки. Господа одептеги, что по этому поводу говорит стандарт? Если говорит...
green А что значит, простите, "публичное" имя? Бывает еще и не публичное? Это типа как у статик функций?
_DEN_ Да. В C/С++ имена по умолчанию публичные (public), т.е. доступные из других модулей компиляции. Чтобы сделать имя локальным для модуля, надо явно указать static (ну или использовать anonimous namespace, но это другая тема). В Асме, кстати, наоборот: имена по умолчанию локальные, и для доступности из других obj надо указать для них public.
_DEN_ какой компилер? нечто подобное было на rsdn'e. а еще александреску (или саттер, точно не помню) писал про то, как компилер ищет имена (есть несколько алго).
Хек ) Вроде бы вся функция, объявленная как static, должна быть видна только внутри одного исходного файла. ЗЫ. ПРоверил в Visual C++ 6.0: А вот G++ компилятор правильный =)
У Интела такой проблемы тоже нет. Хотя за этот баг МС особо пинать не стоит - сам Страуструп сильно не советует юзать сишный static в С++ прогах - на то есть анонимные неймспейсы. Ну и путаницы с классовым static не будет.