Выражение 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. Есть идеи?
Правильный способ сделать это было:
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;
скомпилирован как выражение, но вызвал некоторые другие ошибки компиляции, возможно, потому что тип элемента был некоторой ссылкой, которой он не должен был быть, или что-то в этом роде.
Других решений пока нет …