首页 > 解决方案 > recursive_iter_value_t 模板结构

问题描述

我正在尝试std::iter_value_t使用 C++20 概念实现递归版本,以便可以检索T嵌套容器的基本类型。std::vector<std::vector<...std::vector<T>...>>实验实现如下。

template<typename T>
concept is_iterable = requires(T x)
{
    *std::begin(x);
    std::end(x);
};

template<typename T> requires (!is_iterable<T>)
struct recursive_iter_value_t_detail
{
    typedef typename T type;
};

template<typename T> requires (is_iterable<T>)
struct recursive_iter_value_t_detail
{
    typedef typename std::iter_value_t<recursive_iter_value_t_detail<T>::type> type;
};

template<typename T>
using recursive_iter_value_t = recursive_iter_value_t_detail<T>::type;

但是,我收到了错误消息'type': use of dependent type name must be prefixed with 'typename',我想知道问题到底出在哪里。

的预期输出recursive_iter_value_t<std::vector<std::vector<int>>>int

标签: c++templatesrecursionc++20c++-concepts

解决方案


推荐阅读