#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;
}