遇到一个compile error
https://stackoverflow.com/questions/17264067/chosen-constructor-is-explicit-in
-copy-initialization-error-with-clang-4-2/17264506
加上了-D_GLIBCXX_DEBUG 不知道为什么遇到类似以上这个error 用clang才会遇到
我写 const vector<int> v = {};
然而发现
加上这flag后
我写std::vector 他其实是用到 std::__debug::vector
但仔细想想 .... 他怎么做到的?
以下是我以为做得到的写法
namespace AA
{
int a = 1;
}
namespace AA
{
namespace BB
{
int a = 2;
}
}
namespace AA = AA::BB;
int main() {
std::cout<<AA::a<<std::endl; //希望能印2
return 0;
}
看起来无法成功
有几个问题
1. 他是怎么做到std:: 让他变成走std::__debug?
2. g++跟clang都走进去debug 版本的 vector constructor, 他有冠上explicit, 感觉上
g++也要出问题呀? 其实不太清楚clang跟gcc的关联, 他们都走同一份实作那为什么会有
不一样的compile行为?
我可以解读说 clang , gcc都是compiler, 但clang底下的stl source code是拿gcc的来
用?
// 23.2.4.1 construct/copy/destroy:
explicit
vector(const _Allocator& __a = _Allocator())
: _Base(__a), _M_guaranteed_capacity(0) { }
3. 一般使用g++ -g 时 我自己的exe 包含了debug symbol, 但不意味着我link的glibc
是debug版? 所以如果我要真正的build一个debug版本的, 就必须要把-D_GLIBCXX_DEBUG
加上去?
还是根本无关....
4. 到底这error 想表达的是什么 (clang only)
error: chosen constructor is explicit in copy-initialization
const std::vector<int> v={};
改成 const std::vector<int> v{}; 就没事了
谢谢