0

그것은 아마 질문,하지만 난 VC 2012이 코드를 작동하게하는 방법에 관심이되었다VC++ 2012 : "인수 별 조회를 사용하여 발견되었습니다"해결 방법?

#include <vector> 

namespace ns { 
    struct Obj { }; 
    template <class T> void swap(T& a, T& b) { } 
} 


int main(int argc, char* argv[]) 
{ 
    std::vector<ns::Obj> v; 
    std::vector<ns::Obj>().swap(v); <-'std::swap' : ambiguous call to overloaded function 
    return 0; 
} 

내가이 NS 네임 스페이스를 사용해야하고, 변경할 수 없습니다. 그것은 STL없이 작동 할 수 있어야하며 자체 스왑 (swap)을 가지고 있습니다. 어떻게 제대로 STL과 함께 사용 하는가?

+0

사실 g ++과 clang ++는'ns :: swap '을 전혀 호출하지 않기 때문에 MSVC의 버그처럼 보입니다. 나는 가능한 또 다른 해결책을 게시하려고 노력할 것이다. –

답변

0

좋아, 여기에 표준에 대한 솔루션입니다 : 벡터() 스왑 (V) :.

namespace ns { 
inline void swap(Obj*& a, Obj*& b) { } 
inline void swap(Obj& a, Obj& b) { } 
} 

그러나, 나는 이런 식으로 뭔가 할 수 있기 때문에이없는 일반 수정 :

std::map<int, std::map<int, ns::Obj>> m; 
m[0] = m[1]; 

편집 : 여기

은 위의 경우에 작동하는 또 다른 해킹

namespace ns { 
template <class T> void swap(T* a, T* b) { } 
inline void swap(Obj& a, Obj& b) { } 
} 
+0

g ++과 clang ++는 결코'ns :: swap'을 호출하지 않습니다 .... –

0
#ifdef NS_USE_STL 

#include <utility> 

namespace ns { 

using std::swap; 

} 

#else 

// define your own swap 

#endif