您可以刪除問題中關于enable_if的所有內容。可以歸結為以下三點: void是無效的匿名模板參數: template<class T, void>void SwapInPlace( T& left, T& right ); void*作為具有默認值的匿名模板參數是可以的: template<class T, void* = nullptr >void SwapInPlace( T& left, T& right ); void因為返回類型是確定的: template<class T>void SwapInPlace( T& left, T& right ); 如果您將第一個case更改為沒有默認值的有效匿名模板參數,如int或void*,它將編譯: template<class T, int>void SwapInPlace( T& left, T& right ); ... 直到你真正嘗試使用它。然后會得到“無法推斷模板參數<anonymous>”或類似的結果。