| 429 | // Detect if type has erase(const_iterator) |
| 430 | template<typename T> |
| 431 | class has_erase { |
| 432 | template<typename C> static auto test(int) -> decltype( |
| 433 | fl::declval<C>().erase(fl::declval<C>().begin()), |
| 434 | fl::true_type() |
| 435 | ); |
| 436 | template<typename> static fl::false_type test(...); |
| 437 | public: |
| 438 | static constexpr bool value = fl::is_same<decltype(test<T>(0)), fl::true_type>::value; |
| 439 | }; |
| 440 | |
| 441 | // Detect if type has resize() |
| 442 | template<typename T> |