これは正常にコンパイルできますか?なぜstd :: generateは名前空間修飾子なしでアクセスできますか?
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> buf;
generate(buf.begin(), buf.end(), []{ return 0; });
}
(generate()
の前に行方不明std::
注)
はどこかに文書化され、この動作ですか?あるいは、私はコンパイラやライブラリのバグに遭遇しましたか?私の場合、GCC 5.3.0とLinuxのClang 3.8.0でしょうか。どちらもlibstdC++を使用しているので、おそらくライブラリのバグですか?
[引数依存ルックアップ](https://en.wikipedia.org/wiki/Argument-dependent_name_lookup)多分? – zwol
AFAIK - 同じ名前空間( 'std')内に' std :: vector'型が定義されているので、これは受け入れられます。 – soon
@soon:iterator型が名前空間 'std'に存在するかどうかは不明です。イテレータの型が裸のポインタの場合、それは動作しません。特に、デバッグモードまたは最適化モードでコンパイルするかどうかによって動作が異なる場合があります。 –