http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52363
--- Comment #8 from Daniel Krügler <daniel.kruegler at googlemail dot com> 2012-04-18 14:41:38 UTC --- (In reply to comment #7) > Daniel, can you have a look to snippet in Comment #5? Should it compile or > not? It needed a while until I recognized that the second operator= overload is a const function: With this fact my *tentative* interpretation is that the static assertion should fire, because we have a non-const proxy rvalue and a non-const int rvalue. The non-const proxy argument has a better match with the non-const object parameter of the first function, but the int rvalue has a better match with the int&& argument of the second function. The corresponding C++03 problem would be described by struct proxy { void operator=(int const&); void operator=(int &) const; }; template<class T> T& create(); int v = sizeof(create<proxy>() = create<int>(), 0); and is ambiguous as well. The alternative fix (instead of removing the const from the function) is to *add* a const to left hand type (i.e. use "const proxy" instead).