I’ve heard a little bit about reference-to-reference problem and this resolution. I’m not very good with C++ Committee terminology, but I understand the “Moved to DR” annotation in the link means that this is the current interpretation that standard-conforming compilers should adhere to.
I have this sample code that I can’t understand:
template <typename T>
struct C {
void f(T&) { }
void f(const T&) { }
};
int main() {
C<int> x; // OK
C<int&> y; // compile error: f cannot be overloaded
C<const int&> z; // compile error: f cannot be overloaded
}
I understand the error in C<const int&> case: using rules from DR #106 we get two methods with the same signature f(const int&). What I don’t get is the C<int&> case: shouldn’t it generate exactly the same code as C<int> (at least according to Stroustrup’s resolution)?
DR only means “Defect Report”, and to my knowledge, the described resolution hasn’t made it (yet) to the standard. For this reason, I believe a strictly conforming C++03 implementation should not compile this code because of it is forming a reference to a reference.
[Edit] Just found a nice answer on this issue.