Дан следующий тип:
struct Object {
using NestedAlias = bool;
};
namespace Hidden {
struct Object {
using NestedAlias = bool;
};
}
Я понимаю, что тип может быть разрешен из пространства имен шаблона.
template <typename Type>
void legal(Type type) {
using Alias = typename Type::NestedAlias;
}
legal(Object{});
Однако мне не удалось разрешить, когда тип шаблона находится справа от оператора разрешения, а левая часть является пространством имен. Возможно ли это?
template <typename Type>
void illegal(Type type) {
using Alias = Hidden::Type;
using Alias = Hidden::decltype(Type);
using Alias = typename Hidden::Type;
using Alias = typename Hidden::decltype(Type);
}
Для тех, кому интересно, каков вариант использования:
template <typename Type>
void double_object_use_case(Type type) {
Hidden::Type hidden_type;
operation_on_both_types(type, hidden_type);
}
Годболт-ссылка для игры: https://godbolt.org/z/LRNK0b