У меня есть рекурсивный тип данных, например:
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;
Я знаю, что это можно сделать с помощью runtime-косвенности, но это не то, что я ищу.