#include <iostream>
template<class T>struct identity{using type=T;};
template<class T>using identity_t=typename identity<T>::type;
template <typename T, template<class>class Z=identity_t>
struct Yin {
Z<T> *m_ptr;
};
template <typename T, template<class>class Z=identity_t>
struct Yang {
Z<T> *m_ptr;
};
template<
template<class, template<class>class>class Yin,
template<class, template<class>class>class Yang
>
struct flopper {
template<class T> struct flip {
template<class U> using flop_t=typename flopper<Yang, Yin>::template flip_t<U>;
using type = Yang<T, flop_t>;
};
template<class T> using flip_t=typename flip<T>::type;
};
using yin = Yin< void, flopper<Yin, Yang>::template flip_t >;
using yang = Yang< void, flopper<Yang, Yin>::template flip_t >;
int main() {
yin a={nullptr};
yang b={&a};
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKICAgIHRlbXBsYXRlPGNsYXNzIFQ+c3RydWN0IGlkZW50aXR5e3VzaW5nIHR5cGU9VDt9OwogICAgdGVtcGxhdGU8Y2xhc3MgVD51c2luZyBpZGVudGl0eV90PXR5cGVuYW1lIGlkZW50aXR5PFQ+Ojp0eXBlOwoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0ZW1wbGF0ZTxjbGFzcz5jbGFzcyBaPWlkZW50aXR5X3Q+CiAgICBzdHJ1Y3QgWWluIHsKICAgICAgWjxUPiAqbV9wdHI7CiAgICB9OwoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0ZW1wbGF0ZTxjbGFzcz5jbGFzcyBaPWlkZW50aXR5X3Q+CiAgICBzdHJ1Y3QgWWFuZyB7CiAgICAgIFo8VD4gKm1fcHRyOwogICAgfTsKCiAgICB0ZW1wbGF0ZTwKICAgICAgdGVtcGxhdGU8Y2xhc3MsIHRlbXBsYXRlPGNsYXNzPmNsYXNzPmNsYXNzIFlpbiwKICAgICAgdGVtcGxhdGU8Y2xhc3MsIHRlbXBsYXRlPGNsYXNzPmNsYXNzPmNsYXNzIFlhbmcKICAgID4KICAgIHN0cnVjdCBmbG9wcGVyIHsKICAgICAgdGVtcGxhdGU8Y2xhc3MgVD4gc3RydWN0IGZsaXAgewogICAgICAJdGVtcGxhdGU8Y2xhc3MgVT4gdXNpbmcgZmxvcF90PXR5cGVuYW1lIGZsb3BwZXI8WWFuZywgWWluPjo6dGVtcGxhdGUgZmxpcF90PFU+OwogICAgICAgIHVzaW5nIHR5cGUgPSBZYW5nPFQsIGZsb3BfdD47CiAgICAgIH07CiAgICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHVzaW5nIGZsaXBfdD10eXBlbmFtZSBmbGlwPFQ+Ojp0eXBlOwogICAgfTsKCiAgICB1c2luZyB5aW4gPSBZaW48IHZvaWQsIGZsb3BwZXI8WWluLCBZYW5nPjo6dGVtcGxhdGUgZmxpcF90ID47CiAgICB1c2luZyB5YW5nID0gWWFuZzwgdm9pZCwgZmxvcHBlcjxZYW5nLCBZaW4+Ojp0ZW1wbGF0ZSBmbGlwX3QgPjsKCgppbnQgbWFpbigpIHsKCXlpbiBhPXtudWxscHRyfTsKCXlhbmcgYj17JmF9OwoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJcmV0dXJuIDA7Cn0=
prog.cpp: In function ‘int main()’:
prog.cpp:34:12: error: cannot convert ‘yin* {aka Yin<void, flopper<Yin, Yang>::flip_t>*}’ to ‘flopper<Yang, Yin>::flip_t<void>* {aka Yin<void, flopper<Yang, Yin>::flip<void>::flop_t>*}’ in initialization
yang b={&a};
^
prog.cpp:34:7: warning: unused variable ‘b’ [-Wunused-variable]
yang b={&a};
^