const限定词失败的类型推导

时间:2018-09-08 16:36:10

标签: c++ templates const template-deduction

在编写自定义迭代器类型时,我决定希望能够从const迭代器转换为非const迭代器。我编写了以下const arr = ['one','two','three','three','five']; const clone = arr.slice() clone[3] = 'four'; console.log(clone); 函数。由于某种原因,编译器无法推断remove_constconst P相同。我从GCC 8.2中收到的错误是const int*

我的代码中是否存在阻止编译器正确推论的内容?另外,如果有更好的方法来做我想做的事,我很想知道。

types 'const P' and 'const int*' have incompatible cv-qualifiers

Here is a godbolt link with the code

1 个答案:

答案 0 :(得分:5)

对于const Pconst直接在P上限定,给定Pint *const P将为int * const (即const指针),而不是const int *(指向const的指针)。

您可以将代码更改为

template <int I, typename PtoC>
auto remove_const(my_iterator<I, PtoC> it) {
    using PtoNC = std::add_pointer_t<std::remove_const_t<std::remove_pointer_t<PtoC>>>;
    return my_iterator<I, PtoNC> { const_cast<PtoNC>(it.ptr) };
}