Nested class member pointer access

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Magnus Hiie

    #1

    Nested class member pointer access

    Hello,

    I compiled some source with the new Visual Studio 2005 C++ compiler and
    got some unexpected error. Most other compilers (incl. VC6, gcc) are
    fine with the code.

    Extracted sample:
    class FriendClass
    {
    class MemberClass
    {
    private:
    int member;
    static int staticMember;
    friend class FriendClass;
    };

    public:
    FriendClass(voi d);
    };

    FriendClass::Fr iendClass(void)
    {
    int FriendClass::Me mberClass::* ptr =
    &FriendClass::M emberClass::mem ber; // C2326
    int *i = &FriendClass::M emberClass::sta ticMember; // OK
    int FriendClass::Me mberClass::* ptr2 = &MemberClass::m ember; // OK
    int *i2 = &MemberClass::s taticMember; // OK
    }

    Is this code legal in C++ or is the VC2005 compiler right?

    Best regards,
    Magnus

  • Ivan Vecerina

    #2
    Re: Nested class member pointer access

    "Magnus Hiie" <magnus.hiie@gm ail.com> wrote in message
    news:1139910252 .608260.29500@g 14g2000cwa.goog legroups.com...
    : Hello,
    :
    : I compiled some source with the new Visual Studio 2005 C++ compiler and
    : got some unexpected error. Most other compilers (incl. VC6, gcc) are
    : fine with the code.
    BTW Comeau (http://www.comeaucomputing.com/tryitout/) also
    finds the code to be ok.

    : Extracted sample:
    : class FriendClass
    : {
    : class MemberClass
    : {
    : private:
    : int member;
    : static int staticMember;
    : friend class FriendClass;
    : };
    :
    : public:
    : FriendClass(voi d);
    : };
    :
    : FriendClass::Fr iendClass(void)
    : {
    : int FriendClass::Me mberClass::* ptr =
    : &FriendClass::M emberClass::mem ber; // C2326
    NB: which is:
    'FriendClass::F riendClass(void )' : function cannot access
    FriendClass::Me mberClass::memb er'

    : int *i = &FriendClass::M emberClass::sta ticMember; // OK
    : int FriendClass::Me mberClass::* ptr2 = &MemberClass::m ember; // OK
    : int *i2 = &MemberClass::s taticMember; // OK
    : }
    :
    : Is this code legal in C++ or is the VC2005 compiler right?

    This seems to be a compiler bug in VS2005.
    Worth submitting to the vendor IMHO...

    Ivan
    --
    http://ivan.vecerina.com/contact/?subject=NG_POST <- email contact form
    Brainbench MVP for C++ <> http://www.brainbench.com


    Comment

    Working...