#include <type_traits>
template<typename T> struct fake_dependency : public std::false_type { };
template<class Foo> void func(Foo x) {
static_assert(fake_dependency<Foo>::value, "must use specialization");
}
template<> void func<double>(double x) {
// Yay!
}
int main() {
// func<int>(1); // fails.
func<double>(1); // succeeds.
return 0;
}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IGZha2VfZGVwZW5kZW5jeSA6IHB1YmxpYyBzdGQ6OmZhbHNlX3R5cGUgeyB9Owp0ZW1wbGF0ZTxjbGFzcyBGb28+IHZvaWQgZnVuYyhGb28geCkgewogICBzdGF0aWNfYXNzZXJ0KGZha2VfZGVwZW5kZW5jeTxGb28+Ojp2YWx1ZSwgIm11c3QgdXNlIHNwZWNpYWxpemF0aW9uIik7Cn0KCnRlbXBsYXRlPD4gdm9pZCBmdW5jPGRvdWJsZT4oZG91YmxlIHgpIHsKICAgLy8gWWF5IQp9CgppbnQgbWFpbigpIHsKCS8vIGZ1bmM8aW50PigxKTsgLy8gZmFpbHMuCglmdW5jPGRvdWJsZT4oMSk7IC8vIHN1Y2NlZWRzLgoJcmV0dXJuIDA7Cn0K