1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include <cassert> template<typename S> struct PA1 {}; template<typename S> struct PA2 {}; template<typename S> struct PB {}; template<typename S> struct PC {}; template<typename S> struct A1 { typedef PA1<S> P; }; template<typename S> struct A2 { typedef PA2<S> P; }; template<typename S> struct B { typedef PB <S> P; }; template<typename S> struct C { typedef PC <S> P; }; template<typename S, template<typename> class T> char fn(typename T<S>::P); template<typename S, template<typename> class T> char fn(typename T<S>::P) { return 'a'; } template<typename S> char fn(typename B<S>::P) { return 'b'; } template<typename S> char fn(typename C<S>::P) { return 'c'; } template<class S, template<typename> class T> struct call { static char fn(typename T<S>::P &p) { return ::fn<S,T>(p); } }; template<class S> struct call<S,B> { static char fn(typename B<S>::P &p) { return ::fn<S>(p); } }; template<class S> struct call<S,C> { static char fn(typename C<S>::P &p) { return ::fn<S>(p); } }; int main() { assert(1); PA1<int> pa1; PA2<int> pa2; PB<int> pb; PC<int> pc; assert( (call<int, A1>::fn(pa1)) == 'a' ); assert( (call<int, A2>::fn(pa2)) == 'a' ); assert( (call<int, B>::fn(pb)) == 'b' ); assert( (call<int, C>::fn(pc)) == 'c' ); } |
I2luY2x1ZGUgPGNhc3NlcnQ+Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBTPiBzdHJ1Y3QgUEExIHt9Owp0ZW1wbGF0ZTx0eXBlbmFtZSBTPiBzdHJ1Y3QgUEEyIHt9Owp0ZW1wbGF0ZTx0eXBlbmFtZSBTPiBzdHJ1Y3QgUEIgIHt9Owp0ZW1wbGF0ZTx0eXBlbmFtZSBTPiBzdHJ1Y3QgUEMgIHt9OwoKdGVtcGxhdGU8dHlwZW5hbWUgUz4gc3RydWN0IEExIHsgdHlwZWRlZiBQQTE8Uz4gUDsgfTsKdGVtcGxhdGU8dHlwZW5hbWUgUz4gc3RydWN0IEEyIHsgdHlwZWRlZiBQQTI8Uz4gUDsgfTsKdGVtcGxhdGU8dHlwZW5hbWUgUz4gc3RydWN0IEIgIHsgdHlwZWRlZiBQQiA8Uz4gUDsgfTsKdGVtcGxhdGU8dHlwZW5hbWUgUz4gc3RydWN0IEMgIHsgdHlwZWRlZiBQQyA8Uz4gUDsgfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFMsIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBUPiBjaGFyIGZuKHR5cGVuYW1lIFQ8Uz46OlApOwoKdGVtcGxhdGU8dHlwZW5hbWUgUywgdGVtcGxhdGU8dHlwZW5hbWU+IGNsYXNzIFQ+IGNoYXIgZm4odHlwZW5hbWUgVDxTPjo6UCkKewogICAgcmV0dXJuICdhJzsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgUz4gY2hhciBmbih0eXBlbmFtZSBCPFM+OjpQKSB7ICAgcmV0dXJuICdiJzsgIH0KdGVtcGxhdGU8dHlwZW5hbWUgUz4gY2hhciBmbih0eXBlbmFtZSBDPFM+OjpQKSB7ICAgcmV0dXJuICdjJzsgIH0KCnRlbXBsYXRlPGNsYXNzIFMsIHRlbXBsYXRlPHR5cGVuYW1lPiBjbGFzcyBUPgpzdHJ1Y3QgY2FsbAp7CiAgICBzdGF0aWMgY2hhciBmbih0eXBlbmFtZSBUPFM+OjpQICZwKQogICAgewogICAgICAgICByZXR1cm4gOjpmbjxTLFQ+KHApOwogICAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgUz4Kc3RydWN0IGNhbGw8UyxCPgp7CiAgICBzdGF0aWMgY2hhciBmbih0eXBlbmFtZSBCPFM+OjpQICZwKQogICAgewogICAgICAgICByZXR1cm4gOjpmbjxTPihwKTsKICAgIH0KfTsKCnRlbXBsYXRlPGNsYXNzIFM+CnN0cnVjdCBjYWxsPFMsQz4KewogICAgc3RhdGljIGNoYXIgZm4odHlwZW5hbWUgQzxTPjo6UCAmcCkKICAgIHsKICAgICAgICAgcmV0dXJuIDo6Zm48Uz4ocCk7CiAgICB9Cn07CgppbnQgbWFpbigpCnsKICAgIGFzc2VydCgxKTsKICAgIFBBMTxpbnQ+IHBhMTsKICAgIFBBMjxpbnQ+IHBhMjsKICAgIFBCPGludD4gIHBiOwogICAgUEM8aW50PiAgcGM7CgogICAgYXNzZXJ0KCAoY2FsbDxpbnQsIEExPjo6Zm4ocGExKSkgPT0gJ2EnICk7CiAgICBhc3NlcnQoIChjYWxsPGludCwgQTI+OjpmbihwYTIpKSA9PSAnYScgKTsKCiAgICBhc3NlcnQoIChjYWxsPGludCwgQj46OmZuKHBiKSkgPT0gJ2InICk7CiAgICBhc3NlcnQoIChjYWxsPGludCwgQz46OmZuKHBjKSkgPT0gJ2MnICk7Cn0=
-
upload with new input
-
result: Success time: 0s memory: 2720 kB returned value: 0


