fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <deque>
  5. #include <iterator>
  6.  
  7. typedef char uint8;
  8. typedef short uint16;
  9.  
  10. using namespace std;
  11.  
  12. class Test {
  13.  
  14. public:
  15. template<typename Iterator>
  16. typename std::enable_if<
  17. std::is_same<typename std::iterator_traits<Iterator>::value_type,
  18. uint8>::value,
  19. void>::type
  20. insert(const uint8 position, const Iterator begin, const Iterator end) {
  21. std::copy(begin, end, std::inserter(m_deque, m_deque.begin()));
  22. }
  23.  
  24. private:
  25. std::deque<uint8> m_deque;
  26. };
  27.  
  28.  
  29. int main() {
  30. Test t;
  31.  
  32. uint8 dataone[] = {0x00, 0xff};
  33. uint16 datatwo[] = {0xff, 0x00};
  34. std::vector<uint8> vecdataone = {0x00, 0xff};
  35. std::vector<uint16> vecdatatwo = {0xff, 0x00};
  36.  
  37. t.insert(0, dataone, dataone + 2); // OKAY
  38. // t.insert(0, datatwo, datatwo + 2); // SHOULD CAUSE AN ERROR
  39. t.insert(0, vecdataone.cbegin(), vecdataone.cend()); // OKAY
  40. // t.insert(0, vecdatatwo.cbegin(), vecdatatwo.cend()); // SHOULD CAUSE AN ERROR
  41. }
Success #stdin #stdout 0s 3428KB
stdin
Standard input is empty
stdout
Standard output is empty