Tôi đang cố gắng để phần chuyên một đặc điểm cho mảng của phi chars:kế thừa từ một căn cứ enable_if'd
template<typename T>
struct is_container : std::false_type {};
template<typename T, unsigned N>
struct is_container<T[N]>
: std::enable_if<!std::is_same<T, char>::value, std::true_type>::type {};
Visual Studio 2010 mang lại cho tôi một C2039 (type
là không có yếu tố enable_if
...). Tuy nhiên, không nên SFINAE chỉ ở dưới đây thay vì đưa ra một lỗi biên dịch? Hoặc SFINAE không áp dụng trong trường hợp này?
Tất nhiên tôi chỉ có thể tách các chuyên ngành cho phi char và char:
template<typename T>
struct is_container : std::false_type {};
template<typename T, unsigned N>
struct is_container<T[N]> : std::true_type {};
template<unsigned N>
struct is_container<char[N]> : std::false_type {};
Nhưng tôi thực sự muốn biết lý do tại sao SFINAE không hoạt động trong trường hợp đặc biệt này.
Vâng, tôi nghĩ rằng 'typename' là cần thiết trước' std :: enable_if', bởi vì loại phụ thuộc nhưng tôi sẽ không đặt nó như là câu trả lời vì đây chỉ là suy đoán! – AraK
@Arak: Không. Tên tệp 'không được yêu cầu trong ngữ cảnh đó. Trong khi tìm kiếm lớp cơ sở, trình biên dịch loại trừ tất cả các loại không phải lúc đầu. Xem này: http://stackoverflow.com/questions/4347730/use-of-typename-keyword-with-template-function-parameters – Nawaz
@Nawaz Cảm ơn :) – AraK