Вот объявление nullptr_t
в <cstddef>
:
namespace std {
typedef decltype(nullptr) nullptr_t;
}
В соответствии с этим, std::nullptr_t
является псевдонимом для некоторого неопределенного фундаментального типа, который nullptr
является экземпляром. Таким образом, фактический тип nullptr
не имеет имени (ну, язык не дает ему имя, имя дано стандартной библиотекой).
nullptr
сам по себе является ключевым словом. Но стандарт не вводил ключевое слово для типа nullptr
. Вместо этого предлагается decltype(nullptr)
.
Каковы причины для этого? Я нашел это довольно запутанным. Вам нужно включить заголовок и указать std::
только для использования встроенной функции языка.
Является ли это тем, что набор ключевых слов на С++ как можно меньше? Является ли это специально для nullptr
, или комитет собирается объявить все новые типы, подобные этому, поэтому у нас было бы namespace std { typedef decltype(false) bool; }
, если бы такое решение было принято раньше?