#include <iostream>
#include <vector>
#include <algorithm>
#include <deque>
#include <iterator>
typedef char uint8;
typedef short uint16;
using namespace std;
class Test {
public:
template<typename Iterator>
typename std::enable_if<
std::is_same<typename std::iterator_traits<Iterator>::value_type,
uint8>::value,
void>::type
insert(const uint8 position, const Iterator begin, const Iterator end) {
std::copy(begin, end, std::inserter(m_deque, m_deque.begin()));
}
private:
std::deque<uint8> m_deque;
};
int main() {
Test t;
uint8 dataone[] = {0x00, 0xff};
uint16 datatwo[] = {0xff, 0x00};
std::vector<uint8> vecdataone = {0x00, 0xff};
std::vector<uint16> vecdatatwo = {0xff, 0x00};
t.insert(0, dataone, dataone + 2); // OKAY
// t.insert(0, datatwo, datatwo + 2); // SHOULD CAUSE AN ERROR
t.insert(0, vecdataone.cbegin(), vecdataone.cend()); // OKAY
// t.insert(0, vecdatatwo.cbegin(), vecdatatwo.cend()); // SHOULD CAUSE AN ERROR
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8ZGVxdWU+CiNpbmNsdWRlIDxpdGVyYXRvcj4KCnR5cGVkZWYgY2hhciB1aW50ODsKdHlwZWRlZiBzaG9ydCB1aW50MTY7Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgVGVzdCB7CgpwdWJsaWM6CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4KICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAogICAgICAgICAgICAgICAgIHN0ZDo6aXNfc2FtZTx0eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxJdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4Pjo6dmFsdWUsCiAgICAgICAgICAgICAgICAgdm9pZD46OnR5cGUgCiAgICBpbnNlcnQoY29uc3QgdWludDggcG9zaXRpb24sIGNvbnN0IEl0ZXJhdG9yIGJlZ2luLCBjb25zdCBJdGVyYXRvciBlbmQpIHsKICAgICAgICBzdGQ6OmNvcHkoYmVnaW4sIGVuZCwgc3RkOjppbnNlcnRlcihtX2RlcXVlLCBtX2RlcXVlLmJlZ2luKCkpKTsKICAgIH0KCnByaXZhdGU6CiAgICBzdGQ6OmRlcXVlPHVpbnQ4PiBtX2RlcXVlOwp9OwoKCmludCBtYWluKCkgewogICAgVGVzdCB0OwoKICAgIHVpbnQ4IGRhdGFvbmVbXSA9IHsweDAwLCAweGZmfTsKICAgIHVpbnQxNiBkYXRhdHdvW10gPSB7MHhmZiwgMHgwMH07CiAgICBzdGQ6OnZlY3Rvcjx1aW50OD4gdmVjZGF0YW9uZSA9IHsweDAwLCAweGZmfTsKICAgIHN0ZDo6dmVjdG9yPHVpbnQxNj4gdmVjZGF0YXR3byA9IHsweGZmLCAweDAwfTsKCiAgICB0Lmluc2VydCgwLCBkYXRhb25lLCBkYXRhb25lICsgMik7IC8vIE9LQVkKICAgIC8vIHQuaW5zZXJ0KDAsIGRhdGF0d28sIGRhdGF0d28gKyAyKTsgLy8gU0hPVUxEIENBVVNFIEFOIEVSUk9SCiAgICB0Lmluc2VydCgwLCB2ZWNkYXRhb25lLmNiZWdpbigpLCB2ZWNkYXRhb25lLmNlbmQoKSk7IC8vIE9LQVkKICAgIC8vIHQuaW5zZXJ0KDAsIHZlY2RhdGF0d28uY2JlZ2luKCksIHZlY2RhdGF0d28uY2VuZCgpKTsgLy8gU0hPVUxEIENBVVNFIEFOIEVSUk9SCn0=