2

There is a code. Is this ok according to the standard? For me it looks like a trick to violate private access.

class Foo
{
    class Boo
    {
    public:
        Boo() {std::cout << "BOO" << std::endl;}
        void boo() {}
    };
public:
    Boo b() {return Boo{};};
};

int main()
{
    Foo::Boo boo1; // I can't do that because Boo is private

    auto boo2 = Foo().b(); // Is also looks weird.
    using Boo = decltype(boo2);
    Boo boo3; // But I can do that.

    return 0;
}
Daniil
  • 143
  • 3
  • 9
  • C++ access rules are dictated by name only, private classes can be deduced by decltype, private members can be accessed through member pointers, etc. – kmdreko Aug 21 '18 at 05:09

0 Answers0