В настоящее время я делаю пользовательский контейнер Vector для изучения. У моего назначения есть ограничение, что я должен использовать версию c ++ 98.
Но во время реализации функции "вставки" у меня есть проблема, которую я объяснил в этой ссылке .
Я получил несколько подсказок, что я должен использовать «enable_if» по ссылке. Но так как я не имею права использовать расширение C ++ 11 (определено enable_if), поэтому я сам включил if и is_integral.
Это предыдущее.
// 1
template <typename T, typename Alloc>
void vector<T, Alloc>::insert(iterator position, size_type n, const value_type &val)
// 2
template <typename T, typename Alloc>
template <class InputIterator>
void vector<T, Alloc>::insert(iterator position, InputIterator first, InputIterator last)
Это код, который я изменил с помощью пользовательских enable_if и is_integral
// 1
template <typename T, typename Alloc>
void vector<T, Alloc>::insert(iterator position, size_type n, const value_type &val)
// 2
template <typename T, typename Alloc>
template <class InputIterator, class = typename ft::enable_if<!ft::is_integral<InputIterator>::value>::type>
void vector<T, Alloc>::insert(iterator position, InputIterator first, InputIterator last)
Это хорошо работает, если я не даю компилятору параметр "-std = c ++ 98", но если я даю его, он говорит
./Vector.hpp:87:33: warning: default template arguments for a function template are a C++11 extension [-Wc++11-extensions]
...class = typename ft::enable_if<!ft::is_integral<InputIterator>::value>::type>
^
Не могли бы вы помочь мне адаптировать мой код для расширения c ++ 98?