В какой-то момент я читал, что потоки нельзя безопасно создавать до первой строки main(), потому что компиляторы вставляют специальный код, чтобы потоки работали во время статической инициализации. Поэтому, если у вас есть глобальный объект, который создает поток при построении, ваша программа может рухнуть. Но сейчас я не могу найти исходную статью, и мне любопытно, насколько сильное это ограничение — строго ли оно соответствует стандарту? Верно ли это для большинства компиляторов? Останется ли это верным в C++0x? Может ли компилятор, соответствующий стандартам, сделать саму статическую инициализацию многопоточной? (например, обнаружение того, что два глобальных объекта не касаются друг друга, и их инициализация в отдельных потоках для ускорения запуска программы)
Изменить: чтобы уточнить, я пытаюсь хотя бы понять, действительно ли реализации значительно отличаются в этом отношении, или это что-то псевдостандартное. Например, технически стандарт позволяет перетасовывать расположение членов, которые принадлежат к разным спецификаторам доступа (общедоступные/защищенные и т. д.). Но ни один компилятор, о котором я знаю, на самом деле не делает этого.