[问题] namespace alias还有一些观念请教

楼主: lovejomi (JOMI)   2018-05-31 13:22:28
遇到一个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{}; 就没事了
谢谢
作者: loveflames (咕啾咕啾魔法阵)   2018-05-31 15:09:00
4是因为copy list init不能呼叫explicit1应该是std加了using namespace std::__debug;
楼主: lovejomi (JOMI)   2018-05-31 21:24:00
问题是我明确写std::vector 还是走debug的耶 怎么办得到我看debug版本是继承 一般版本的 但想不透他怎么做到让我怎么样都使用debug version可是4 用gcc没事 是否是gcc有问题呢
作者: AstralBrain   2018-05-31 22:20:00
1. 我猜inline namespacehttps://godbolt.org/g/tPk5UG 大概像这样
楼主: lovejomi (JOMI)   2018-05-31 22:43:00
可是inline namespace是c++11,那以前的要怎么做?

Links booklink

Contact Us: admin [ a t ] ucptt.com