Trong khi chơi với các tham chiếu phổ quát, tôi bắt gặp trường hợp này, nơi clang và gcc không đồng ý về độ phân giải quá tải.Đối số lvalue có thích tham số tham chiếu lvalue hơn tham chiếu chung không?
#include <iostream>
struct foo {};
template<typename T>
void bar(T&) { std::cout << "void bar(T&)\n"; }
template<typename T>
void bar(T&&) { std::cout << "void bar(T&&)\n"; }
int main()
{
foo f;
bar(f); // ambiguous on gcc, ok on clang
}
gcc reports cuộc gọi ở trên không rõ ràng. Tuy nhiên, clang chọn quá tải và biên dịch thành công T&
.
Trình biên dịch nào sai và tại sao?
Chỉnh sửa:
Đã kiểm tra cùng mã trên Bản xem trước VS2013 và đồng ý với tiếng kêu; ngoại trừ Intellisense, bên phía gcc :-)
Đây là [GCC bug 54425] (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54425). – Casey
Cả hai trình biên dịch intel (13.0.1) và pgi (13.4) cũng mang lại một lỗi về điều đó. – Zulan