4
之後,但在定義和聲明中使用decltype不匹配。下面是一些代碼:與成員函數的定義我使用decltype的成員函數的返回類型聲明
template<typename T>
struct A {
T x;
auto f() -> decltype(x);
};
template<typename T>
auto A<T>::f() -> decltype(x) {
return this->x;
}
int main() {}
這將產生
test.cc:10:6: error: prototype for 'decltype (((A<T>*)0)->A<T>::x) A<T>::f()' does not match any in class 'A<T>'
test.cc:6:7: error: candidate is: decltype (((A<T>*)this)->A<T>::x) A<T>::f()
的不同之處在於定義有(A<T>*)0
在聲明有(A<T>*)this
。是什麼賦予了?
你使用什麼編譯器? –
什麼'A :: x'而不只是'x'說。不過,我不知道它是否有效,或者是否應該如此。 –
@ChristianRau實際上,這是我在gcc解決此問題之前實施的解決方案。 – Bakkot