#include <iostream>
#include <array>
#include <vector>
#include <string>//<string_view> doesn't work in this compiler!
#include <initializer_list>
#include <type_traits>
#include <iterator>
#include <cstdlib>
#include <ctime>
template <typename Iter>
void func(Iter begin, Iter end, std::random_access_iterator_tag)
{
size_t size = end - begin;
for(int i = 0; i < 10; ++i)
{
std::cout << *(begin + (std::rand() % size));
}
}
template <typename Iter>
void func(Iter begin, Iter end)
{
func(begin, end,
typename std::iterator_traits<Iter>::iterator_category());
}
template <typename Container>
void func(const Container &c)
{
func(std::begin(c), std::end(c));
}
template <typename T>
void func(const std::initializer_list<T> &l)
{
func(l.begin(), l.end());
}
int main()
{
std::srand(std::time(nullptr));
std::array<std::string/*_view*/, 2> a{"1","2"};
func(a);
std::cout << std::endl;
std::vector<std::string/*_view*/> v{"1","2"};
func(v);
std::cout << std::endl;
//using std::literals::string_view_literals;
func({"1"/*sv*/, "2"/*sv*/});
std::cout << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxzdHJpbmc+Ly88c3RyaW5nX3ZpZXc+IGRvZXNuJ3Qgd29yayBpbiB0aGlzIGNvbXBpbGVyIQojaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgojaW5jbHVkZSA8aXRlcmF0b3I+CiNpbmNsdWRlIDxjc3RkbGliPgojaW5jbHVkZSA8Y3RpbWU+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgSXRlcj4Kdm9pZCBmdW5jKEl0ZXIgYmVnaW4sIEl0ZXIgZW5kLCBzdGQ6OnJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CglzaXplX3Qgc2l6ZSA9IGVuZCAtIGJlZ2luOwogICAgZm9yKGludCBpID0gMDsgaSA8IDEwOyArK2kpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICooYmVnaW4gKyAoc3RkOjpyYW5kKCkgJSBzaXplKSk7CiAgICB9Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBJdGVyPgp2b2lkIGZ1bmMoSXRlciBiZWdpbiwgSXRlciBlbmQpCnsKICAgIGZ1bmMoYmVnaW4sIGVuZCwKICAgICAgdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGFpbmVyPgp2b2lkIGZ1bmMoY29uc3QgQ29udGFpbmVyICZjKQp7CiAgICBmdW5jKHN0ZDo6YmVnaW4oYyksIHN0ZDo6ZW5kKGMpKTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnZvaWQgZnVuYyhjb25zdCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4gJmwpCnsKICAgIGZ1bmMobC5iZWdpbigpLCBsLmVuZCgpKTsKfQoKaW50IG1haW4oKQp7CglzdGQ6OnNyYW5kKHN0ZDo6dGltZShudWxscHRyKSk7CgoJc3RkOjphcnJheTxzdGQ6OnN0cmluZy8qX3ZpZXcqLywgMj4gYXsiMSIsIjIifTsKCWZ1bmMoYSk7CgoJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCQoJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmcvKl92aWV3Ki8+IHZ7IjEiLCIyIn07CglmdW5jKHYpOwoKCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CgoJLy91c2luZyBzdGQ6OmxpdGVyYWxzOjpzdHJpbmdfdmlld19saXRlcmFsczsKCWZ1bmMoeyIxIi8qc3YqLywgIjIiLypzdiovfSk7CgoJc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbDsKCglyZXR1cm4gMDsKfQ==