| 123456789101112131415161718192021222324252627282930313233343536373839 |
- // RUN: %clang_cc1 -fsyntax-only -verify %s
- // expected-no-diagnostics
- // template<unsigned M, unsigned N>
- // struct Ackermann {
- // enum {
- // value = M ? (N ? Ackermann<M-1, Ackermann<M, N-1> >::value
- // : Ackermann<M-1, 1>::value)
- // : N + 1
- // };
- // };
- template<unsigned M, unsigned N>
- struct Ackermann {
- enum {
- value = Ackermann<M-1, Ackermann<M, N-1>::value >::value
- };
- };
- template<unsigned M> struct Ackermann<M, 0> {
- enum {
- value = Ackermann<M-1, 1>::value
- };
- };
- template<unsigned N> struct Ackermann<0, N> {
- enum {
- value = N + 1
- };
- };
- template<> struct Ackermann<0, 0> {
- enum {
- value = 1
- };
- };
- int g0[Ackermann<3, 4>::value == 125 ? 1 : -1];
|