Функция c ++ публично вызывается, несмотря на то, что она явно объявлена ​​как private - PullRequest
0 голосов
/ 28 апреля 2018

В настоящее время я изучаю, почему я могу вызывать приватную функцию из контекста, из которого она не должна быть доступна. Я уже сузил его до очень простого примера, но все еще не могу определить проблему.

LIVE пример

Это моя суженная версия:

template<typename From, typename To>
concept bool ConvertibleNoNarrow = requires(From f, To t) {
    t = { f };
};

template<typename T>
class Wrapper {
    T t;
public:
    Wrapper(ConvertibleNoNarrow<T> u) : t(u) { }

private:
    // should be PRIVATE
    void operator()() { }
};

int main() {
    Wrapper<long> w(1);

    // should not be able to call this!
    w();
}

1 Ответ

0 голосов
/ 28 апреля 2018

Да. Он должен быть закрытым, и вы не сможете вызывать этого оператора таким образом. Я пробовал это с удалением 'concept', и g ++ / clang действительно жалуются на это.

...