 	template <int CUDA_ARCH, typename Detail>
 	static cudaError_t Enact(Detail &detail)
 	{
-		typedef typename Detail::ProblemType ProblemType;
-
 		// Obtain large tuned granularity type
-		typedef AutotunedPolicy<ProblemType, CUDA_ARCH, LARGE_SIZE> LargePolicy;
+		typedef AutotunedPolicy<
+			typename Detail::ProblemType,
+			CUDA_ARCH,
+			LARGE_SIZE> LargePolicy;
 
 		// Identity the maximum problem size for which we can saturate loads
 		int saturating_load = LargePolicy::Upsweep::TILE_ELEMENTS *

	struct Iterate <LAST_PASS, LAST_PASS, CURRENT_BIT, RADIX_BITS>
	{
		template <typename Detail>
		static cudaError_t Invoke(Enactor *enactor, Detail &detail)
		{
			typedef PassPolicy<LAST_PASS, CURRENT_BIT, NopKeyConversion, typename Detail::KeyTraits> PassPolicy;

			return enactor->template EnactPass<Policy, PassPolicy>(detail);
		}
	};


     */
	template <typename Policy, typename Detail>
    cudaError_t PostSort(Detail &detail, int num_passes);

    /**
	 * Performs a radix sorting operation
	 */
	template <typename Policy, typename Detail>
	cudaError_t EnactSort(Detail &detail);

	/**
	 * Performs a radix sorting pass
	 */
	template <typename Policy, typename PassPolicy, typename Detail>
	cudaError_t EnactPass(Detail &detail);


public:

