#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string str1 = "good", str2 = "luck";
swap(str1,str2); /*Line A*/
int x = 5, y= 3;
swap(x,y); /*Line B*/
}
If I comment Line B the code compiles(http://www.ideone.com/hbHwf) whereas commenting Line A the code fails to compile(http://www.ideone.com/odHka) and I get the following error:
error: ‘swap’ was not declared in this scope
Why don't I get any error in the first case?
swap(str1, str2)
works because of Argument dependent lookup
P.S: Pitfalls of ADL
You're not qualifying swap
; it works when passing in std::string
objects because of ADL, but as int
does not reside in namespace std
you must fully qualify the call:
std::swap(x, y);
or use a using declaration:
using std::swap;
swap(x, y);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With