Здравствуйте, oziro, Вы писали:
O>Почему нет ошибок компиляции? Разве <cstddef> должен вводить тип size_t в глобальное пространство имен? Аналогично с int32_t
stddef.h -- C'шный хедер, там пространств имён не бывает. Так что C'шные копии должны быть в глобальном...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Введение типов size_t, int32_t в глоб.пространство имен
Здравствуйте, oziro, Вы писали:
O>Почему нет ошибок компиляции? Разве <cstddef> должен вводить тип size_t в глобальное пространство имен? Аналогично с int32_t
Большинство стандартных библиотек тащат size_t и в глобальное пространство имен, что не запрещено стандартом. Где-то читал, что если тип из стандартной библиотеки С определен в std, то стандарт требует, чтобы имя было зарезервировано за стандартной библиотекой и в ::. Также, он МОЖЕТ быть определен и в глобальном пространстве имен. В этом случае определения должны совпадать.
Re[2]: Введение типов size_t, int32_t в глоб.пространство им
Здравствуйте, Erop, Вы писали:
E>stddef.h -- C'шный хедер, там пространств имён не бывает. Так что C'шные копии должны быть в глобальном...
stddef.h — да, С-шный, а вот сstddef.h — С++-сный и все определения включаются в пространство имен std.
std::size_t — C++ тип
::size_t — С — тип, для обратной совместимости с С кодом.
Здравствуйте, oziro, Вы писали:
O>А cstddef — C++-сный, там все типы в std
Ну у тебя браузер кода в IDE есть? Посмотри где глобальный тип определён.
Я к тому, что он всё равно должен быть для обратной совместимости с чистым Си
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Введение типов size_t, int32_t в глоб.пространство имен
Здравствуйте, oziro, Вы писали:
O>Почему нет ошибок компиляции? Разве <cstddef> должен вводить тип size_t в глобальное пространство имен? Аналогично с int32_t
Вон в MSVC size_t доступен изкоробки: (проверить онлайн http://webcompiler.cloudapp.net/ )
A> size_t и в глобальное пространство имен, что не запрещено стандартом.
Не запрещено значит...
Полагаю, лучшим решением будет вылить воду из чайника. Т.е. сделать using ::std::size_t в общем заголовочном файле. Тогда size_t будет явно внесено в глобальное пространство имен.
Re[3]: Введение типов size_t, int32_t в глоб.пространство им
Здравствуйте, oziro, Вы писали:
O>Полагаю, лучшим решением будет вылить воду из чайника. Т.е. сделать using ::std::size_t в общем заголовочном файле. Тогда size_t будет явно внесено в глобальное пространство имен.
Так как это имя с-шного типа, зарезервированное для использования стандартной библиотекой, я бы его руками в глобальное пространство имен не тащил. Тем более, что для большинства компиляторов оно уже там.