範囲ベースの for ループは C スタイルの文字列をサポートすると想定していました
void print_C_str(const char* str)
{
for(char c : str)
{
cout << c;
}
}
ただし、これは当てはまりません。標準で[stmt.ranged] (6.5.4)
は、範囲ベースの for は次の 3 つの可能性のいずれかで機能すると述べています。
- 範囲は配列です
begin
範囲は呼び出し可能なend
メソッドを持つクラスです- 関連付けられた名前空間 (および
std
名前空間)に到達可能な ADL があります。
グローバル名前空間に関数を追加するbegin
と、まだエラーが発生します(VS12とGCC 4.7の両方から)。end
const char*
範囲ベースの for ループを C スタイルの文字列で動作させる方法はありますか?
オーバーロードを追加しようとしnamespace std
ましたが、これは機能しましたが、私の理解では、オーバーロードを追加することは違法namespace std
です (これは正しいですか?)