我試圖在函數參數上使用std::enable_if
來觸發SFINAE。編譯失敗,此錯誤:扣除參數失敗,返回值工作
type_nonsense.cpp:20:5: error: no matching function for call to 'c'
c(SOME::VALUE);
^
type_nonsense.cpp:13:6: note: candidate template ignored: couldn't infer
template argument 'T'
void c(typename std::enable_if<std::is_enum<T>::value, T>::type t) {}
^
1 error generated.
移動std::enable_if
要麼返回類型或虛擬模板參數正常工作。爲什麼?
#include <type_traits>
// Works
template <typename T, typename dummy = typename std::enable_if<std::is_enum<T>::value, T>::type>
void a(T t) {}
// Works
template <typename T>
typename std::enable_if<std::is_enum<T>::value, void>::type b(T t) {}
// Fails to compile
template <typename T>
void c(typename std::enable_if<std::is_enum<T>::value, T>::type t) {}
enum class SOME { VALUE };
int main() {
a(SOME::VALUE);
b(SOME::VALUE);
c(SOME::VALUE);
}
' template void func(std :: vector :: iterator)'出於完全相同的原因失敗,與SFINAE無關。 –
2014-10-29 19:34:17