// VC++2016
template <typename Range>
void test(const Range& r)
{
auto begin = std::begin(r);
auto end = std::end(r);
}
int main(void)
{
{
std::string str = "abc";
test(str); // OK
}
{
char str[] = "abc";
test(str); // OK
}
{
char* str = "abc";
test(str); // コンパイルエラー
}
{
char* str = "abc";
test(std::char_ptr_to_range(str)); // こういう関数は STL や BOOST に無いのか
}
{
char* str = "abc";
test(std::string(str)); // ただし、配列コピーを伴う方法は避けたい
}
return 0;
}