#include <iostream>
struct index_method {/*whatever*/};
template <class A, class B>
class ExampleClass
{
public:
ExampleClass(void) {}
template <class C>
ExampleClass( const ExampleClass<A,C>& src_, const B& b_ = B() ) : _b(b_) { }
private:
B _b;
};
template <>
template <>
ExampleClass<double,index_method>::ExampleClass( const ExampleClass<double,index_method>& src_, const index_method& b_ )
: _b(b_)
{
std::cout << "specialized" << std::endl;
}
template<>
template<>
ExampleClass<double, double>::ExampleClass( const ExampleClass<double, double>& src_, const double& b_)
{
std::cout << "specialized for double" << std::endl;
}
int main()
{
ExampleClass<double, index_method> ex((ExampleClass<double, index_method>()), index_method());
ExampleClass<double, double> ex2((ExampleClass<double, double>()), double());
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IGluZGV4X21ldGhvZCB7Lyp3aGF0ZXZlciovfTsKCnRlbXBsYXRlIDxjbGFzcyBBLCBjbGFzcyBCPgpjbGFzcyBFeGFtcGxlQ2xhc3MKewpwdWJsaWM6CiAgIEV4YW1wbGVDbGFzcyh2b2lkKSB7fQogICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KICAgRXhhbXBsZUNsYXNzKCBjb25zdCBFeGFtcGxlQ2xhc3M8QSxDPiYgc3JjXywgY29uc3QgQiYgYl8gPSBCKCkgKSA6IF9iKGJfKSB7IH0KcHJpdmF0ZToKICAgQiBfYjsKfTsKCnRlbXBsYXRlIDw+CnRlbXBsYXRlIDw+CkV4YW1wbGVDbGFzczxkb3VibGUsaW5kZXhfbWV0aG9kPjo6RXhhbXBsZUNsYXNzKCBjb25zdCBFeGFtcGxlQ2xhc3M8ZG91YmxlLGluZGV4X21ldGhvZD4mIHNyY18sIGNvbnN0IGluZGV4X21ldGhvZCYgYl8gKQogIDogX2IoYl8pCnsKICAgc3RkOjpjb3V0IDw8ICJzcGVjaWFsaXplZCIgPDwgc3RkOjplbmRsOwp9Cgp0ZW1wbGF0ZTw+CnRlbXBsYXRlPD4KRXhhbXBsZUNsYXNzPGRvdWJsZSwgZG91YmxlPjo6RXhhbXBsZUNsYXNzKCBjb25zdCBFeGFtcGxlQ2xhc3M8ZG91YmxlLCBkb3VibGU+JiBzcmNfLCBjb25zdCBkb3VibGUmIGJfKQp7CiAgIHN0ZDo6Y291dCA8PCAic3BlY2lhbGl6ZWQgZm9yIGRvdWJsZSIgPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbigpCnsKICAgRXhhbXBsZUNsYXNzPGRvdWJsZSwgaW5kZXhfbWV0aG9kPiBleCgoRXhhbXBsZUNsYXNzPGRvdWJsZSwgaW5kZXhfbWV0aG9kPigpKSwgaW5kZXhfbWV0aG9kKCkpOwogICBFeGFtcGxlQ2xhc3M8ZG91YmxlLCBkb3VibGU+IGV4MigoRXhhbXBsZUNsYXNzPGRvdWJsZSwgZG91YmxlPigpKSwgZG91YmxlKCkpOwp9Cg==