0
下應,我相信,編譯和鏈接,但並不:限制指針型模板參數和模板化基地的重寫虛方法的類
template<class S>
class A {
public:
virtual int foo(S arg) = 0;
virtual ~A() { }
};
class B : public A<int* __restrict__>
{
public:
int foo(int* __restrict__ arg) override { return 0; }
};
int main() { B b; }
編譯器輸出:
d9.cpp:11:6: error: ‘int B::foo(int*)’ marked override, but does not override
int foo(int* __restrict__ arg) override { return 0; }
^
d9.cpp: In function ‘int main()’:
d9.cpp:14:16: error: cannot declare variable ‘b’ to be of abstract type ‘B’
int main() { B b; }
^
d9.cpp:8:7: note: because the following virtual functions are pure within ‘B’:
class B : public A<int* __restrict__>
^
d9.cpp:4:14: note: int A<S>::foo(S) [with S = int* __restrict__]
virtual int foo(S arg) = 0;
如果我在兩個地方刪除了__restrict__
限定符,它會編譯並鏈接。我究竟做錯了什麼?
注:
- 這是唯一問題,關於SO(截至截稿時)兩個方面的限制預選賽和模板。很好笑,不是嗎?
- 我使用GCC 4.9.3和
--std=c++11
。
什麼是編譯器錯誤? – tahsmith
「我做錯了什麼?」期待編譯器的擴展帶來另一種語言的特性與C++特有的功能無縫集成 –
@Revolver_Ocelot:但是'restrict'非常重要......它不是一個不太好用的功能。 – einpoklum