 			util::Access<ParamList, LOG_SCHEDULE_GRANULARITY>::VALUE> >	// LOG_SCHEDULE_GRANULARITY
 	struct KernelPolicy : BaseKernelPolicy
 	{
+		typedef typename ProblemType::T T;
+		typedef typename ProblemType::SizeT SizeT;
+		typedef typename ProblemType::ReductionOp ReductionOp;
+		typedef typename ProblemType::IdentityOp IdentityOp;
+
+		typedef void (*KernelPtr)(T*, T*, SizeT, ReductionOp, IdentityOp);
+
 		// Check if this configuration is worth compiling
 		enum {
 			REG_MULTIPLIER = (sizeof(T) + 4 - 1) / 4,

				(EST_REGS_OCCUPANCY > 0) &&
				(INVALID_SPECIAL == 0)),
		};

		typedef typename ProblemType::T T;
		typedef typename ProblemType::SizeT SizeT;
		typedef typename ProblemType::ReductionOp ReductionOp;
		typedef typename ProblemType::IdentityOp IdentityOp;

		typedef void (*KernelPtr)(T*, T*, SizeT, ReductionOp, IdentityOp);

		static std::string TypeString()
		{

			util::Access<ParamList, LOG_SCHEDULE_GRANULARITY>::VALUE> >	// LOG_SCHEDULE_GRANULARITY
	struct KernelPolicy : BaseKernelPolicy
	{
		typedef typename ProblemType::T T;
		typedef typename ProblemType::SizeT SizeT;
		typedef typename ProblemType::ReductionOp ReductionOp;
		typedef typename ProblemType::IdentityOp IdentityOp;

		typedef void (*KernelPtr)(T*, T*, T*, ReductionOp, IdentityOp, util::CtaWorkDistribution<SizeT>);

		// Check if this configuration is worth compiling
		enum {
			REG_MULTIPLIER = (sizeof(T) + 4 - 1) / 4,
