В стандарте C++ 20 в параграфе №2 в разделе "9.2.4 The typedef specifier" имеется следующий пример объявления алиаса
using cell = pair<void*, cell*>; // error
и нет никакого объяснения, почему это некорректное объявление, что вводит читателей стандарта в недоумение.
На самом деле это объявление может быть совершенно корректным. Все зависит от контекста, где это объявление имеет место быть. Например, в следующая программа
#include <utility>
using cell = int;
int main()
{
using cell = std::pair<void *, cell *>;
return 0;
}
является корректной.
Согласно стандарту (6.4.2 Point of declaration, параграф №3 )
цитата: |
The point of declaration of an alias or alias template immediately follows the defining-type-id to which the alias refers |
|
Это означает, что внутри
defining-type-id имя
cell ссылается на имя, введенное в глобальном пространстве имен соответствующим объявлением алиаса.
Таким образом, вышеуказанный пример объявления алиаса либо должен быть удален из стандарта, либо должно быть пояснение, почему такое объявление алиаса является некорректным. То есть нужно описание контекста.