Hãy xem xét một ví dụ:Có đảm bảo rằng khấu trừ dùng mẫu template tham số invoke cung cấp hướng dẫn
#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] cũng như [gcc] cả dường như sử dụng người sử dụng cung cấp hướng dẫn khấu trừ (# 2) khi suy ra như mẫu tham số của mẫu tham số mẫu (# 1). Đây có phải là tính năng tuân thủ tiêu chuẩn không?
Tôi thực sự mong đợi câu trả lời đó, nhưng nếu nó xảy ra sai .. thì tôi sẽ lấy lại;) –
như một câu hỏi nhỏ: bạn nghĩ rằng các hướng dẫn khấu trừ tự động không nên được áp dụng? –
@ W.F. Được rồi, tôi hoàn toàn lật câu trả lời :) – Barry