- #include <iostream> 
-   
- template<int N> 
- struct NumWriter1 { 
-     static void write() { 
-         std::cout << "Передано число " << N << std::endl; 
-     } 
- }; 
-   
- template<> 
- struct NumWriter1<0> { 
-     static void write() { 
-         std::cout << "Передан нолик" << std::endl; 
-     } 
- }; 
-   
- template<int N1, int N2> 
- struct NumWriter2 { 
-     static void write() { 
-         std::cout << "Переданы числа " << N1  << " и " << N2 << std::endl; 
-     } 
- }; 
-   
- template<int N2> 
- struct NumWriter2<0, N2> { 
-     static void write() { 
-         std::cout << "Передан нолик и число " << N2 << std::endl; 
-     } 
- }; 
-   
- template<int N1> 
- struct NumWriter2<N1, 0> { 
-     static void write() { 
-         std::cout << "Передано число " << N1 << " и нолик" << std::endl; 
-     } 
- }; 
-   
- // Если удалить специализацию ниже, то будет ошибка компиляции, потому что 
- // NumWriter2<0, 0>::write(); подходит как для специализации <0, N2>, так и  
- // для <N1, 0> и неясно какую выбирать. 
- template<> 
- struct NumWriter2<0, 0> { 
-     static void write() { 
-         std::cout << "Переданы два нолика" << std::endl; 
-     } 
- }; 
-   
-   
-   
- int main() { 
-     NumWriter1<10>::write(); 
-     NumWriter1<0>::write(); 
-   
-     NumWriter2<0, 1>::write(); 
-     NumWriter2<0, 234>::write(); 
-     NumWriter2<2, 56>::write(); 
-     NumWriter2<2, 0>::write(); 
-     NumWriter2<0, 0>::write(); 
-     return 0; 
- } 
-   
				I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8aW50IE4+CnN0cnVjdCBOdW1Xcml0ZXIxIHsKICAgIHN0YXRpYyB2b2lkIHdyaXRlKCkgewogICAgICAgIHN0ZDo6Y291dCA8PCAi0J/QtdGA0LXQtNCw0L3QviDRh9C40YHQu9C+ICIgPDwgTiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBOdW1Xcml0ZXIxPDA+IHsKICAgIHN0YXRpYyB2b2lkIHdyaXRlKCkgewogICAgICAgIHN0ZDo6Y291dCA8PCAi0J/QtdGA0LXQtNCw0L0g0L3QvtC70LjQuiIgPDwgc3RkOjplbmRsOwogICAgfQp9OwoKdGVtcGxhdGU8aW50IE4xLCBpbnQgTjI+CnN0cnVjdCBOdW1Xcml0ZXIyIHsKICAgIHN0YXRpYyB2b2lkIHdyaXRlKCkgewogICAgICAgIHN0ZDo6Y291dCA8PCAi0J/QtdGA0LXQtNCw0L3RiyDRh9C40YHQu9CwICIgPDwgTjEgIDw8ICIg0LggIiA8PCBOMiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07Cgp0ZW1wbGF0ZTxpbnQgTjI+CnN0cnVjdCBOdW1Xcml0ZXIyPDAsIE4yPiB7CiAgICBzdGF0aWMgdm9pZCB3cml0ZSgpIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgItCf0LXRgNC10LTQsNC9INC90L7Qu9C40Log0Lgg0YfQuNGB0LvQviAiIDw8IE4yIDw8IHN0ZDo6ZW5kbDsKICAgIH0KfTsKCnRlbXBsYXRlPGludCBOMT4Kc3RydWN0IE51bVdyaXRlcjI8TjEsIDA+IHsKICAgIHN0YXRpYyB2b2lkIHdyaXRlKCkgewogICAgICAgIHN0ZDo6Y291dCA8PCAi0J/QtdGA0LXQtNCw0L3QviDRh9C40YHQu9C+ICIgPDwgTjEgPDwgIiDQuCDQvdC+0LvQuNC6IiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgovLyDQldGB0LvQuCDRg9C00LDQu9C40YLRjCDRgdC/0LXRhtC40LDQu9C40LfQsNGG0LjRjiDQvdC40LbQtSwg0YLQviDQsdGD0LTQtdGCINC+0YjQuNCx0LrQsCDQutC+0LzQv9C40LvRj9GG0LjQuCwg0L/QvtGC0L7QvNGDINGH0YLQvgovLyBOdW1Xcml0ZXIyPDAsIDA+Ojp3cml0ZSgpOyDQv9C+0LTRhdC+0LTQuNGCINC60LDQuiDQtNC70Y8g0YHQv9C10YbQuNCw0LvQuNC30LDRhtC40LggPDAsIE4yPiwg0YLQsNC6INC4IAovLyDQtNC70Y8gPE4xLCAwPiDQuCDQvdC10Y/RgdC90L4g0LrQsNC60YPRjiDQstGL0LHQuNGA0LDRgtGMLgp0ZW1wbGF0ZTw+CnN0cnVjdCBOdW1Xcml0ZXIyPDAsIDA+IHsKICAgIHN0YXRpYyB2b2lkIHdyaXRlKCkgewogICAgICAgIHN0ZDo6Y291dCA8PCAi0J/QtdGA0LXQtNCw0L3RiyDQtNCy0LAg0L3QvtC70LjQutCwIiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgoKCmludCBtYWluKCkgewogICAgTnVtV3JpdGVyMTwxMD46OndyaXRlKCk7CiAgICBOdW1Xcml0ZXIxPDA+Ojp3cml0ZSgpOwoKICAgIE51bVdyaXRlcjI8MCwgMT46OndyaXRlKCk7CiAgICBOdW1Xcml0ZXIyPDAsIDIzND46OndyaXRlKCk7CiAgICBOdW1Xcml0ZXIyPDIsIDU2Pjo6d3JpdGUoKTsKICAgIE51bVdyaXRlcjI8MiwgMD46OndyaXRlKCk7CiAgICBOdW1Xcml0ZXIyPDAsIDA+Ojp3cml0ZSgpOwogICAgcmV0dXJuIDA7Cn0K