У меня есть рекурсивный тип данных, подобный этому:
template<typename T>
struct SomeType {
std::map<T, SomeType<T>> mapping;
};
SomeType<int> foo;
Это прекрасно работает, но замена std::map
на std::unordered_map
приводит к ошибке компиляции из-за неполного типа.Я (или gcc) делаю ошибку где-нибудь?или это просто часть стандарта?
Я также хотел бы, чтобы внутренний контейнер определялся параметром шаблона (например, std::stack
и std::queue
), но я не могу найти способсделайте это, так как это потребует, чтобы SomeType уже был определен.
Неполный пример:
template<typename T, typename C = std::map<T, SomeType<[???]>>>
struct SomeType {
C mapping;
};
SomeType<int, [???]> foo;
Я знаю, что это можно сделать с косвенным указанием времени выполнения, но это не то, что я ищу.