【发布时间】:2016-04-04 14:56:10
【问题描述】:
这样编译正常吗?
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> buf;
generate(buf.begin(), buf.end(), []{ return 0; });
}
(注意generate()前面缺少的std::)
这种行为是否记录在某处?还是我偶然发现了编译器或库错误?在我的情况下,Linux 上的 GCC 5.3.0 和 Clang 3.8.0;都使用 libstdc++,所以可能是库错误?
【问题讨论】:
-
AFAIK - 是的,这是可以接受的,因为在同一命名空间 (
std) 中定义了一个类型std::vector。 -
@soon:未指定迭代器类型是否存在于命名空间
std中。如果迭代器类型只是一个裸指针,那么这是行不通的。特别是,行为可能取决于您是在调试模式还是优化模式下编译。
标签: c++ c++11 gcc namespaces clang