Возьмем следующий стандартный проход:
[C++11: 5.3.3/6]:Результатsizeofиsizeof...является константой типаstd::size_t. [Примечание:std::size_tопределяется в стандартном заголовке<cstddef>(18.2). -end note]
Сейчас:
[C++11: 18.2/6]:Типsize_tпредставляет собой целочисленный тип без знака, определенный для реализации, который достаточно велик, чтобы содержать размер в байтах любого объекта.
Конечно, в проходе не требуется, чтобы size_t был псевдонимом типа, определенным с помощью typedef, но поскольку он явно заявил, что он доступен стандартным заголовком <cstddef>, я думаю, мы можем считать, что прочитаем, что если не включить <cstddef>, следует удалить любую гарантию, что size_t будет доступным для программы.
Однако, согласно этой первой цитате, мы можем независимо получить выражение типа std::size_t.
Мы можем фактически продемонстрировать оба этих факта:
int main()
{
    typedef decltype(sizeof(0)) my_size_t;
    my_size_t x   = 0;  // OK
    std::size_t y = 1;  // error: 'size_t' is not a member of 'std'
}
 std::size_t не отображается программе, но sizeof(0) все еще дает нам один? Действительно?
  Нельзя ли сказать, что 5.3.3/6 является ошибочным и что он фактически имеет "тот же тип, что и любой std::size_t разрешается", но не std::size_t сам?
Конечно, эти два являются одинаковыми, если std::size_t является псевдонимом типа, но, опять же, этого не требуется.