Trong trường hợp lỗi thay thế liên quan đến bí danh mẫu (ví dụ: bí danh mẫu trên tên tệp thành viên bị thiếu, như trong đoạn mã bên dưới), có nên kích hoạt lỗi không?bí danh mẫu và sfinae
Clang và gcc dường như không đồng ý về vấn đề này:
// some types
struct bar { };
struct foo {
typedef void member_type;
};
// template alias
template<class T>
using member = typename T::member_type;
template<class T>
void baz(...) { }
// only works for gcc, clang fails with: no type named 'member_type'
// in 'bar'
template<class T>
void baz(member<T>*) { }
int main(int, char**) {
baz<bar>(0); // picks first
baz<foo>(0); // picks second
return 0;
}
Vì vậy, câu hỏi là: ai là đúng, và tại sao?
Cảm ơn :-)
'clang -v' nói gì? Clang 3.3 trunk biên dịch mã chỉ tốt. – Xeo
Debian clang phiên bản 3.1-8 tại đây, có vẻ như tôi chỉ cần đợi. Cảm ơn phản hồi của bạn ! – max
Bạn có thể loại bỏ bí danh mẫu, chỉ để đơn giản hóa mọi thứ một chút – David