範囲ベースの 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の両方から)。endconst char*
範囲ベースの for ループを C スタイルの文字列で動作させる方法はありますか?
オーバーロードを追加しようとしnamespace stdましたが、これは機能しましたが、私の理解では、オーバーロードを追加することは違法namespace stdです (これは正しいですか?)