#include <iostream>
#include <algorithm>
using namespace std;
template < typename T, size_t N>
class Data
{
private :
T data[ N] ;
public :
// default constructor
Data( ) : data( ) { }
// template constructor from source
template < size_t M>
Data( const Data< T,M> & arg) : data( )
{
// ERROR: can't access Data<T,M>::data
std:: copy_n ( std:: begin ( arg.data ) , std:: min ( N,M) , std:: begin ( data) ) ;
}
template < size_t M>
Data& operator = ( const Data< T,M> & arg)
{
// same issue
std:: copy_n ( arg.data , std:: min ( N,M) , data) ;
return * this ;
}
} ;
int main( )
{
Data< char ,10 > x1;
Data< char ,12 > x2 = x1;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IE4+CmNsYXNzIERhdGEKewpwcml2YXRlOgogICAgVCBkYXRhW05dOwogICAKcHVibGljOgogICAgLy8gZGVmYXVsdCBjb25zdHJ1Y3RvcgogICAgRGF0YSgpIDogZGF0YSgpIHt9CiAgICAKICAgIC8vIHRlbXBsYXRlIGNvbnN0cnVjdG9yIGZyb20gc291cmNlCiAgICB0ZW1wbGF0ZTxzaXplX3QgTT4KICAgIERhdGEoY29uc3QgRGF0YTxULE0+JiBhcmcpIDogZGF0YSgpCiAgICB7CiAgICAgICAgLy8gRVJST1I6IGNhbid0IGFjY2VzcyBEYXRhPFQsTT46OmRhdGEKICAgICAgICBzdGQ6OmNvcHlfbihzdGQ6OmJlZ2luKGFyZy5kYXRhKSwgc3RkOjptaW4oTixNKSwgc3RkOjpiZWdpbihkYXRhKSk7CiAgICB9CgogICAgdGVtcGxhdGU8c2l6ZV90IE0+CiAgICBEYXRhJiBvcGVyYXRvciA9KGNvbnN0IERhdGE8VCxNPiYgYXJnKQogICAgewogICAgICAgIC8vIHNhbWUgaXNzdWUKICAgICAgICBzdGQ6OmNvcHlfbihhcmcuZGF0YSwgc3RkOjptaW4oTixNKSwgZGF0YSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQp9OwoKaW50IG1haW4oKQp7CiAgICBEYXRhPGNoYXIsMTA+IHgxOwogICAgRGF0YTxjaGFyLDEyPiB4MiA9IHgxOwogICAgcmV0dXJuIDA7Cn0=
compilation info
prog.cpp: In function ‘int main()’:
prog.cpp:35:19: warning: variable ‘x2’ set but not used [-Wunused-but-set-variable]
prog.cpp: In instantiation of ‘Data<T, N>::Data(const Data<T, M>&) [with unsigned int M = 10u; T = char; unsigned int N = 12u]’:
prog.cpp:35:24: required from here
prog.cpp:9:13: error: ‘char Data<char, 10u>::data [10]’ is private
prog.cpp:20:9: error: within this context
stdout