#include <iostream>
using namespace std;
class Dummy{};
template<class T>class B{};
template<class T>class C{};
template<template<class T> class BC>class D{
//f() is instantiated only if "BC" == "B"
public: template<class BCLocal=BC<Dummy>> static
typename std::enable_if<std::is_same<BCLocal,B<Dummy>>::value,void>::type f(){
}
//^ #1
};
int main() {
D<B>::f();
//D<C>::f(); //compile error as expected, which is good
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjbGFzcyBEdW1teXt9Owp0ZW1wbGF0ZTxjbGFzcyBUPmNsYXNzIEJ7fTsKdGVtcGxhdGU8Y2xhc3MgVD5jbGFzcyBDe307CnRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzIFQ+IGNsYXNzIEJDPmNsYXNzIER7CiAgICAvL2YoKSBpcyBpbnN0YW50aWF0ZWQgb25seSBpZiAiQkMiID09ICJCIgogICAgcHVibGljOiB0ZW1wbGF0ZTxjbGFzcyBCQ0xvY2FsPUJDPER1bW15Pj4gc3RhdGljCiAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8QkNMb2NhbCxCPER1bW15Pj46OnZhbHVlLHZvaWQ+Ojp0eXBlIGYoKXsgIAogICAgfQogICAgLy9eICMxCn07CmludCBtYWluKCkgewogICAgRDxCPjo6ZigpOwogICAgLy9EPEM+OjpmKCk7ICAgLy9jb21waWxlIGVycm9yIGFzIGV4cGVjdGVkLCB3aGljaCBpcyBnb29kCiAgICByZXR1cm4gMDsKfSA=