Например, односвязный узел списка может быть определен следующим образом.
namespace example_part1
{
class node
{
node * next;
int value;
}
}
предполагая, что у нас есть список только целых чисел. Этот класс может иметь член, указывающий на его собственный тип, потому что все указатели имеют одинаковый размер, независимо от размера базовой структуры данных.
Теперь, почему мне не разрешено это делать
namespace example_part2
{
using node = std::pair<example_part2::node *, int>;
}
?
Я знаю, что это кажется глупым примером, но я хочу узнать больше о причине, почему это не скомпилируется. На самом деле у меня похожая ситуация, где это может быть полезно (не с std::pair). Кроме того, предположим, что эти два сегмента кода принадлежат разным программам, т. е. у меня нет пользовательского класса узла, а также пары псевдонимов узла в одной и той же программе.
using node = std::pair<node *, int>;
совсем один? Например,node
еще не определено? Как он должен знать настоящий тип? Когда заканчивается рекурсия? - person Millie Smith   schedule 29.04.2017std::pair<std::pair<std::pair<....., int> *, int> *, int>
- person Millie Smith   schedule 29.04.2017using node = std::pair<node *, int>;
нужно объявить внутриstruct node
, то это чепуха. Вы не можете назвать какую-либо сущность с тем же именем, что и $the class-name внутри $the class' body. - person WhiZTiM   schedule 29.04.2017namespaces
для их устранения неоднозначности. - person WhiZTiM   schedule 29.04.2017