| 417 | // Detect if type has insert(const_iterator, value) |
| 418 | template<typename T> |
| 419 | class has_insert_position { |
| 420 | template<typename C> static auto test(int) -> decltype( |
| 421 | fl::declval<C>().insert(fl::declval<C>().begin(), fl::declval<fl::shared_ptr<int>>()), |
| 422 | fl::true_type() |
| 423 | ); |
| 424 | template<typename> static fl::false_type test(...); |
| 425 | public: |
| 426 | static constexpr bool value = fl::is_same<decltype(test<T>(0)), fl::true_type>::value; |
| 427 | }; |
| 428 | |
| 429 | // Detect if type has erase(const_iterator) |
| 430 | template<typename T> |