#include <iostream>
template< class U, class X, class T >
class Klasa
{
public:
template< typename Z >
void Method()
{
}
};
template< class U >
class Klasa< U, int, U >
{
public:
template< typename Z >
void Method()
{
typedef typename std::enable_if< !std::is_same< int, Z >::value, Z >::type whatever;
std::cout << "Method< Z >" << std::endl;
}
void Method()
{
std::cout << "Method< int >" << std::endl;
}
};
int main()
{
Klasa< float, int, float > lK;
lK.Method< float >();
lK.Method< double >();
lK.Method();
return( 0 );
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8IGNsYXNzIFUsIGNsYXNzIFgsIGNsYXNzIFQgPgpjbGFzcyBLbGFzYQp7CiAgcHVibGljOgogICAgdGVtcGxhdGU8IHR5cGVuYW1lIFogPgogICAgdm9pZCBNZXRob2QoKQogICAgewogICAgfQp9OwoKdGVtcGxhdGU8IGNsYXNzIFUgPgpjbGFzcyBLbGFzYTwgVSwgaW50LCBVID4KewogIHB1YmxpYzoKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBaID4KICAgIHZvaWQgTWV0aG9kKCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwgIXN0ZDo6aXNfc2FtZTwgaW50LCBaID46OnZhbHVlLCBaID46OnR5cGUgd2hhdGV2ZXI7CgogICAgICBzdGQ6OmNvdXQgPDwgIk1ldGhvZDwgWiA+IiA8PCBzdGQ6OmVuZGw7CiAgICB9CiAgIHZvaWQgTWV0aG9kKCkKICAgIHsKICAgICAgc3RkOjpjb3V0IDw8ICJNZXRob2Q8IGludCA+IiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgppbnQgbWFpbigpCnsKICBLbGFzYTwgZmxvYXQsIGludCwgZmxvYXQgPiBsSzsKCiAgbEsuTWV0aG9kPCBmbG9hdCA+KCk7CiAgbEsuTWV0aG9kPCBkb3VibGUgPigpOwogIGxLLk1ldGhvZCgpOwoKICByZXR1cm4oIDAgKTsKfQ==