#ifndef OSRM_STATIC_ASSERT_HPP
#define OSRM_STATIC_ASSERT_HPP

#include <type_traits>

namespace osrm
{
namespace util
{

template <typename It, typename Value> inline void static_assert_iter_value()
{
    using IterValueType = typename std::iterator_traits<It>::value_type;
    static_assert(std::is_same<IterValueType, Value>::value, "");
}

template <typename It, typename Category> inline void static_assert_iter_category()
{
    using IterCategoryType = typename std::iterator_traits<It>::iterator_category;
    static_assert(std::is_base_of<Category, IterCategoryType>::value, "");
}

} // ns util
} // ns osrm

#endif // OSRM_STATIC_ASSERT_HPP