C++ - 带引用类型的模板实例化

jhh*_*jhh 13 c++ templates

我听过一些关于引用参考问题和这个解决方案的内容.我对C++委员会术语不是很了解,但我理解链接中的"Moved to DR"注释意味着这是符合标准的编译器应遵循的当前解释.

我有这个我无法理解的示例代码:

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
}
Run Code Online (Sandbox Code Playgroud)

我理解错误C<const int&>:使用DR#106中的规则,我们得到两个具有相同签名f(const int&)的方法.我不能得到的是C<int&>:它不应该生成完全相同的代码C<int>(至少根据Stroustrup的分辨率)?

ice*_*ime 3

DR仅意味着“缺陷报告”,据我所知,所描述的分辨率尚未达到标准。因此,我认为严格符合 C++03 的实现不应编译此代码,因为它正在形成对引用的引用。

[编辑]刚刚在这个问题上找到了一个很好的答案