KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Probably been asked before, but all this is approaching the limit of my comprehension and cognizance of C++, so I'm a little slow in understanding what's being talked about and exactly what's going on. Let me just jump straight to the code. This works: template <typename T> class Foo { struct Bar { Bar() {} ~Bar() noexcept {} Bar(Bar&& b) : Bar() { swap(*this, b); } friend void swap(Bar& b1, Bar& b2) { /* ... */ } }; }; template class Foo<int>; // explicit instantiation of Foo with int type But how do I move the definition of swap outside of the Bar struct body? If I do this: template <typename T> class Foo { struct Bar { // ... Bar(Bar&& b) : Bar() { swap(*this, b); } // line 16 // ... template <typename V> friend void swap(typename Foo<V>::Bar&, typename Foo<V>::Bar&); }; }; template <typename T> void swap(typename Foo<T>::Bar& b1, typename Foo<T>::Bar& b2) {} // line 26 template class Foo<int>; // line 31 g++ (4.7.1, flags: -Wall -std=c++11) reports: main.cpp: In instantiation of ‘Foo<T>::Bar::Bar(Foo<T>::Bar&&) [with T = int; Foo<T>::Bar = Foo<int>::Bar]’: main.cpp:31:16: required from here main.cpp:16:28: error: no matching function for call to ‘swap(Foo<int>::Bar&, Foo<int>::Bar&)’ main.cpp:16:28: note: candidate is: main.cpp:26:6: note: template<class T> void swap(typename Foo<T>::Bar&, typename Foo<T>::Bar&) main.cpp:26:6: note: template argument deduction/substitution failed: main.cpp:16:28: note: couldn't deduce template parameter ‘T’ I guess the code for swap a
Tags (comma-separated)
Save Edits
Cancel