#include <stdio.h>
#define COUNT 5
typedef int(&DEF_ARRAY)[COUNT];
class A
{
public:
int m_Array[COUNT];
/* error
int(&)[COUNT] GetArray( void ) { return m_Array; }
*/
A()
{
for( int i=0; i<int(sizeof( m_Array )/sizeof( m_Array[0] )); ++i )
{
m_Array[i] = i;
}
}
DEF_ARRAY GetArray( void ) { return m_Array; }
};
void ReceiveArray( int array[COUNT] )
{
printf( "%d / %d\n", sizeof( array[0] ), sizeof( array ) );
for( int i=0; i<int(sizeof( array )/sizeof( array[0] )); ++i )
{
printf( " [%d] %d\n", i, array[i] );
}
}
void ReceiveArrayRef( int(&array)[COUNT] )
{
printf( "%d / %d\n", sizeof( array[0] ), sizeof( array ) );
for( int i=0; i<int(sizeof( array )/sizeof( array[0] )); ++i )
{
printf( " [%d] %d\n", i, array[i] );
}
}
int main( void )
{
A a;
/* error
int array[COUNT] = a.GetArray();
*/
int (&arrayRef)[COUNT] = a.GetArray();
puts( "a.m_Array" ); ReceiveArray( a.m_Array );
puts( "a.m_Array" ); ReceiveArrayRef( a.m_Array );
puts( "arrayRef" ); ReceiveArrayRef( arrayRef );
arrayRef[2] = 99;
puts( "a.m_Array" ); ReceiveArrayRef( a.m_Array );
puts( "arrayRef" ); ReceiveArrayRef( arrayRef );
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIENPVU5UIDUKdHlwZWRlZiBpbnQoJkRFRl9BUlJBWSlbQ09VTlRdOwpjbGFzcyBBCnsKcHVibGljOgoJaW50IG1fQXJyYXlbQ09VTlRdOwoJLyogZXJyb3IKCWludCgmKVtDT1VOVF0gR2V0QXJyYXkoIHZvaWQgKSB7IHJldHVybiBtX0FycmF5OyB9CgkqLwoJQSgpCgl7CgkJZm9yKCBpbnQgaT0wOyBpPGludChzaXplb2YoIG1fQXJyYXkgKS9zaXplb2YoIG1fQXJyYXlbMF0gKSk7ICsraSApCgkJewoJCQltX0FycmF5W2ldID0gaTsKCQl9CQkKCX0KCURFRl9BUlJBWSBHZXRBcnJheSggdm9pZCApIHsgcmV0dXJuIG1fQXJyYXk7IH0KfTsKCnZvaWQgUmVjZWl2ZUFycmF5KCBpbnQgYXJyYXlbQ09VTlRdICkKewoJcHJpbnRmKCAiJWQgLyAlZFxuIiwgc2l6ZW9mKCBhcnJheVswXSApLCBzaXplb2YoIGFycmF5ICkgKTsKCWZvciggaW50IGk9MDsgaTxpbnQoc2l6ZW9mKCBhcnJheSApL3NpemVvZiggYXJyYXlbMF0gKSk7ICsraSApCgl7CgkJcHJpbnRmKCAiICBbJWRdICVkXG4iLCBpLCBhcnJheVtpXSApOwoJfQp9CnZvaWQgUmVjZWl2ZUFycmF5UmVmKCBpbnQoJmFycmF5KVtDT1VOVF0gKQp7CglwcmludGYoICIlZCAvICVkXG4iLCBzaXplb2YoIGFycmF5WzBdICksIHNpemVvZiggYXJyYXkgKSApOwoJZm9yKCBpbnQgaT0wOyBpPGludChzaXplb2YoIGFycmF5ICkvc2l6ZW9mKCBhcnJheVswXSApKTsgKytpICkKCXsKCQlwcmludGYoICIgIFslZF0gJWRcbiIsIGksIGFycmF5W2ldICk7Cgl9Cn0KCmludCBtYWluKCB2b2lkICkKewoJQSBhOwoJLyogZXJyb3IKCWludCBhcnJheVtDT1VOVF0gPSBhLkdldEFycmF5KCk7CgkqLwoJaW50ICgmYXJyYXlSZWYpW0NPVU5UXSA9IGEuR2V0QXJyYXkoKTsKCXB1dHMoICJhLm1fQXJyYXkiICk7IFJlY2VpdmVBcnJheSggYS5tX0FycmF5ICk7CglwdXRzKCAiYS5tX0FycmF5IiApOyBSZWNlaXZlQXJyYXlSZWYoIGEubV9BcnJheSApOwogICAgcHV0cyggImFycmF5UmVmIiAgKTsgUmVjZWl2ZUFycmF5UmVmKCBhcnJheVJlZiApOwogICAgYXJyYXlSZWZbMl0gPSA5OTsKCXB1dHMoICJhLm1fQXJyYXkiICk7IFJlY2VpdmVBcnJheVJlZiggYS5tX0FycmF5ICk7CiAgICBwdXRzKCAiYXJyYXlSZWYiICApOyBSZWNlaXZlQXJyYXlSZWYoIGFycmF5UmVmICk7CiAgICByZXR1cm4gMDsKfQ==