繼承我想部分專門用於非字符數組的一個特點:從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中給了我一個C2039(type
是沒有enable_if
元... )。但是,SFINAE不應該只是在這裏底部而不是給出編譯器錯誤?或者SFINAE在這種情況下不適用?
當然我可以只單獨對非炭和炭的專業:
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 {};
但我真的很想知道爲什麼SFINAE不會在這種特殊情況下工作。
嗯,我認爲在'std :: enable_if'前面需要'typename',因爲依賴類型,但我不會把它作爲答案,因爲這只是猜測! – AraK
@Arak:在這種情況下不需要'typename'。在搜索基類時,編譯器在開始時排除所有非類型。看到這個:http://stackoverflow.com/questions/4347730/use-of-typename-keyword-with-template-function-parameters – Nawaz
@納瓦茲感謝:) – AraK