制御構文・論理演算を一切使わずに FizzBuzz

C++ なら剰余演算どころか if も for も一切使わずに FizzBuzz が書けるとかそういうネタ。てか、まだ FizzBuzz ネタを引っ張るか。
ちなみに、プログラム中には剰余演算があるが、C++ の仕様上、これはコンパイルタイムに計算されるはずなので、実行時には剰余演算は発生しない。念のため。

#include <iostream>

template<bool mod3, bool mod5, int val>
struct output
{
    inline void operator()() { std::cout << val << std::endl; }
};

template<int val>
struct output<true, false, val>
{
    inline void operator()() { std::cout << "Fizz" << std::endl; }
};

template<int val>
struct output<false, true, val>
{
    inline void operator()() { std::cout << "Buzz" << std::endl; }
};

template<int val>
struct output<true, true, val>
{
    inline void operator()() { std::cout << "FizzBuzz" << std::endl; }
};

template<int n>
inline static void fizzbuzz()
{
    fizzbuzz<n - 1>();
    output<n % 3 == 0, n % 5 == 0, n>()();
}

template<>
inline static void fizzbuzz<0>()
{
}

int main()
{
    fizzbuzz<100>();
    return 0;
}