// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s // expected-no-diagnostics template class, typename> class T, template class V> struct PartialApply { template using R = T; }; template using Id = T; template class, typename X> using Zero = X; template class, typename> class N, template class F, typename X> using Succ = F>; template class F, typename X> using One = Succ; template class F, typename X> using Two = Succ; template class, typename> class A, template class, typename> class B, template class F, typename X> using Add = A>; template class, typename> class A, template class, typename> class B, template class F, typename X> using Mul = A::template R, X>; template class F, typename X> using Four = Add; template class F, typename X> using Sixteen = Mul; template class F, typename X> using TwoHundredAndFiftySix = Mul; template struct Const { static const T value = N; }; template struct IncrementHelper; template struct IncrementHelper> { using Result = Const; }; template using Increment = typename IncrementHelper::Result; using Arr = int[TwoHundredAndFiftySix>::value]; using Arr = int[256];