関数を考えてみましょう:
template<typename T>
void printme(T&& t) {
for (auto i : t)
std::cout << i;
}
または、begin()/end() 対応型の 1 つのパラメーターを必要とするその他の関数。
以下はなぜ違法なのですか?
printme({'a', 'b', 'c'});
これらすべてが正当な場合:
printme(std::vector<char>({'a', 'b', 'c'}));
printme(std::string("abc"));
printme(std::array<char, 3> {'a', 'b', 'c'});
これを書くことさえできます:
const auto il = {'a', 'b', 'c'};
printme(il);
また
printme<std::initializer_list<char>>({'a', 'b', 'c'});