шаблоны — тип имени выражения в переполнении стека

Выражение typename здесь не работает.
Компилятор говорит:

msgstr «ожидается полное имя после ‘typename'».

template <typename Iterator, typename Predicate>
void mergeSort(Iterator start, Iterator end, Predicate lessThan)
{   typename typeid(start[0]) Element;
[...implementation, not relevant...]
}

Я пытаюсь определить тип имени элемента, который будет ссылаться на тип выражения start[0], (Или вообще тип элемента Iterator.). Я использую C ++ 17. Есть идеи?

1

Решение

Правильный способ сделать это было:

template <typename Iterator, typename Predicate>
void mergeSort(Iterator start, Iterator end, Predicate lessThan)
{   typedef typename std::iterator_traits<Iterator>::value_type Element;
}

Используя следующее:

typedef decltype(start[0]) Element;

скомпилирован как выражение, но вызвал некоторые другие ошибки компиляции, возможно, потому что тип элемента был некоторой ссылкой, которой он не должен был быть, или что-то в этом роде.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector