#ifdef __cplusplus
#include <iostream>
#endif
class C{
public:
struct A{
public:
char aaa;
A (char value = 0) : aaa(value){}
void set(char value){
aaa = value;
};
char get(){return aaa;}
};
template<typename T>
void test(T&, T& a1, T& a2){
printf("1");
a1.aaa = a2.aaa;
}
template<typename T>
void test(A&, T& d1, T& d2){
printf("2");
d1.set(d2.get());
}
};
struct B : public C::A{
};
struct D{
private:
char data;
public:
D(char value = 0) : data(value){}
void set(char value){
data = value;
};
char get(){return data;}
};
void OnStart(){
C c;
B b;
D d;
c.test(b, b, b); // 2 should be: 1
c.test(b, d, d); // 2 should be: 2
}
int main(){
OnStart();
return 0;
}