ProjectEuler 2 C++TMP

#include <iostream>

template<int a,int b>
struct intlt
{
    static const bool value = a < b;
};

template<bool inrange=true,int a=1,int b=1>
struct fibsum
{
    static const int value = fibsum<intlt<a+b,4000000>::value,b,a+b>::value + (b%2==0?b:0);
};
template<int a,int b>
struct fibsum<false,a,b>
{
    static const int value = 0;
};

int main()
{
    std::cout << fibsum<>::value << std::endl;
    return 0;
}