RandomAccessIterator를 리턴하는 시퀀스가 시작 / 종료되었거나 operator []가 정의되어 있고 void가 아닌 유형의 값을 리턴한다는 색인 가능한 개념을 작성하려고합니다.
Stroustrup의 기사 에서 Sequence 개념에 대한 아이디어를 사용 하여 다음과 같이 보강했습니다.
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를 반환한다는 사실을 무시합니다. 내가 무엇을 놓치고 있습니까?