8
考慮這樣一個例子:能夠保證所有的模板,模板參數調用用戶提供扣除引導
#include <type_traits>
#include <string>
template <template <class> class TT> //#1
struct Foo {
static void foo() {
static_assert(std::is_same_v<decltype(TT("abc")), TT<std::string>>);
}
};
template <class T>
struct Bar {
Bar(T) {}
};
template <class T>
Bar(T) -> Bar<std::string>; //#2
int main() {
Foo<Bar>::foo();
}
[clang]以及[gcc]似乎都使用用戶提供的扣除指南(#2)推導模板的模板參數時模板參數(#1)。它是符合標準的功能嗎?
我真的期待這個答案,但是如果碰巧是錯誤的,那麼我會把它拿回來;) –
作爲一個小問題:你認爲自動演繹指南不應該被應用嗎? –
@ W.F。好吧,我徹底翻轉了答案:) – Barry