playground/cpp/tmp/nat.cpp

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
*/