#include <iostream>
#include <vector>
#include <list>
template<typename Iterator>
struct f {
void operator()(Iterator beg, Iterator end)
{
for(auto it = beg; it != end; it = std::next(it))
{
std::cout << *it << " iterator!" << std::endl;
}
}
};
template<typename T>
struct f<typename std::vector<T>::iterator> {
using Iterator = std::vector<T>::iterator;
void operator()(Iterator beg, Iterator end)
{
for(auto it = beg; it != end; it = std::next(it))
{
std::cout << *it << " vector!" << std::endl;
}
}
};
int main()
{
std::list<int> x = {1,2,3};
std::cout << "List" << std::endl;
f(x.begin(), x.end());
std::cout << "Vector" << std::endl;
std::vector<int> v = {1,2,3};
f(v.begin(), v.end());
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bGlzdD4KCnRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgpzdHJ1Y3QgZiB7Cgl2b2lkIG9wZXJhdG9yKCkoSXRlcmF0b3IgYmVnLCBJdGVyYXRvciBlbmQpCgl7CgkgICAgZm9yKGF1dG8gaXQgPSBiZWc7IGl0ICE9IGVuZDsgaXQgPSBzdGQ6Om5leHQoaXQpKQoJICAgIHsKCSAgICAgICAgc3RkOjpjb3V0IDw8ICppdCA8PCAiIGl0ZXJhdG9yISIgPDwgc3RkOjplbmRsOwoJICAgIH0KCX0KfTsKCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CnN0cnVjdCBmPHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFQ+OjppdGVyYXRvcj4gewoJdXNpbmcgSXRlcmF0b3IgPSBzdGQ6OnZlY3RvcjxUPjo6aXRlcmF0b3I7CgkKCXZvaWQgb3BlcmF0b3IoKShJdGVyYXRvciBiZWcsIEl0ZXJhdG9yIGVuZCkKCXsKCSAgICBmb3IoYXV0byBpdCA9IGJlZzsgaXQgIT0gZW5kOyBpdCA9IHN0ZDo6bmV4dChpdCkpCgkgICAgewoJICAgICAgICBzdGQ6OmNvdXQgPDwgKml0IDw8ICIgdmVjdG9yISIgPDwgc3RkOjplbmRsOwoJICAgIH0KCX0KfTsKCmludCBtYWluKCkKewogICAgc3RkOjpsaXN0PGludD4geCA9IHsxLDIsM307CiAgICBzdGQ6OmNvdXQgPDwgIkxpc3QiIDw8IHN0ZDo6ZW5kbDsKICAgIGYoeC5iZWdpbigpLCB4LmVuZCgpKTsKCiAgICBzdGQ6OmNvdXQgPDwgIlZlY3RvciIgPDwgc3RkOjplbmRsOwogICAgc3RkOjp2ZWN0b3I8aW50PiB2ID0gezEsMiwzfTsKICAgIGYodi5iZWdpbigpLCB2LmVuZCgpKTsKfQ==
prog.cpp:17:8: error: template parameters not deducible in partial specialization:
struct f<typename std::vector<T>::iterator> {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
prog.cpp:17:8: note: ‘T’
prog.cpp: In function ‘int main()’:
prog.cpp:33:6: error: missing template arguments before ‘(’ token
f(x.begin(), x.end());
^
prog.cpp:37:6: error: missing template arguments before ‘(’ token
f(v.begin(), v.end());
^