- #include <type_traits> 
-   
- template<typename T> 
- struct identity 
- { 
- 	using type = T;	 
- }; 
-   
- template<template<typename...> class F , typename... ARGS> 
- struct lazy 
- {}; 
-   
- namespace impl 
- { 
-     template<typename L , typename... ARGS> 
-     struct lazy_instance; 
-   
-     template<template<typename...> class F , typename... ARGS , typename... IARGS> 
-     struct lazy_instance<lazy<F,ARGS...>,IARGS...> : public identity<F<ARGS...>> 
-     {}; 
- } 
-   
- template<typename L , typename... ARGS> 
- using lazy_instance = typename impl::lazy_instance<L,ARGS...>::type; 
-   
-   
-   
- template<typename T> 
- struct foo 
- { 
- 	static_assert( sizeof(T) != sizeof(T) , "ERROR, USE INT" ); 
- }; 
-   
- template<> 
- struct foo<int> 
- {}; 
-   
-   
- using ok = lazy_instance<typename std::conditional<false, 
-                                                    lazy<foo,int>, 
-                                                    lazy<foo,bool> 
-                                                   >::type 
-                         >; 
-   
- static_assert( std::is_same<ok,foo<bool>>::value , "Mmmmm..." ); 
-   
- int main(){} 
				I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IGlkZW50aXR5CnsKCXVzaW5nIHR5cGUgPSBUOwkKfTsKCnRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBGICwgdHlwZW5hbWUuLi4gQVJHUz4Kc3RydWN0IGxhenkKe307CgpuYW1lc3BhY2UgaW1wbAp7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMICwgdHlwZW5hbWUuLi4gQVJHUz4KICAgIHN0cnVjdCBsYXp5X2luc3RhbmNlOwoKICAgIHRlbXBsYXRlPHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBGICwgdHlwZW5hbWUuLi4gQVJHUyAsIHR5cGVuYW1lLi4uIElBUkdTPgogICAgc3RydWN0IGxhenlfaW5zdGFuY2U8bGF6eTxGLEFSR1MuLi4+LElBUkdTLi4uPiA6IHB1YmxpYyBpZGVudGl0eTxGPEFSR1MuLi4+PgogICAge307Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIEwgLCB0eXBlbmFtZS4uLiBBUkdTPgp1c2luZyBsYXp5X2luc3RhbmNlID0gdHlwZW5hbWUgaW1wbDo6bGF6eV9pbnN0YW5jZTxMLEFSR1MuLi4+Ojp0eXBlOwoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpzdHJ1Y3QgZm9vCnsKCXN0YXRpY19hc3NlcnQoIHNpemVvZihUKSAhPSBzaXplb2YoVCkgLCAiRVJST1IsIFVTRSBJTlQiICk7Cn07Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBmb288aW50Pgp7fTsKCgp1c2luZyBvayA9IGxhenlfaW5zdGFuY2U8dHlwZW5hbWUgc3RkOjpjb25kaXRpb25hbDxmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF6eTxmb28saW50PiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF6eTxmb28sYm9vbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Ojp0eXBlCiAgICAgICAgICAgICAgICAgICAgICAgID47CgpzdGF0aWNfYXNzZXJ0KCBzdGQ6OmlzX3NhbWU8b2ssZm9vPGJvb2w+Pjo6dmFsdWUgLCAiTW1tbW0uLi4iICk7CgppbnQgbWFpbigpe30=