#include <iostream>
#include <typeinfo>
 
template<int N, int D>
struct Modulus
{
        static auto const value = N % D;
};
 
template<int N>
struct Angle
{
        static auto const value = Modulus<N, 360>::value; // ERROR
        //static int const value = Modulus<N, 360>::value;  // OK
        //static auto const value = N % 360;                // OK
 
        typedef Angle<value> type;
};
 
int main()
{
        std::cout << typeid(Angle<30>::type).name() << "\n";
        std::cout << typeid(Angle<390>::type).name() << "\n";
 
        return 0;
}