Введение типов size_t, int32_t в глоб.пространство имен
От: oziro Нигерия  
Дата: 23.03.17 08:33
Оценка:
#include <cstdint>
#include <cstddef>

int main()
{
    std::size_t s1 = 41;
    ::size_t s2 = 42;
    
    std::int32_t i1 = 31;
    ::int32_t i2 = 32;

    return s1 + s2 + i1 + i2;
}


http://rextester.com/XUQMMW71025

Почему нет ошибок компиляции? Разве <cstddef> должен вводить тип size_t в глобальное пространство имен? Аналогично с int32_t
Отредактировано 23.03.2017 8:45 oziro . Предыдущая версия . Еще …
Отредактировано 23.03.2017 8:35 oziro . Предыдущая версия .
Отредактировано 23.03.2017 8:35 oziro . Предыдущая версия .
Re: Введение типов size_t, int32_t в глоб.пространство имен
От: Erop Россия  
Дата: 23.03.17 09:20
Оценка: +1
Здравствуйте, oziro, Вы писали:

O>Почему нет ошибок компиляции? Разве <cstddef> должен вводить тип size_t в глобальное пространство имен? Аналогично с int32_t


stddef.h -- C'шный хедер, там пространств имён не бывает. Так что C'шные копии должны быть в глобальном...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Введение типов size_t, int32_t в глоб.пространство имен
От: oziro Нигерия  
Дата: 23.03.17 09:55
Оценка:
Здравствуйте, Erop, Вы писали:

E> stddef.h -- C'шный хедер, там пространств имён не бывает



А cstddef — C++-сный, там все типы в std
Re: Введение типов size_t, int32_t в глоб.пространство имен
От: andyp  
Дата: 23.03.17 09:56
Оценка:
Здравствуйте, oziro, Вы писали:

O>Почему нет ошибок компиляции? Разве <cstddef> должен вводить тип size_t в глобальное пространство имен? Аналогично с int32_t


Большинство стандартных библиотек тащат size_t и в глобальное пространство имен, что не запрещено стандартом. Где-то читал, что если тип из стандартной библиотеки С определен в std, то стандарт требует, чтобы имя было зарезервировано за стандартной библиотекой и в ::. Также, он МОЖЕТ быть определен и в глобальном пространстве имен. В этом случае определения должны совпадать.
Re[2]: Введение типов size_t, int32_t в глоб.пространство им
От: Videoman Россия https://hts.tv/
Дата: 23.03.17 09:58
Оценка:
Здравствуйте, Erop, Вы писали:

E>stddef.h -- C'шный хедер, там пространств имён не бывает. Так что C'шные копии должны быть в глобальном...


stddef.h — да, С-шный, а вот сstddef.h — С++-сный и все определения включаются в пространство имен std.
std::size_t — C++ тип
::size_t — С — тип, для обратной совместимости с С кодом.
Отредактировано 23.03.2017 9:58 Videoman . Предыдущая версия .
Re[3]: Введение типов size_t, int32_t в глоб.пространство имен
От: Erop Россия  
Дата: 23.03.17 09:58
Оценка:
Здравствуйте, oziro, Вы писали:

O>А cstddef — C++-сный, там все типы в std


Ну у тебя браузер кода в IDE есть? Посмотри где глобальный тип определён.
Я к тому, что он всё равно должен быть для обратной совместимости с чистым Си
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: Введение типов size_t, int32_t в глоб.пространство имен
От: _NN_ www.nemerleweb.com
Дата: 23.03.17 10:52
Оценка: 2 (1)
Здравствуйте, oziro, Вы писали:

O>Почему нет ошибок компиляции? Разве <cstddef> должен вводить тип size_t в глобальное пространство имен? Аналогично с int32_t

Вон в MSVC size_t доступен изкоробки: (проверить онлайн http://webcompiler.cloudapp.net/ )
int main(){   size_t n = 1; }


А вообще поиск:
https://rsdn.org/forum/cpp/214111.flat#214111
Автор: MaximE
Дата: 14.03.03

https://rsdn.org/forum/cpp/834696.flat#834696
Автор: Шахтер
Дата: 03.10.04
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Введение типов size_t, int32_t в глоб.пространство имен
От: oziro Нигерия  
Дата: 23.03.17 10:55
Оценка:
A> size_t и в глобальное пространство имен, что не запрещено стандартом.

Не запрещено значит...

Полагаю, лучшим решением будет вылить воду из чайника. Т.е. сделать using ::std::size_t в общем заголовочном файле. Тогда size_t будет явно внесено в глобальное пространство имен.
Re[3]: Введение типов size_t, int32_t в глоб.пространство им
От: andyp  
Дата: 23.03.17 11:36
Оценка: +1
Здравствуйте, oziro, Вы писали:

O>Полагаю, лучшим решением будет вылить воду из чайника. Т.е. сделать using ::std::size_t в общем заголовочном файле. Тогда size_t будет явно внесено в глобальное пространство имен.


Так как это имя с-шного типа, зарезервированное для использования стандартной библиотекой, я бы его руками в глобальное пространство имен не тащил. Тем более, что для большинства компиляторов оно уже там.
Отредактировано 23.03.2017 11:38 andyp . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.