<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Aug 23, 2010, at 4:00 AM, Romain Pechayre wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; color: rgb(136, 136, 136); "><div><font class="Apple-style-span">Hello, please consider the following simple c++ code:</font></div>

<div><font class="Apple-style-span">% cat Main.cc</font></div><div><font class="Apple-style-span">//first alias </font></div><div><font class="Apple-style-span">namespace original_namespace {}  // decl 1</font></div>

<div><font class="Apple-style-span">namespace client_namespace {</font></div><div><font class="Apple-style-span">  namespace alias_ns = original_namespace;</font></div><div><font class="Apple-style-span">}</font></div>

<div><font class="Apple-style-span"><br></font></div><div><font class="Apple-style-span">//second alias</font></div><div><font class="Apple-style-span">namespace original_namespace {} //decl 2</font></div>

<div><div><font class="Apple-style-span">namespace client_namespace {</font></div><div><font class="Apple-style-span">  namespace alias_ns = original_namespace;</font></div><div><font class="Apple-style-span">}</font></div>

</div><div><font class="Apple-style-span"><br></font></div><div><font class="Apple-style-span">This does not build with clang++ and does build with g++</font></div><div><font class="Apple-style-span">. I get the following diagnosis:</font></div>

<div><font class="Apple-style-span">Main.cc:16:11: error: redefinition of 'alias_ns' as different kind of symbol</font></div><div><font class="Apple-style-span"><br></font></div><div>

<font class="Apple-style-span">namespace alias_ns = original_namespace;</font></div><div><font class="Apple-style-span">                  ^</font></div><div><font class="Apple-style-span">Main.cc:16:1: note: previous definition was here:</font></div>

<div><font class="Apple-style-span">namespace alias_ns = original_namespace;</font></div><div><font class="Apple-style-span">^</font></div><div><font class="Apple-style-span"><br>

</font></div><div><font class="Apple-style-span">Of course this is a silly example, but I came across this when some similar code was included again and again from different source files. I have put this into a simple single file to see if I was still getting the problem, and yes.</font></div>

<div><font class="Apple-style-span"><br></font></div><div><font class="Apple-style-span">Even more surprising is when you comment  decl2 of namespace original_namespace, no error ! I cannot understand why. Then I thought that maybe clang was mispointing the error that was in the second declaration of original_namespace. It is not the case, as only commenting the second alias instruction and keeping decl1 works.</font></div>

<div><font class="Apple-style-span"><br></font></div><div><font class="Apple-style-span">I am using clang and llvm 2.7 (not svn)</font></div></span></blockquote><br></div><div>That was a bug in Clang 2.7, which has already been fixed on mainline. In general, you should not use Clang 2.7 for C++ code. Top-of-tree in Subversion is far, far better at handling C++.</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">      </span>- Doug</div><br></body></html>