Tôi bị lúng túng: khi nâng cấp lên GCC 6 (RC1) một số mã mẫu sử dụng std::common_type
hoạt động trước khi không thành công. Tôi đã thử trên tiếng kêu, và điều đó cũng thất bại ... vì vậy tôi phải làm điều gì đó sai trái!std :: common_type với tham chiếu đến type_info
Mã số tiền:
#include <type_traits>
#include <typeinfo>
using namespace std;
// common_type of two const type_info& is ok (compiles ok)
common_type<const type_info&, const type_info&>::type func1();
// common_type of three type_info& is bad...(fails to compile)
common_type<const type_info&, const type_info&, const type_info&>::type func2();
// common_type of two const int& is ok
common_type<const int&, const int&>::type func3();
// common_type of three const int& is ok too!
common_type<const int&, const int&, const int&>::type func4();
Thứ hai common_type
với ba thông số của loại std::type_info const &
thất bại trong việc biên dịch. clang cryptically gợi ý tôi sử dụng một hai đối số std::common_type
, nhưng điều này là trong một bản mở rộng mẫu mà tôi không thể kiểm soát đầu vào!
Điều này có vẻ rất kỳ lạ: tại sao trường hợp const type_info&
với 3 lỗi nhưng không phải bất kỳ loại dường như tương đương nào khác không thành công?
Xem ở đây: https://godbolt.org/g/Ob4y0x
'common_type' hiện phân rã và kết quả là những điều" vui nhộn ". –
Một số tài liệu tham khảo twitter chỉ cho tôi thực tế là 'std :: common_type' trả về' std :: decay' của Ts ... điều này gây phiền toái cho trường hợp sử dụng của tôi nhưng giải thích các lỗi ở trên. –
@MattG: Bạn luôn có thể thay thế 'common_type_t 'theo' common_type_t ...> ', tuy nhiên, nó không nên gây phiền toái. –