ProjectEuler 3 C++TMP

#include <iostream>

template<long long int p,long long int i=2>
struct p3
{
    //static const bool per = p%i==0;
    static const long long int value = p3<p%i==0?p/i:p,p%i==0?i:i+1>::value;
};

template<long long int p>
struct p3<p,p>
{
    static const long long int value = p;
};

int main()
{
    std::cout << p3<600851475143LL>::value << std::endl;
}