Проверка концепции TS игнорирует модификатор частного доступа - PullRequest
10 голосов
/ 25 февраля 2020

Я хочу написать концепцию Indexable, означающую, что последовательность либо имеет начало / конец, который возвращает RandomAccessIterator, либо определен operator [] и возвращает значение не пустого типа.

Я использовал идеи из Статья Страуструпа для концепции последовательности и дополнена:

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. Чего мне не хватает?

1 Ответ

1 голос
/ 25 февраля 2020
...