【发布时间】:2016-07-08 13:22:29
【问题描述】:
#include <iostream>
using std::cout;
template<typename T>
class A{
public:
template<typename U>
void f(U const&) & ;
template<typename U>
void f(U const&) && ;
};
template<typename T>
template<typename U>
void A<T>::f(U const& x) & { std::cout << "lvalue object\n" ; }
template<typename T>
template<typename U>
void A<T>::f(U const& x) && { std::cout << "rvalue object\n" ; }
// template class A<int> ;
// template void A<int>::f<int>(int const&) & ;
// template void A<float>::f<int>(int const&) &&;
int main(){
A<int> a ;
a.f<int>(2); // lvalue
A<float>().f<int>(1); // rvalue
}
代码运行,除非我尝试将其分解为单独编译 (*.hh、*.cc、*.ie 和 main)。 (注释掉的)声明将发布 一个编译器 ICE。
我看不出实例化语法有什么问题。有人可以 帮我解决这个问题...
【问题讨论】:
-
您遇到的确切错误是什么?这是什么语言,C?
-
C++,在 gcc-4.9.3 和 gcc-6.1.0 中存在同样的问题(顺便说一句,它的编译安装时间是 4.9.3 的四倍)。你得到的错误很奇怪,没有必要复制。
标签: c++ templates ref-qualifier