#include <iostream>
struct CPUDevice;
struct GPUDevice;
template <typename Device, typename T>
class AddBOp {
public:
void Compute() {
std::cout << "Within AddBOp<Device, T>\n";
}
};
template <typename T>
class AddBOp<GPUDevice, T> {
public:
void Compute() {
std::cout << "Within AddBOp<GPUDevice, T>\n";
}
};
int main() {
{
AddBOp<CPUDevice, double> op;
op.Compute();
}
{
AddBOp<GPUDevice, double> op;
op.Compute();
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IENQVURldmljZTsKc3RydWN0IEdQVURldmljZTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBEZXZpY2UsIHR5cGVuYW1lIFQ+CmNsYXNzIEFkZEJPcCB7CnB1YmxpYzoKCXZvaWQgQ29tcHV0ZSgpIHsKCQlzdGQ6OmNvdXQgPDwgIldpdGhpbiBBZGRCT3A8RGV2aWNlLCBUPlxuIjsKCX0KfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpjbGFzcyBBZGRCT3A8R1BVRGV2aWNlLCBUPiB7CnB1YmxpYzoKCXZvaWQgQ29tcHV0ZSgpIHsKCQlzdGQ6OmNvdXQgPDwgIldpdGhpbiBBZGRCT3A8R1BVRGV2aWNlLCBUPlxuIjsKCX0KfTsKCmludCBtYWluKCkgewoJewoJCUFkZEJPcDxDUFVEZXZpY2UsIGRvdWJsZT4gb3A7CgkJb3AuQ29tcHV0ZSgpOwoJfQoJewoJCUFkZEJPcDxHUFVEZXZpY2UsIGRvdWJsZT4gb3A7CgkJb3AuQ29tcHV0ZSgpOwoJfQoJcmV0dXJuIDA7Cn0=