1 #pragma once 2 3 #include <stdexcept> 4 5 namespace utils 6 { 7 8 template <class T, T first, T last> 9 inline T toEnum(int x) 10 { 11 if (x < static_cast<decltype(x)>(first) || 12 x > static_cast<decltype(x)>(last)) 13 { 14 throw std::out_of_range("Value is not in range of enum"); 15 } 16 return static_cast<T>(x); 17 } 18 } // namespace utils 19