template <int n>
constexpr int infinite_loop_error(){
   return (n)  ? infinite_loop_error<n - 1>() : 0;
}

template <>
constexpr int infinite_loop_error<0>(){
	return 0;
}

template <int n> 
constexpr int infinite_loop_error_2(){
   if (n) return infinite_loop_error_2<n - 1>(); 
   else   return 0;
}

template <> 
constexpr int infinite_loop_error_2<0>(){
   return 0;
}

int main() {
  infinite_loop_error<3>();
  infinite_loop_error_2<3>();
}