Как вывести из строя неконтейнерные параметры

У меня есть функция шаблона, которую я хочу включить только для стандартных контейнеров (или контейнеров, совместимых со стандартными контейнерами, которые по крайней мере обеспечиваютbegin() функция-член). Я СФИНАИРУЮ неконтейнеры следующим образом:

template<typename Container>
typename Container::value_type 
f(const Container& c,
    typename std::enable_if<
        std::is_same<
            decltype(*c.begin()),
            typename Container::value_type
        >::value
    >::type* = nullptr)
{
    // implementation here
}

std::is_same а такжеdecltype не выглядит слишком элегантно Есть ли лучший способ сделать это?

PS: мне нужен SFINAE, потому что у меня другая перегрузка

template<typename Derived>
f(const Eigen::MatrixBase<Derived>& A)

и всякий раз, когда я пытаюсьf(some_Eigen_matrix),Container перегрузка заканчивается, затем компилятор выдает ошибку, потому что тип отсутствуетbegin().

Ответы на вопрос(0)

Ваш ответ на вопрос