blob: 9525bfcc4f43c70bd36de2279057301c1acda860 [file] [log] [blame]
Daniel Dunbara5728872009-12-15 20:14:24 +00001// RUN: %clang_cc1 -fsyntax-only -verify %s
Douglas Gregor199d9912009-06-05 00:53:49 +00002
3// template<unsigned M, unsigned N>
4// struct Ackermann {
5// enum {
Daniel Dunbar70b87422009-07-11 22:44:48 +00006// value = M ? (N ? Ackermann<M-1, Ackermann<M, N-1> >::value
Douglas Gregor199d9912009-06-05 00:53:49 +00007// : Ackermann<M-1, 1>::value)
8// : N + 1
9// };
10// };
11
12template<unsigned M, unsigned N>
13struct Ackermann {
14 enum {
15 value = Ackermann<M-1, Ackermann<M, N-1>::value >::value
16 };
17};
18
19template<unsigned M> struct Ackermann<M, 0> {
20 enum {
21 value = Ackermann<M-1, 1>::value
22 };
23};
24
25template<unsigned N> struct Ackermann<0, N> {
26 enum {
27 value = N + 1
28 };
29};
30
31template<> struct Ackermann<0, 0> {
32 enum {
33 value = 1
34 };
35};
36
Daniel Dunbar70b87422009-07-11 22:44:48 +000037int g0[Ackermann<3, 4>::value == 125 ? 1 : -1];
38