33 lines
421 B
C++
33 lines
421 B
C++
#include<iostream>
|
|
|
|
struct Zero {
|
|
enum { val = 0 };
|
|
};
|
|
|
|
template<typename N>
|
|
struct Succ {
|
|
enum { val = 1 + N::val};
|
|
};
|
|
|
|
int main() {
|
|
// O = 0
|
|
std::cout << Zero::val << std::endl;
|
|
|
|
// S O = 1
|
|
std::cout << Succ<Zero>::val << std::endl;
|
|
|
|
// S (S O) = 2
|
|
std::cout << Succ<Succ<Zero>>::val << std::endl;
|
|
|
|
// S (S (S O) = 3
|
|
std::cout << Succ<Succ<Succ<Zero>>>::val << std::endl;
|
|
}
|
|
|
|
// Output
|
|
/*
|
|
0
|
|
1
|
|
2
|
|
3
|
|
*/
|