In many places there is code that looks like: MBBI = next(MBBI); In C++0X there is a std::next that is likely to be in scope when these calls are made. And due to ADL the above call becomes ambiguous: llvm::next or std::next? I recommend: MBBI = llvm::next(MBBI); -Howard
I am pretty sure the .cpp files always explicitly use "llvm" namespace. Look for: using namespace llvm; Is that sufficient? Evan On Nov 14, 2009, at 3:16 PM, Howard Hinnant wrote:> In many places there is code that looks like: > > MBBI = next(MBBI); > > In C++0X there is a std::next that is likely to be in scope when these > calls are made. And due to ADL the above call becomes ambiguous: > llvm::next or std::next? > > I recommend: > > MBBI = llvm::next(MBBI); > > -Howard > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
Evan Cheng wrote:> I am pretty sure the .cpp files always explicitly use "llvm" namespace. Look for: > using namespace llvm; > > Is that sufficient? >No; once it's visible through ADL (because ilist<>::iterator extends std::iterator) there's no hiding or precedence mechanism we can exploit. On the other hand, AFAICT std::next is interchangeable with llvm::next; we should be able to replace llvm::next with 'using std::next' in C++0x builds. John.
On Sun, 15 Nov 2009 22:49:42 -0800, Evan Cheng <evan.cheng at apple.com> wrote:> I am pretty sure the .cpp files always explicitly use "llvm" namespace. > Look for: > using namespace llvm; > > Is that sufficient? >No. To prevent ADL from finding std::next, you need an explicitly qualified name at the call site. Sebastian
On Nov 14, 2009, at 3:16 PMPST, Howard Hinnant wrote:> In many places there is code that looks like: > > MBBI = next(MBBI); > > In C++0X there is a std::next that is likely to be in scope when these > calls are made. And due to ADL the above call becomes ambiguous: > llvm::next or std::next? > > I recommend: > > MBBI = llvm::next(MBBI); > > -Howard"next" is a popular name; if it breaks llvm, I'd expect this standards change to break a lot of existing code. Do you really want to do that?
On Nov 16, 2009, at 1:43 PM, Dale Johannesen wrote:> > On Nov 14, 2009, at 3:16 PMPST, Howard Hinnant wrote: > >> In many places there is code that looks like: >> >> MBBI = next(MBBI); >> >> In C++0X there is a std::next that is likely to be in scope when these >> calls are made. And due to ADL the above call becomes ambiguous: >> llvm::next or std::next? >> >> I recommend: >> >> MBBI = llvm::next(MBBI); >> >> -Howard > > "next" is a popular name; if it breaks llvm, I'd expect this standards change to break a lot of existing code. Do you really want to do that?I'm happy to open an LWG issue for you on this subject. Here are directions on submitting an issue: http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#submit_issue Please don't hesitate to ask me if these directions aren't clear (I'll likely update the directions from your feedback). Here is a link to the latest C++0X draft that your issue will be directing the LWG to modify: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n3000.pdf The inclusion of next() into C++0X wasn't my proposal, nor do I have the authority to pull it. But I can open an issue if you provide it to me, and the LWG will then consider taking the action suggested by the issue. -Howard