c++ - 概念 TS 检查忽略私有(private)访问修饰符

标签 c++ c++-concepts

我想写一个可索引的概念,这意味着一个序列要么具有返回 RandomAccessIterator 的开始/结束,要么定义了 operator[] 并返回一个非 void 类型的值。

我使用了来自 Stroustrup's article 的想法对于序列概念,并通过以下方式对其进行了扩充:

template <class T>
concept bool Indexable = Sequence<T> || requires(T t, size_t n) {
    { t[n] } -> NotVoid;
};

它适用于大多数情况,但在以下情况下失败:
struct Bad {
    std::vector<int> nums;

private:
    int& operator[](size_t ind) {
        return nums[ind];
    }
};

static_assert(!Indexable<Bad>, "fail");

出于某种原因,我的概念忽略了 operator[] 被定义为私有(private)并返回 true 的事实。我错过了什么?

最佳答案

关于c++ - 概念 TS 检查忽略私有(private)访问修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60392303/

相关文章:

c++ - 使用 boost/property_tree 从具有多个元素/数组/子数组 C++ 的 json 文件中获取值

c++ - 将已知大小的参数 vector 应用于虚拟可变函数

c++ - 将 0 写入二进制文件 C++

c++ - 如何为不可创建类创建包装器?

c++ - 为哈希函数定义 c++20 概念

c++ - 为什么 const char[] 与 std::ranges::range 的匹配比显式的 const char* 自由重载更好,以及如何修复它?

c++ - 大多数派生类的析构函数中的纯虚拟调用

c++ - 合并排序无法在流程结束时合并零件

C++0x 将不再有概念。意见?这将如何影响你?