我的用例如下:
template <typename T>
struct peel {
using type = std::conditional_t<std::is_pointer_v<T>, typename peel<std::remove_pointer_t<T>>::type, T>;
};
template <typename T>
using peel_t = typename peel<T>::type;
Run Code Online (Sandbox Code Playgroud)
但是,如果您调用此方法,peel_t<int *>
则会返回错误:
错误:“peel<int>”中没有名为“type”的类型
问题似乎是缺乏终止条件,因为peel
没有专门处理没有更多指针需要删除的情况。但我脑子里std::conditional_t
应该已经在处理这个问题了。
我的问题是,有没有一种方法可以std::conditional_t
在需要递归的场景中工作(比如这个)?我特别希望通过以下检查:
static_assert(std::is_same_v<peel_t<int **>, int>);
Run Code Online (Sandbox Code Playgroud)