考慮下面的代碼:decltype(auto),追蹤返回類型和sfinae:我們可以混合它們嗎?
auto f() -> decltype(auto) { /* do whatever you want here */ }
int main() { f(); }
返回類型推導並decltype(auto)
用作後返回類型。
下面的代碼是一個稍微修改的(實際上,sfinae'd)版本:
struct S { static void f() {} };
struct T {};
template<typename U>
auto f(int) -> decltype(U::f(), void()) {
// do whatever you want here
}
template<typename>
auto f(char) -> decltype(auto) {
// do whatever you want here
}
int main() {
f<S>(0);
f<T>(0);
}
如果你在考試採取這樣的功能:
template<typename U>
auto f(int) -> decltype(U::f(), void()) {
// do whatever you want here
}
的問題是:是否有可能使用尾隨返回類型來做sfinae並且仍然具有推導出的返回類型?
我的意思是像下面的代碼(不工作,當然):
template<typename U>
auto f(int) -> decltype(U::f(), auto) {
// do whatever you want here
}
注:我不是在尋找涉及模板參數的替代方法,我知道他們和我」米只是好奇,知道如果這是一個可行的解決方案。
不要以爲這是可能的,但你想要的類型推斷爲'auto'或者'decltype(auto)'? – Holt
不要以爲這裏有什麼可以做的。特意扣除退貨類型不要SFINAE。 – Xeo
@Holt好問題,我會說在第一個例子中有'decltype(auto)',但是如果你知道如何將它推斷爲'auto',它也可以是一個很好的答案。 – skypjack