template< class T >

struct A

{

    T   a = 0;

    T&  operator[]( const int i )

    {

        cout << "L" << endl;

        return  a;

    }


    T   operator[]( const int i ) const

    {

        cout << "R" << endl;

        return  a;

    }

};


void foo( A< int >& a )

{

    cout << a[ 0 ] << endl;

}


void bar( const A< int >& a )

{

    cout << a[ 0 ] << endl;

}


int main()

{

    A< int > a;

    foo( a );

    bar( a );

    return  0;

}


이러면 R 순으로 나올껄?

일반적으로 쓸 수 있는건 아니지만.