0
我想知道爲什麼下面的功能模板專業化不編譯 (由於no return statement in function returning non-void
)。功能模板專業化bool返回值
class Boring {
public:
template<typename T> bool eval() const { }
};
template<> inline bool Boring::eval<int>() const { return true; }
我期望非專業功能模板不會被評估,除非使用。如果返回類型更改爲T*
,則以下編譯成功。
int x = 5;
class Boring {
public:
template<typename T> T* eval() const { }
};
template<> inline int* Boring::eval<int>() const { return &x; }
我想我的問題來自這樣一個事實,即在T *情況下的主要eval模板將導致相同的錯誤(無效的返回類型),但布爾返回情況導致編譯錯誤。這兩個函數模板都有空體。 –
@JohnKane這是一個實施質量問題。在第二種情況下,由於無法檢測到缺少return語句,請針對您的編譯器提出錯誤。 – Brian