Phần nào của đặc tả C++ hạn chế tra cứu phụ thuộc đối số từ việc tìm kiếm mẫu hàm trong tập hợp các không gian tên được liên kết? Nói cách khác, tại sao cuộc gọi cuối cùng ở số main
bên dưới không thể biên dịch được?Tại sao ADL không tìm thấy mẫu chức năng?
namespace ns {
struct foo {};
template<int i> void frob(foo const&) {}
void non_template(foo const&) {}
}
int main() {
ns::foo f;
non_template(f); // This is fine.
frob<0>(f); // This is not.
}
Liệu nó có nghĩa, mà bạn mong đợi để làm việc frob() mà không cần viết ns :: frob()? – Simon
Có, theo cách thức của một chức năng không phải mẫu. – Hugh
FYI mã trên không thành công trong Comeau cũng như: http://www.comeaucomputing.com/tryitout/ - thêm 'sử dụng không gian tên ns;' hoặc 'ns ::' trình độ vượt qua biên dịch. Đây là một câu hỏi hay. – fbrereto