我有一個模板函數,其中枚舉類型轉換爲其基礎類型,但工作正常,但我寫了一個重載應該採取一個整數並返回自身,它給我一個int不是枚舉類型的錯誤。在我的模板中,這應該被過濾掉。哪裏不對?從類型到相同類型的「轉換」導致錯誤
這裏是模板代碼:
template <typename TT>
static constexpr auto get_value(TT t)
-> typename std::enable_if<!std::is_enum<TT>::value, TT>::type
{
return t;
}
template <typename TT>
static constexpr auto get_value(TT t)
-> typename std::enable_if<std::is_enum<TT>::value, typename std::underlying_type<TT>::type>::type
{
return (typename std::underlying_type<TT>::type)t;
}
我不知道'underlying_type'是SFINAE友好,但有一個[解決方法](http://coliru.stacked-crooked.com/a/e7f1dd3b75c8d9c2)爲 –
什麼?我看到它有效,但是這裏發生了什麼,使它起作用了?爲什麼SFINAE友好的'underlying_type'不會? – Adrian
「std :: underlying_type :: type」的實例化被推遲,所以'enable_if'可能首先失敗。 * * SFINAE友好的*我的意思是任何替換失敗都只發生在緊接着的上下文中(如果它發生在'underlying_type'本身內部,它不是SFINAE友好的)。 –